geometry - 将 SkipGeographyChecks 设置为 true
问题描述
嗨,我在保存多个多边形时遇到了这个异常。如何将SkipGeographyChecks设置为 true ?
例外:
写入 SQL Server 地理值时,多边形的外壳必须逆时针方向。要编写没有外壳的多边形,请设置 SkipGeographyChecks
代码示例:
var geometryFactory = NtsGeometryServices.Instance.CreateGeometryFactory(srid: 4326);
var poly = new Polygon[] {
new Polygon(new LinearRing(new Coordinate[]
{
new Coordinate(19.2385498607974, -51.50390625,0),
new Coordinate(24.1367281697474, -37.6171875,0),
new Coordinate(13.8487471475372, -18.10546875,0),
new Coordinate(19.2385498607974, -51.50390625,0),
})),
new Polygon(new LinearRing(new Coordinate[]
{
new Coordinate(-10.0445849842118, -53.0859375,0),
new Coordinate(4.13824308398371, -58.7109375,0),
new Coordinate(2.20770545570541, -68.73046875,0),
new Coordinate(-8.83079518432893, -79.1015625,0),
new Coordinate(-17.3820949478775, -81.2109375,0),
new Coordinate(-21.0332372344673, -51.328125,0),
new Coordinate(-10.0445849842118, -53.0859375,0),
}))
};
var currentLocation = geometryFactory.CreateMultiPolygon(poly) as MultiPolygon;
dbset.Polygons = currentLocation;
_context.Add(dbset);
await _context.SaveChangesAsync();
解决方案
据我所知, SkipGeographyChecks 在从该错误中删除对它的引用之前已作为属性被删除 - Github issue for remove the reference to this property。
我还发现,如果多边形的点按错误的方向排列,则可能会出现此错误。惯例是点的方向是多边形的“内部” - 即:如果多边形的点是逆时针的,则该多边形的区域在边界内,但如果点是顺时针的,那么该区域是整个世界,除了该边界内(因为这些点基本上是逆时针围绕边界外的所有内容)。IPolygon.Shell.IsCCW
您可以通过检查属性来确定这是否是您的问题。如果这是您的问题,您可以使用该IPolygon.Shell.Reverse()
方法解决它。有关您可以使用的一些实际代码,请参阅此 GIS StackExchange 问题(我在其中找到此信息)。
推荐阅读
- sql - SQL Pivot 和 Distinct from new Columns
- python - 为什么 3d 不想要 ddtype?
- python-3.x - 使用 df.iloc 选择几个不同的范围?
- c# - 在 C# 中模拟按键?
- ruby-on-rails - BackgroundJob 在保存时触发多次(Rails 5,Sidekiq)
- javascript - 在另一个函数中传递一个函数值(Angular js)
- django - 提交表单后Django获取(AttributeError:'str'对象没有属性'get')
- amazon-web-services - 使用 AWS 密钥在组织之间传输数据
- java - 如果应用于有序的项目列表,如何优化线性搜索?
- python - AWS Lambda 问题中的 Python-binance:无法导入模块...没有名为“regex._regex”的模块