DbGeography多边形获得点

时间:2014-08-19 00:47:40

标签: entity-framework geospatial

我有一个Polygon在SQL Server 2012数据库中保留为Sys.Geography类型。如何获得Polygon的所有点?

我正在考虑使用AsText()方法并解析字符串,但也许有更好的选择?

3 个答案:

答案 0 :(得分:7)

找到方法,这是一个扩展方法:

public static IEnumerable<MyEntityWithLatAndLng> GetPointsFromPolygon(this System.Data.Entity.Spatial.DbGeography geo)
{
   for (int i = 1; i < geo.PointCount; i++)
   {
     var p = geo.PointAt(i);
     yield return new MyEntityWithLatAndLng(){ Latitude = p.Latitude.Value, Longitude = p.Longitude.Value };
  }
}

答案 1 :(得分:5)

我认为亚历山大几乎有这个正确,他从点列表中缺少多边形的最后一个元素。请参阅下面的更新代码。

public static IEnumerable<MyEntityWithLatAndLng> GetPointsFromPolygon(this System.Data.Entity.Spatial.DbGeography geo)
{
   for (int i = 1; i <= geo.PointCount; i++)
   {
      var p = geo.PointAt(i);
      yield return new MyEntityWithLatAndLng(){ Latitude = p.Latitude.Value, Longitude = p.Longitude.Value };
   }
}

答案 2 :(得分:0)

SqlGeography class有一个方法STPolyFromText 这允许你获得带点数组的多边形。

例如在C#中:

SqlGeography poly = SqlGeography.STPolyFromText(
new SqlChars(yourEntity.geoColumn.WellKnownValue.WellKnownText),
yourEntity.geoColumn.CoordinateSystemId);
for (int i = 1; i <= poly.STNumPoints(); i++)
{
 SqlGeography point = poly.STPointN(i);
 //do something with point
}