指定された半径のステップに従って、ルートの周りに複雑なポリゴンをプロットしようとしています。そのために、ルートの各ステップ (座標) の周りに 50 辺の均一なポリゴン (実際には円) を描きました。今、ルートの周りにプロットされたすべての円の座標のセットを取得し、地図上でそれらを見ることができますが、それらは重なっていて見栄えがよくありません.地図。
だから私が今しなければならないことは、私が今持っているすべてのポリゴンを1つのポリゴンにマージし、それをマップにプロットすることです.
2 つのポリゴンごとに交点を削除し (ポリゴン 1 のポイントがポリゴン 2 の内側にあるかどうかをテストし、その逆かどうかをテストします)、残りのすべての座標を 1 つの配列にマージしてから、新しいポリゴンを構築しようとしましたが、うまくいきませんでした。これが私がこれをどのように行っているかのコードスニペットです:
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));