如何用bing贴图进行形状数学计算?

时间:2013-05-24 08:17:03

标签: bing-maps

如果我在Bing-Maps上显示两个形状,我可以设置数学吗?

我真正想要的是采用两个相交的形状,确定交叉点的第三个形状,然后缩小原始形状以排除交点。

我实际上有交叉形状,所以关键位是从原始形状中“咬”出来。

这样做的原因是当前显示交叉点作为第三层(给出特定颜色)产生一个很大程度上被遮挡的地图,透明shape1和shape2的一部分以及交叉点都覆盖地图的相同位。

如果我可以'减少'两个主要形状,只有交叉点形状会颜色/覆盖地图的那一部分。

2 个答案:

答案 0 :(得分:1)

我认为Bing Maps API中没有开箱即用的解决方案。我过去使用Bing Maps API和SqlGeography Class做过类似的事情。它很容易遍历Bing多边形的点,因此我们可以将它们绘制成SqlGeography Polygons或SqlGeometry Polygons

你需要使用Microsoft.SqlServer.Types.dll来使用这个类,但是SqlExpress是免费的。(注意你实际上不需要安装SQL Server,你只需要引用DLL)

您可以使用SqlGeography Class(或SqlGeometry Class)查找相交的形状和点。或许可以查看STIntersection方法,根据MSDN STIntersection会的说法;

"Returns an object representing the points where a SqlGeography instance intersects another SqlGeography instance."

一旦你有一个表示形状的对象是一个SqlGeography实例与另一个实例相交,你知道你需要以某种方式调整来自StIntersection返回的SqlGeography实例的比较实例中的任何点。

以下是彼得使用simular questionSTDifference。要减去这两个形状。

我将为您提供一个我为交叉路口快速制作的c#示例。我找不到任何纯粹基于SQL Server的代码示例,我遇到了很多麻烦。

  SqlGeography Shape1 = new SqlGeography();
    SqlGeographyBuilder geographyBuilder1 = new SqlGeographyBuilder();
    geographyBuilder1.SetSrid(4326);
    geographyBuilder1.BeginGeography(OpenGisGeographyType.Polygon);
    geographyBuilder1.BeginFigure(47.4275329011347, -86.8136038458706);
    geographyBuilder1.AddLine(36.5102408627967, -86.9680936860962);
    geographyBuilder1.AddLine(37.4928909385966, -80.2884061860962);
    geographyBuilder1.AddLine(38.7375329179818, -75.7180936860962);
    geographyBuilder1.AddLine(48.0932596736361, -83.7161405610962);
    geographyBuilder1.AddLine(47.4275329011347, -86.8136038458706);// Remember last point in the polygon should match the first
    geographyBuilder1.EndFigure();
    geographyBuilder1.EndGeography();

    Shape1 = geographyBuilder1.ConstructedGeography;

    SqlGeography Shape2 = new SqlGeography();
    SqlGeographyBuilder geographyBuilder2 = new SqlGeographyBuilder();
    geographyBuilder2.SetSrid(4326);
    geographyBuilder2.BeginGeography(OpenGisGeographyType.Polygon);
    geographyBuilder2.BeginFigure(47.4275329011347, -86.8136038458706);
    geographyBuilder2.AddLine(36.5102408627967, -86.9680936860962);
    geographyBuilder2.AddLine(37.4928909385966, -80.2884061860962);
    geographyBuilder2.AddLine(47.4275329011347, -86.8136038458706);
    geographyBuilder2.EndFigure();
    geographyBuilder2.EndGeography();
    Shape2 = geographyBuilder2.ConstructedGeography;

    SqlGeography IntersectedShape = Shape1.STIntersection(Shape2);

答案 1 :(得分:0)

我相信你可以使用新的GeoRSS功能绘制形状 - 它支持线条,方框,多边形和圆形。 GeoRSS被设计为一种轻量级,社区驱动的方式,可以使用地理信息扩展现有的Feed。另请查看GeoJson