1

現在、Google Maps API v3.13 を使用しています。私はコーディングをやめてしまいましたが、ドキュメントはもはや役に立ちません。

私がやったことは、DrawingLibrary を実装したことであり、地図上に図形を描くことができます。何かを描き終えたときにやりたいことは、描かれた形状の境界ボックス/コーナーを取得することです (ポリラインと長方形のみをアクティブにしました)。

次に、この領域を使用して、マーカーがその中にあるかどうかを確認し、それらを「弾む」または同様のものにしたいと考えています。私の質問は、ユーザーが描いた領域を取得するにはどうすればよいですか? このデータはどの形式ですか?各コーナーの座標?これを行うには、DrawingLibrary の機能を GeometryLibrary と組み合わせる必要がありますか?

これらのドキュメントを確認しましたが、まだ解決策を見つけることができませんでした。 https://developers.google.com/maps/documentation/javascript/geometry https://developers.google.com/maps/documentation/javascript/drawing

これは私がこれまでに持っているものです:

function bindOverlayFinishedEvents() {
google.maps.event.addListener(drawingManager, 'overlaycomplete', function(event) {
    if (event.type == google.maps.drawing.OverlayType.POLYGON) {
        //bounds = event.overlay.getBounds();
    }
    else if (event.type == google.maps.drawing.OverlayType.RECTANGLE) {
        //bounds = event.overlay.getBounds();
    }
});

}

どんな助けでも大歓迎です!

4

1 に答える 1

3

目標は、マーカーが領域内にあるかどうかを判断することであるため、以下の例は、形状の種類に応じてそれを達成する方法を示しています。

  • 円の場合:circle.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(circle.getCenter(), latLng) <= circle.getRadius()
  • 長方形の場合: rectangle.getBounds().contains(latLng)
  • ポリゴンの場合:google.maps.geometry.poly.containsLocation(latLng,polygon)

ポイントがシェイプ内にあるかどうかを判断するラッパー関数:

//wrapper for contains function 
var shapeContains = function (shape, latLng) {
    if (shape instanceof google.maps.Circle)
        return shape.getBounds().contains(latLng) && google.maps.geometry.spherical.computeDistanceBetween(shape.getCenter(), latLng) <= shape.getRadius();
    else if (shape instanceof google.maps.Rectangle)
        return shape.getBounds().contains(latLng);
    else if(shape instanceof google.maps.Polygon)
        return google.maps.geometry.poly.containsLocation(latLng, shape);
    else 
        throw new Error("contains is not supported for this type of shape");
}

Codepen (デモ)

于 2016-01-25T13:06:00.230 に答える