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

88
7

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

С помощью этой информации, как я могу найти соответствующие записи?

спросил(а) 2021-01-25T19:19:33+03:00 4 месяца, 3 недели назад
1
Решение
116

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-й меридиан (или антимеридиан), вам нужно будет сравнить право-lon с левым-лоном, проверяя, является ли правильное число отрицательным, а левое число положительным. Если это так, то вы пересекли 180-й меридиан. Тогда ваш запрос должен выглядеть примерно так:

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

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

ответил(а) 2021-01-25T19:19:33+03:00 4 месяца, 3 недели назад
-4

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

Точка в 4,4, а верхний правый - (5,5), а нижний левый (3,3) - 3 <4 <5 для x и 3 <4 <5 для y. У тебя есть матч.

ответил(а) 2021-01-25T19:19:33+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема