如何使用C#实体框架5 DbGeography空间数据来修正多边形环方向(How to correc

2019-07-31 13:02发布

我与新的实体框架5个使用空间数据类型作为DbGeography我的模型的一部分,在一个实例中,A点和在另一个实例多边形存储。

当设置我的多边形的价值都没有错误节省然而,这只是个案,如果我绘制多边形按顺时针顺序在地图上。 如果我在反时针方向绘制POLGON我得到一个错误的指示数据是无效的地理类型的SQL水平。

现在,做我自己的研究问题后,它似乎从地理数据类型是在多边形环方向的条件相当严格制止。 最常用的解决方案似乎是创建多边形作为几何,然后将其转换成地理类型。

我要寻找一个在C#中的解决方案之前,它被发送到SQL可应用于数据。 基本的东西,会自动修正坐标的阵列的环方向。

我试图捕捉错误,然后通过颠倒阵列重建的字符串。 这部作品在某些情况下,但首先它是不可靠的,其次捕捉的错误是一个大的性能损失。

谢谢克里斯

Answer 1:

您好我有同样的问题,并通过使用解决了它

var sqlGeography = SqlGeography.STGeomFromText().MakeValid()
var invertedSqlGeography = sqlGeography.ReorientObject();

更多详情请点击这里



Answer 2:

我已经命令发出我自己,我解决它使用MakeValidGeographyFromText功能从SQLSpatialTools我用一个SP内部的方式如下:

SET @ge = dbo.MakeValidGeographyFromText(
    'POLYGON((' + @pois + '))', 4326);

其中@pois是含有格式无效的坐标的字符串,但错误的方向转动。

我不知道这是多么容易与EF-5整合,但我看到有两种方式:

  1. 直接从C#使用函数,调用EF用正确的多边形前。
  2. 在SQL服务器上安装sqlspatialtools,并做处理那里。


Answer 3:

这里同样的问题,使用Bing地图V7和它们的形状工具包绘制多边形这里找到: http://bingmapsv7modules.codeplex.com/wikipage?title=Shape%20Toolbox%20Module



Answer 4:

出现这种情况的原因是,对于地理类型,当方向是从你的角度“错误”,你基本上创造了整个地球,除了预期的区域。

第一步是检测是否是这种情况。 这可以很容易地与完成EnvelopeAngle()方法(请参阅Microsoft文档 )。 当这个角度> 90°,你的多边形描述比半球以上,这意味着取向是不是你打算和顺序应该颠倒过来。

倒车是可以做到的ReorientObject()

因此,像这样应该做的伎俩

SqlGeography geoPolygon = ....;
if (geoPolygon.EnvelopeAngle() > 90)
{
    geoPolygon = geoPolygon.ReorientObject();
}


文章来源: How to correct Polygon Ring Orientation using C# Entity Framework 5 DbGeography Spatial Data