【问题标题】:DbGeography polygon get pointsDbGeography 多边形获取点
【发布时间】:2014-08-19 00:47:40
【问题描述】:

我有一个 Polygon 作为 Sys.Geography 类型保存在 SQL Server 2012 数据库中。如何获得多边形的所有分数?

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

【问题讨论】:

  • 你可以试试看sql server是否支持st_dumppoints()(或者只是dumppoints())函数。它在 postgis 中工作,并且这些 ogc 扩展旨在具有互操作性。

标签: entity-framework geospatial


【解决方案1】:

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

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】:

    我认为 Alexandre 几乎是正确的,他错过了点列表中多边形的最后一个元素。请参阅下面的更新代码。

    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 };
       }
    }
    

    【讨论】:

      【解决方案3】:

      SqlGeography 类有一个方法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
      }
      

      【讨论】:

      • 我问的是多边形到点,而不是 wkt 到多边形。无论如何,谢谢
      猜你喜欢
      • 2013-04-13
      • 1970-01-01
      • 2012-12-07
      • 2011-07-03
      • 1970-01-01
      • 1970-01-01
      • 2013-05-26
      • 2020-11-10
      • 1970-01-01
      相关资源
      最近更新 更多