如果您想在 SQL2012 中获取多边形的周长,您可以获取它的外环。外环将是 LineString,即“@g.SExteriorRing()”。然后沿着那条线测量长度。即“@g.SExteriorRing().STLength()”。但是,国家通常不仅仅是单个多边形,它们可以是 MultiPpolygons 或 GeometryCollections。所以要计算这些长度,我们必须做更多的工作。这是一个帮助方法,您可以添加到服务中以计算这些形状的周长:
private double CalculateLength(SqlGeometry geom)
{
double length = 0;
if(string.Compare(geom.STGeometryType().Value, "polygon", true) == 0)
{
}
else if (string.Compare(geom.STGeometryType().Value, "multipolygon", true) == 0)
{
int numPolygon = geom.STNumGeometries().Value;
for(int i = 1; i <= numPolygon; i++){
length += geom.STGeometryN(i).STExteriorRing().STLength().Value;
}
}
else if (string.Compare(geom.STGeometryType().Value, "geometrycollection", true) == 0)
{
int numGeom = geom.STNumGeometries().Value;
for (int i = 1; i <= numGeom; i++)
{
length += CalculateLength(geom.STGeometryN(i));
}
}
return length;
}
要从服务器端获取长度信息到客户端,请向 Country 或 BaseEntity 类添加一个属性,如下所示:
[DataMember]
public double Perimeter { get; set; }
在使用 linq 查询获取响应结果后,您可以在此处填充此值,使用一个简单的循环调用之前的辅助方法:
for (int i = 0; i < r.Results.Count;i++)
{
var geom = SqlGeometry.STGeomFromText(new System.Data.SqlTypes.SqlChars(r.Results[i].WKT), 4326);
r.Results[i].Perimeter = CalculateLength(geom);
}
关于在地图上显示信息。将信息放置在折线上的一种简单方法是选择沿线的坐标,也许是中间的坐标,只需获取线中的 # 或坐标并找到中间索引并将该坐标用作图钉。然后,您可以使用带有文本的背景图像或使用自定义 HTML 创建自定义推送:
http://www.bingmapsportal.com/ISDK/AjaxV7#Pushpins4
http://www.bingmapsportal.com/ISDK/AjaxV7#Pushpins15