如果我在 Bing-Maps 上显示了两个形状,我可以做任何一组数学吗?
我真正想要的是采用两个相交的形状,为相交确定第三个形状,然后减少原始形状以排除相交。
我实际上有相交形状,所以关键是从原始形状中“咬”一口。
这样做的原因是当前将交叉点显示为第三层(以提供特定颜色)会产生一个很大程度上被遮挡的地图,其中部分透明 shape1 和 shape2 以及交叉点都覆盖了地图的同一位。
如果我可以“削减”两个主要形状,那么只有相交形状会着色/覆盖地图的那一部分。
如果我在 Bing-Maps 上显示了两个形状,我可以做任何一组数学吗?
我真正想要的是采用两个相交的形状,为相交确定第三个形状,然后减少原始形状以排除相交。
我实际上有相交形状,所以关键是从原始形状中“咬”一口。
这样做的原因是当前将交叉点显示为第三层(以提供特定颜色)会产生一个很大程度上被遮挡的地图,其中部分透明 shape1 和 shape2 以及交叉点都覆盖了地图的同一位。
如果我可以“削减”两个主要形状,那么只有相交形状会着色/覆盖地图的那一部分。
我认为 Bing Maps API 中没有现成的解决方案。我过去用 Bing Maps API 做过类似的事情SqlGeography Class
。它很容易遍历我们的 Bing 多边形的点,因此我们可以将它们绘制成 SqlGeography Polygons或 SqlGeometry Polygons。
您将需要Microsoft.SqlServer.Types.dll
使用这个类,但 SqlExpress 是免费的。(请注意,您实际上不需要安装 SQL Server,您只需要引用 DLL)
您可以使用SqlGeography 类(或SqlGeometry 类)来查找相交的形状和点。或许看看STIntersection
Method,根据 MSDN STIntersection 会;
"Returns an object representing the points where a SqlGeography instance intersects another SqlGeography instance."
一旦你有了代表形状的对象是一个 SqlGeography 实例与另一个相交,你知道你需要以某种方式调整来自 SqlGeography 返回的 SqlGeography 实例的比较实例中的任何点StIntersection
。
这是彼得使用STDifference的一个类似问题。减去两个形状。
我将为您提供我为 Intersection 快速制作的 ac# 示例。我很难找到任何不是纯粹基于 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);
我相信您可以使用新的GeoRSS功能绘制形状- 它支持线、框、多边形和圆形。GeoRSS 被设计为一种轻量级的、社区驱动的方式,用于使用地理信息扩展现有提要。还可以查看GeoJson