c# - 执行 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
解决方案
答案原来是两个实例的SRID不同!
一个是以天真的方式创建的:
shape.shapeMga = DbGeometry.FromText(sourceShape1.shapeWkt);
另一个以更“正确”的方式:
gridShape.Shape_MGA = DbGeometry.FromText(gridExtentsWkt, 28350);
推荐阅读
- xamarin.forms - 层次结构 xamarin 形式
- talend - 当任何行未通过验证规则时如何拒绝整个输入 CSV 文件
- javascript - 如何在点击时播放声音而不等待前一个声音完成播放?
- css - 使用 userChrome.css 修改 Mozilla Thunderbird-68 按钮
- checkbox - 一次选择几个似乎是图像的复选框
- xamarin.forms - GoBackAsync(useModalNavigation:true) 到 MasterDetailPage 在 UWP 上不起作用
- python - 使用递归在地图上查找可能的路径。需要帮助
- linux - sed用另一个字符串替换字符串错误结果
- javascript - HTTP Post 请求未从 ionic 发送正文或参数数据
- javascript - 使用 Firebase 身份验证在 Angular 中自定义重置电子邮件页面