首页 > 解决方案 > 执行 DbGeometry 包含操作时出现 SqlNullValueException

问题描述

尝试进行操作时,我遇到了一个奇怪的异常Contains,即一个实例位于另一个实例中。google 上没有针对此异常的结果,并且两个几何实例都不为空且有效。

var inside = gridShape.Shape_MGA.Contains(shape.shapeMga)

Unhandled Exception: System.Data.SqlTypes.SqlNullValueException: Data is Null. This method or property cannot be called on Null values.
   at System.Data.SqlTypes.SqlBoolean.get_Value()
   at lambda_method(Closure , Object )
   at System.Data.Entity.SqlServer.SqlTypesAssembly.SqlBooleanToBoolean(Object sqlBooleanValue)
   at System.Data.Entity.SqlServer.SqlSpatialServices.Contains(DbGeometry geometryValue, DbGeometry otherGeometry)
   at System.Data.Entity.Spatial.DbGeometry.Contains(DbGeometry other)
   at ReprojectShapes.Program.ConvertSourceShapesToLocalGrid(String geoConnStr, List`1 shapesToReproject) in C:\dev\geology-workbench\WorkbenchService\Reproject
Shapes\Program.cs:line 152
   at ReprojectShapes.Program.Main(String[] args) in C:\dev\geology-workbench\WorkbenchService\ReprojectShapes\Program.cs:line 33

标签: c#

解决方案


答案原来是两个实例的SRID不同!

一个是以天真的方式创建的:

shape.shapeMga = DbGeometry.FromText(sourceShape1.shapeWkt);

另一个以更“正确”的方式:

gridShape.Shape_MGA = DbGeometry.FromText(gridExtentsWkt, 28350);

推荐阅读