7

いくつかの latLng を使用して、Google マップに設定された典型的なポリゴンがあります。

var bermudaTriangle = new google.maps.Polygon({
  paths: [
    new google.maps.LatLng(25.774252, -80.190262),
    new google.maps.LatLng(18.466465, -66.118292),
    new google.maps.LatLng(32.321384, -64.75737),
  ]
});
bermudaTriangle.setMap(map);

これらは、Google のドキュメントのバミューダ トライアングルの座標です。私はまた、いくつかのランダムな座標を持っています、saaay:

var coord1 = new new google.maps.LatLng(26.194876675795218,-69.8291015625)
var coord2 = new new google.maps.LatLng(33.194876675795218,-63.8291015625)

1 つ目はたまたま三角形の内側にあり、2 つ目は外側にあります。これらは単なる例ですが、提供された座標(これら2つのいずれかだけでなく、任意の座標)がポリゴンの内側または外側にあるかどうかを確認する方法が必要です(また、常にバミューダトライアングルではなく、三角形でさえありません) - ポリゴンには任意の数の latLng を含めることができます)。Google Maps API のドキュメントを調べましたが、この質問に対する回答を提供する関数が見つかりませんでした。

4

4 に答える 4

9

containsLocation(point:LatLng, polygon:Polygon)メソッドを使用します。

containsLocation(point:LatLng, polygon:Polygon) boolean 指定されたポイントが指定されたポリゴン内にあるかどうかを計算します。

概念実証フィドル

コードスニペット:

function checkInPolygon(marker, polygon) {
  var infowindow = new google.maps.InfoWindow();
  var html = "";
  if (google.maps.geometry.poly.containsLocation(marker.getPosition(), polygon)) {
    html = "inside polygon";
  } else {
    html = "outside polygon";
  }
  infowindow.setContent(html);
  infowindow.open(map, marker);
}

var map;
var coord1 = new google.maps.LatLng(26.194876675795218, -69.8291015625);
var coord2 = new google.maps.LatLng(33.194876675795218, -63.8291015625);

function initialize() {
  var map = new google.maps.Map(
    document.getElementById("map_canvas"), {
      center: new google.maps.LatLng(37.4419, -122.1419),
      zoom: 13,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    });
  bermudaTriangle.setMap(map);
  var bounds = new google.maps.LatLngBounds();
  for (var i = 0; i < bermudaTriangle.getPath().getLength(); i++) {
    bounds.extend(bermudaTriangle.getPath().getAt(i));
  }
  bounds.extend(coord1);
  bounds.extend(coord2);
  var marker1 = new google.maps.Marker({
    map: map,
    position: coord1
  });
  var marker2 = new google.maps.Marker({
    map: map,
    position: coord2,
  });
  map.setCenter(bounds.getCenter());
  map.setZoom(3);
  checkInPolygon(marker1, bermudaTriangle);
  checkInPolygon(marker2, bermudaTriangle);
}
google.maps.event.addDomListener(window, "load", initialize);

var bermudaTriangle = new google.maps.Polygon({
  paths: [
    new google.maps.LatLng(25.774252, -80.190262),
    new google.maps.LatLng(18.466465, -66.118292),
    new google.maps.LatLng(32.321384, -64.75737),
  ]
});
html,
body,
#map_canvas {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js?libraries=geometry&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>
<div id="map_canvas"></div>

于 2013-02-26T19:29:18.367 に答える
2

Google Maps APIにこのための特別なメソッドがない場合は、独自のメソッドを見つけるか作成する必要があります。これはコンピュータグラフィックスの一般的な問題であり、Googleの「ポリゴンヒットテスト」を使用すると、豊富な情報を見つけることができます。 このSOの答えはかなり包括的に見えます。

于 2013-02-26T19:25:55.583 に答える
2

V3 API には google.maps.geometry.poly.containsLocation 静的メソッドがあります。

https://developers.google.com/maps/documentation/javascript/reference#polyを参照してください

したがって、ポリゴンと、ポリゴンの内側にあるかどうかを確認するポイントを渡すだけです。

于 2013-02-26T19:38:01.730 に答える
1

ポリゴンページのウィキペディアポイントをご覧ください。ポイントがポリゴンの内側にあるかどうかを判断するには、いくつかの方法があります。それらの1つは、レイキャスティングアルゴリズムです。このページには、それをグーグルマップに実装する方法の例がいくつかあります。

于 2013-02-26T19:26:02.320 に答える