joh*_*p34 1 android google-maps
我在 Google Maps Android 平台上的多边形中保留多边形填充颜色时遇到问题。当多边形路径与自身重叠时,填充颜色消失。我使用相同的方法在 iOS 上突出显示我的路径,但它没有这种行为。请查看这些图像以注意当多边形路径中有重叠时填充颜色是如何消失的。
这是重叠前的正确颜色填充:
当多边形路径点位于同一多边形内时,颜色会消失:
iOS 上的行为不一样。多边形在 iOS 上保持填充。这是谷歌地图文档的摘录:
Fill color in ARGB format, the same format
used by Color. The default value is
transparent (0x00000000). If the polygon
geometry is not specified correctly (see
above for Outline and Holes), then no fill
will be drawn.
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的代码。基本上我有一条宽度为 X 的路径,并且突出显示了宽度为 X 的路径:
随着位置的变化,我取当前位置并计算左右点,例如:
LatLng leftPoint =
SphericalUtil.computeOffset(presentLoc,
widthInFeet * 0.3048, heading - 90);
Run Code Online (Sandbox Code Playgroud)
接下来我取右侧并反转数组并将其添加到左侧以制作多边形路径。然后我将该点数组传递到多边形中,以便随着位置的变化进行更新。
polygon.setPoints(polyPoints);
polygon.setFillColor(YELLOW);
polygon.setStrokeWidth(1);
Run Code Online (Sandbox Code Playgroud)
当存在不可避免的重叠(例如急转弯等)时,如何使上面的图像保持其填充颜色?
我从下面使用这个 com.google.maps.android.PolyUtil.simplify 来做 Douglas-Peucker 简化,但是这对重叠或通过路径返回的急转弯没有帮助。我很想使用多个较小的多边形而不是一个大的多边形,但我不想浪费系统资源,尤其是当应用程序具有相当大的路径时。
我想我至少会证明简化可以完成什么,并让您决定它是否可取。坦率地说,我还没有看到很多关于他们的算法如何执行的例子。
问题变成了公差参数需要是什么——对于一般情况来说,这是一个潜在的困难。
代码很简单——创建了两个多边形,一个是简化的结果。这也演示了未填充透明多边形的错误。
List<LatLng> points = new ArrayList<>();
points.add(new LatLng(39.182937,-76.823560));
points.add(new LatLng(39.180741,-76.821758));
points.add(new LatLng(39.190454, -76.810985));
points.add(new LatLng( 39.190221, -76.812530));
points.add(new LatLng(39.186961, -76.808239));
points.add(new LatLng(39.188724,-76.806264));
points.add(new LatLng(39.192882, -76.811328));
points.add(new LatLng(39.182937, -76.823560));
PolygonOptions rectOptions = new PolygonOptions()
.addAll(points);
// Get back the mutable Polygon
Polygon polygon = mMap.addPolygon(rectOptions);
polygon.setFillColor(Color.YELLOW);
points = new ArrayList<>();
points.add(new LatLng(39.182937,-76.834560));
points.add(new LatLng(39.180741,-76.832758));
points.add(new LatLng(39.190454, -76.821985));
points.add(new LatLng( 39.190221, -76.823530));
points.add(new LatLng(39.186961, -76.819239));
points.add(new LatLng(39.188724,-76.817264));
points.add(new LatLng(39.192882, -76.822328));
points.add(new LatLng(39.182937, -76.834560));
points = PolyUtil.simplify(points, 200.0);
rectOptions = new PolygonOptions()
.addAll(points);
// Get back the mutable Polygon
polygon = mMap.addPolygon(rectOptions);
polygon.setFillColor(Color.YELLOW);
Run Code Online (Sandbox Code Playgroud)
最后的结果——很明显,在算法中内三角形的一个顶点胜出的简化中牺牲了一些保真度——但仍然很有趣:
请注意,在此示例中,容差阈值约为 120 米 - 它会产生影响的点。
我同意@MartinZeitler 的观点,您的解决方案很可能是去除内部点。
归档时间: |
|
查看次数: |
1150 次 |
最近记录: |