Мне нужно проверить, находится ли точка в заданном прямоугольнике на карте. Я использую листовку для создания ограничивающих рамок, которые требуют от меня указать юго-западную и северо-восточную точки прямоугольника.
У меня есть следующая информация: 1. средняя точка верхнего края прямоугольника 2. средняя точка нижнего края прямоугольника 3. длина края (т.е. ширина) = 1000 м.
Можно с уверенностью предположить, что две приведенные выше точки очень близки.
Любые идеи о том, как этого можно достичь, будут полезны.
Ответ 1 · рейтинг 1 · Patrick D
Во-первых, чтобы получить верхнюю левую и нижнюю правую точки, вам нужно использовать некоторую геометрию. Эта страница: https://gis.stackexchange.com/questions/2951/algorithm-for-offsetting-a-latitude-longitude-by-some-amount-of-meters - отличный пример того, как точно преобразовать метры в десятичные градусы.
Например, чтобы получить верхнюю левую точку, вы начинаете со средней точки линии, и у вас есть общая длина линии, вам нужно разделить длину линии на 2, а затем преобразовать эту длину от метров до десятичных градусов, затем добавьте координату X на эту величину. Это даст вам верхний правый угол. Повторите это для нижнего левого угла, вычитая эту сумму вместо вычитания.
var upperMiddlePoint = [30,50];
var segmentLength = 5000;
var northEastPoint = upperMiddlePoint;
var northEastPoint.x = northEastPoint.x + ((segmentLength / 2) * DECIMAL_DEGREES_PER_METER)
Здесь есть быстрый и простой ответ: Простые вычисления для работы с расстоянием широта / долгота + км?, в котором описано, как получить значение DECIMAL_DEGREES_PER_METER в приведенном выше фрагменте.
Чтобы создать объект LatLngBounds для представления границ вашего прямоугольника. API здесь.
var bounds = new L.LatLngBounds(southWestPoint, northEastPoint);
Затем используйте функцию LatLngBounds.contains(), как описано здесь, чтобы определить, соответствует ли ваша точка зрения эти границы.
var contains = bounds.contains([50, 30]);
if (contains) {
doStuff();
}
Логическое значение contains будет истинным, если границы содержат точку, и ложным, если нет.