首页 > 解决方案 > 将 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();

标签: geometryentity-framework-corepolygon

解决方案


据我所知, SkipGeographyChecks 在从该错误中删除对它的引用之前已作为属性被删除 - Github issue for remove the reference to this property

我还发现,如果多边形的点按错误的方向排列,则可能会出现此错误。惯例是点的方向是多边形的“内部” - 即:如果多边形的点是逆时针的,则该多边形的区域在边界内,但如果点是顺时针的,那么该区域是整个世界,除了该边界内(因为这些点基本上是逆时针围绕边界外的所有内容)。IPolygon.Shell.IsCCW您可以通过检查属性来确定这是否是您的问题。如果这是您的问题,您可以使用该IPolygon.Shell.Reverse()方法解决它。有关您可以使用的一些实际代码,请参阅此 GIS StackExchange 问题(我在其中找到此信息)。


推荐阅读