Как я могу запросить все записи в пределах широты / долготы? - PullRequest
3 голосов
/ 27 октября 2011

Я ищу для создания запроса MySQL, который находит все записи, которые находятся в указанной области мира.Каждая запись содержит точку (широта / долгота), и у меня есть верхний правый (широта / долгота) и нижний левый (широта / долгота) углы указанной области.Я нахожу соответствующие записи?

Ответы [ 2 ]

6 голосов
/ 27 октября 2011

LAT1 = MIN (верхний правый лат, нижний левый лат)

LAT2 = MAX (верхний правый лат, нижний левый лат)

LON1 = MIN (верхний правый лон, нижний левый лон)

LON2 = MAX (верхний правый лон, нижний левый лон)

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND lon BETWEEN LON1 AND LON2

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

Чтобы справиться с 180-м меридианом (или антимеридианом), вам нужно сравнить правый-левый-левый, проверяя, является ли правое число отрицательным, а левое - положительным. Если так, то вы пересекли 180-й меридиан. Ваш запрос должен выглядеть примерно так:

SELECT fields
FROM points
WHERE lat BETWEEN LAT1 AND LAT2
AND (lon BETWEEN -180 AND LON1 OR lon BETWEEN LON2 AND 180)

Я бы предпочел не думать о том, как обращаться с коробкой, которая находится на вершине или на дне планеты над одним из истинных полюсов. =)

0 голосов
/ 27 октября 2011

Просто найдите все точки, которые меньше правого края и больше левого края, который меньше нижнего края и больше верхнего края.

Точка 4,4 и ваш верхсправа - (5,5), а слева внизу - (3,3) - 3 <4 <5 для х и 3 <4 <5 для у.У вас есть совпадение. </p>

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