Ich versuche, ein komplexes Polygon um eine Route zu zeichnen, seine Schritte mit einem bestimmten Radius folgen. Dazu habe ich 50-seitige gleichförmige Polygone (die praktisch Kreise sind) um jeden Schritt (Koordinate) der Route gezogen. Jetzt erhalte ich eine Menge von Koordinaten aller geplotteten Kreise um die Route, und ich kann sie auf der Karte sehen, aber sie sind überlappt, was nicht sehr gut aussieht, und es ist keine gute Übung, eine so große Anzahl von Überlagerungen hinzuzufügen die Karte.Android Google Maps PolygonOptions nicht aus angegebenen Koordinaten
Also, was ich jetzt tun müssen, ist es, alle Polygone zu verschmelzen Ich habe jetzt in einem Polygon und es in der Karte grafisch darzustellen.
Ich versuchte, die Schnittpunkte von jeweils zwei Polygonen zu löschen (zu testen, ob Punkte von Polygon1 innerhalb von Polygon2 liegen und umgekehrt) und alle übrigen Koordinaten in einem Array zusammenzufassen und dann mein neues Polygon zu konstruieren, aber es hat nicht funktioniert . Hier ist ein Code-Ausschnitt, wie ich das mache:
public ArrayList<PolygonOptions> polygons = new ArrayList<>();
// lineOptions is the set of route coordinates
for (int i = 0; i < lineOptions.getPoints().size() - 1; i++) {
// Draw a circle around each point of the route
PolygonOptions circle1 = drawCircle(lineOptions.getPoints().get(i), 0.1);
PolygonOptions circle2 = drawCircle(lineOptions.getPoints().get(i + 1), 0.1);
// Draw a convex hull between every two successive circles
PolygonOptions convexHull = convexHull(circle1, circle2);
convexHull.strokeWidth(0);
convexHull.fillColor(0x7F729E47);
activity.range.add(activity.mMap.addPolygon(convexHull));
polygons.add(convexHull);
}
if (polygons.size() == 1) {
pts.addAll(polygons.get(0).getPoints());
} else {
for (int i = 0; i < polygons.size() - 1; i++) {
ArrayList<LatLng> pts1 = new ArrayList<>();
ArrayList<LatLng> pts2 = new ArrayList<>();
pts1.addAll(polygons.get(i).getPoints());
pts2.addAll(polygons.get(i + 1).getPoints());
for (int j = 0; j < pts1.size(); j++) {
if (pointInPolygon(pts1.get(j), pts2)) {
pts1.remove(j);
}
}
for (int j = 0; j < pts2.size(); j++) {
if (pointInPolygon(pts2.get(j), pts1)) {
pts2.remove(j);
}
}
pts.addAll(pts1);
pts.addAll(pts2);
}
}
// This part didn't work
// PolygonOptions range = new PolygonOptions();
// range.addAll(pts);
// range.strokeWidth(0);
// range.fillColor(0x7F729E47);
// activity.range.add(activity.mMap.addPolygon(range));
hey AymanKun, ich habe die gleiche Anforderung wie Sie, können Sie mir bitte einige Code für Polyline Buffer teilen? –