我有一个Polygon在SQL Server 2012数据库中保留为Sys.Geography类型。如何获得Polygon的所有点?
我正在考虑使用AsText()方法并解析字符串,但也许有更好的选择?
答案 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
}