Определение того, попадает ли геокод в многоугольник / серию геокодов

У меня есть ряд геокодов для заранее определенной области / многоугольника, который представляет регион продаж. Например:

-33.83585327701507, 151.2809005901216
-33.73335715102409, 150.8744770943904
-33.82163832733159, 150.8404448193081
-33.9974469167501, 151.247420749521
-33.83585327701507, 151.2809005901216

Затем у меня есть отдельный геокод, который представляет местоположение, например:

-33.7984533, 151.1824504

Мне нужно определить, попадает ли геокод одного местоположения в заранее определенный регион / многоугольник продаж. Есть ли API или другой метод для программного определения этого? Не удалось найти API Карт Google для этого.


person user982124    schedule 23.06.2020    source источник


Ответы (1)


Эта точка (-33.7984533, 151.1824504) не находится в указанном вами многоугольнике. Чтобы определить это с помощью Google Maps Javascript API v3, используйте метод google.maps.geometry.poly.containsLocation:

google.maps.geometry.poly.containsLocation(new google.maps.LatLng(-33.7984533, 151.1824504), polygon)

доказательство концепции скрипта

снимок экрана полученной карты

фрагмент кода:

// This example creates a simple polygon representing the Bermuda Triangle.

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 5,
    center: {
      lat: 24.886,
      lng: -70.268
    },
    mapTypeId: 'terrain'
  });

  // Define the LatLng coordinates for the polygon's path.
  var polygonCoords = [{
      lat: -33.83585327701507,
      lng: 151.2809005901216
    },
    {
      lat: -33.73335715102409,
      lng: 150.8744770943904
    },
    {
      lat: -33.82163832733159,
      lng: 150.8404448193081
    },
    {
      lat: -33.9974469167501,
      lng: 151.247420749521
    },
    {
      lat: -33.83585327701507,
      lng: 151.2809005901216
    },
  ];

  // Construct the polygon.
  var polygon = new google.maps.Polygon({
    paths: polygonCoords,
    strokeColor: '#FF0000',
    strokeOpacity: 0.8,
    strokeWeight: 2,
    fillColor: '#FF0000',
    fillOpacity: 0.35,
    clickable: false
  });
  polygon.setMap(map);
  var bounds = new google.maps.LatLngBounds();
  for (var i = 0; i < polygon.getPath().getLength(); i++) {
    bounds.extend(polygon.getPath().getAt(i))
  }
  map.fitBounds(bounds);
  var marker = new google.maps.Marker({
    map: map,
    position: new google.maps.LatLng(-33.7984533, 151.1824504)
  })
  console.log(google.maps.geometry.poly.containsLocation(new google.maps.LatLng(-33.7984533, 151.1824504), polygon));
  document.getElementById('contains').innerHTML = "containsLocation returns " + google.maps.geometry.poly.containsLocation(new google.maps.LatLng(-33.7984533, 151.1824504), polygon);
  google.maps.event.addListener(map, 'click', function(e) {
    console.log(google.maps.geometry.poly.containsLocation(e.latLng, polygon));
    document.getElementById('contains').innerHTML = "containsLocation returns " + google.maps.geometry.poly.containsLocation(e.latLng, polygon);
  });
}
/* Always set the map height explicitly to define the size of the div
 * element that contains the map. */

#map {
  height: 80%;
}


/* Optional: Makes the sample page fill the window. */

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="contains"></div>
<div id="map"></div>
<!-- Replace the value of the key parameter with your own API key. -->
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap&libraries=geometry">
</script>

person geocodezip    schedule 23.06.2020
comment
Спасибо за эту информацию - очень полезно. Знаете ли вы, существует ли эквивалентный API / метод для получения результата без необходимости рисовать карту? Например, я хотел бы иметь возможность передать массив геокодов JSON, который представляет область многоугольника, а также передать геокод для проверки и получения результата истина / ложь. Мне не нужно явно отображать результат, просто определите, находится ли геокод внутри / за пределами области многоугольника. - person user982124; 23.06.2020
comment
Нет необходимости отображать результат, мне легче понять, когда я его вижу. Но вам нужно использовать Google Maps Javascript API v3 или найти эквивалентный алгоритм ГИС для определения, находится ли точка в многоугольнике. - person geocodezip; 23.06.2020
comment
Этот поиск на gis.stackexchange.com может помочь: google.com/ - person geocodezip; 23.06.2020