Как проверить, находится ли данный маркер внутри области - PullRequest
5 голосов
/ 17 февраля 2011

Привет всем, о / Я знаю, что это скорее математический вопрос, чем gmap, но я предполагаю, что кто-то уже прошел через это =)

На моей карте есть круг (на самом деле у меня их несколько, но это не меняет вопрос), например: http://code.google.com/intl/pt-BR/apis/maps/articles/mvcfun/step6.html

Как узнать, находится ли маркер (с широтой X и долготой Y) внутри этого круга?

Извините за плохой английский, я бразильский = p

Ответы [ 5 ]

8 голосов
/ 18 февраля 2011

В Google Maps JavaScript API v3 вы можете использовать библиотеку геометрии.Чтобы включить его, нужно немного изменить URL-адрес скрипта:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&libraries=geometry"></script>

Библиотека содержит вспомогательные функции для вычисления геометрических данных на сфере.Вы можете использовать его для вычисления расстояния между двумя точками, заданными их широтами следующим образом:

var distanceInMetres = google.maps.geometry.spherical.computeDistanceBetween(latLngCircleCenter, latLngPoint);

Теперь вы можете легко проверить, находится ли точка внутри круга (предположим, что R в метрах):

if(distanceInMetres < R)
   alert("in the circle");
2 голосов
/ 17 февраля 2011

Если (lat1, lon1) и (lat2, lon2) являются вашими двумя точками, а R - радиусом окружности вокруг вашей первой точки, то расстояние между точками определяется формулой хаверсайна (или Расстояние по большому кругу ).Но я считаю, что для вашей задачи углы достаточно малы, чтобы использовать это приближение:

Approximate Haversine formula

, а затем проверьте, меньше ли d ^ 2 радиуса R ^ 2.

Но если разница между широтой и долготой превышает несколько градусов, вы можете использовать полную формулу haversine.

1 голос
/ 17 февраля 2011

Рекомендую прочитать http://www.movable -type.co.uk / scripts / latlong.html .Он предоставляет ряд алгоритмов для вычислений такого рода.Включает код JavaScript для вычислений.

0 голосов
/ 18 декабря 2011

Это намного проще, чем вы ожидаете. Прочитайте этот ответ , включая работающий пример jsFiddle.

0 голосов
/ 17 февраля 2011

В основном, если у вас есть координаты центра окружности (cX, cY) и радиуса R и некоторый маркер в X, Y, вы можете выполнить следующие вычисления:

var distanceQuad = (X-cX)*(X-cX)+(Y-cY)*(Y-cY)
if (distanceQuad<=(R*R))
{
 alert("Marker inside circle!");
}

Это из тригонометрииВы вычисляете расстояние как sqrt (sqr (deltaX) + sqr (deltaY)) и сравниваете его с радиусом круга.Данный код немного оптимизирован, чтобы избавиться от вычисления квадратного корня.

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