проверить, содержится ли координата внутри круга в Google Maps? - PullRequest
0 голосов
/ 15 мая 2018

Я пытаюсь создать приложение, которое сообщает мне, содержится ли координата в circle.

для этого каждый раз, когда я нажимаю на точку на карте a, я получаю координату. Я хотел бы знать, содержится ли эта новая координата внутри круга или нет

Я также хотел бычтобы узнать, как сделать так, чтобы круг занимал 5 метров от координаты.в моем примере радиус: 50000, но я не знаю, как выполнить преобразование для установки значения в метрах.

это мой код:

http://plnkr.co/edit/OI4sjcuS526rFYxPnvDv?p=preview

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

    //circle coordinates
    var circle = new google.maps.Circle({
        map: map,
        radius: 50000,    
        fillColor: '#FFFFFF',
        opacity:0,
        center:{lat:4.624335 , lng: -74.063644 }
    });   

    google.maps.event.addListener(map, 'click', function(e) {
        //I get new coordinates ( e.latLng)
    });
}

спасибо!

Обновлено

Они отметили этот вопрос как дубликат с этим решением (http://jsfiddle.net/kaiser/wzcst/embedded/result/)

, ноэто действительно не удовлетворяет мою проблему, потому что, как вы можете видеть на изображении, решение не удается.

enter image description here

1 Ответ

0 голосов
/ 18 мая 2018

Насколько я понял в вашем вопросе, вы пытаетесь сделать

  1. показать карту
  2. создать круг на карте
  3. нажав на карту, определите, находится ли точка снаружи или внутри круга.

. В SO есть сообщение об этом: Проверьте, находятся ли широта и долгота в пределах круга. Google Maps.Если вы проверите принятый ответ (кредиты Гуффа для алгоритма гения), он использовал эту функцию, чтобы проверить, находится ли точка в радиусе:

// credits to user:69083 for this specific function
function arePointsNear(checkPoint, centerPoint, km) { 
   var ky = 40000 / 360;
   var kx = Math.cos(Math.PI * centerPoint.lat / 180.0) * ky;
   var dx = Math.abs(centerPoint.lng - checkPoint.lng) * kx;
   var dy = Math.abs(centerPoint.lat - checkPoint.lat) * ky;
   return Math.sqrt(dx * dx + dy * dy) <= km;
}

Теперь, что и для чего?Вы пытаетесь достичь, вы можете просто добавить это в ваше событие клика.Вот что я сделал:

google.maps.event.addListener(map, 'click', function(event) {
  var click = event.latLng;
  var locs = {lat: event.latLng.lat(), lng: event.latLng.lng()};
  var n = arePointsNear(user, locs, diameter);

Затем я добавил условие, что если функция возвращает true, маркер будет иметь метку " I " (сокращение от внутренней части).

  if(n){
    marker = new google.maps.Marker({
      map: map,
      position: locs,
      label: {
        text:"I", //marking all jobs inside radius with I
        color:"white"
      }
    });

Тогда, если это не так, маркер будет помечен " O " (сокращение от снаружи) ...

  }else{
    marker = new google.maps.Marker({
      map: map,
      position: locs,
      label: {
        text:"O", //marking all jobs outside radius with O
        color:"white"
      }
    });
  }
});

Вот пример приложения, котороеЯ создал, на всякий случай, если вы хотите увидеть его в действии: http://jsbin.com/hujusod/edit?js,output

Это возможный дубликат Проверьте, находятся ли широта и долгота в круге Google Maps .Или Как отображать содержимое на основе ближайшего широковещательного / длинного адреса к введенному .

Но поскольку функция используется по-другому, я разместил свой ответ, чтобы помочь вам сделать то, что вы изначально намеревались,Не стесняйтесь высказать ответ, откуда взялась функция arePointsNear, если это то, что вам нужно.

Надеюсь, это помогло!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...