широта/долгота находит ближайшую широту/долготу - комплекс sql или сложное вычисление

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

Структура таблицы:

id
latitude
longitude
place name
city
country
state
zip
sealevel
163
задан SiHa 19 September 2016 в 19:47
поделиться

5 ответов

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

http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL

132
ответ дан 23 November 2019 в 21:16
поделиться

Эта проблема совсем не сложная, но она становится более сложной, если вам нужно ее оптимизировать.

Я имею в виду, у вас в базе данных 100 местоположений или 100 миллионов? Это большая разница.

Если количество ячеек невелико, извлеките их из SQL в код, просто выполнив ->

Select * from Location

После того, как вы введете их в код, вычислите расстояние между каждым шагом широты / долготы и вашим исходным кодом с помощью формулы Хаверсинуса и отсортируйте это.

-11
ответ дан 23 November 2019 в 21:16
поделиться

Похоже, вы хотите выполнить поиск ближайшего соседа с некоторой границей расстояния. Насколько мне известно, SQL не поддерживает ничего подобного, и вам потребуется использовать альтернативную структуру данных, такую ​​как R-tree или kd-tree .

2
ответ дан 23 November 2019 в 21:16
поделиться

Вам нужны такие вещи, как формула гаверсинуса . См. Также здесь .

Есть и другие, но наиболее часто цитируемые.

Если вы ищете что-то еще более надежное, вы можете изучить возможности ГИС своих баз данных. Они способны на некоторые интересные вещи, например, сообщать вам, появляется ли точка (город) внутри данного многоугольника (региона, страны, континента).

5
ответ дан 23 November 2019 в 21:16
поделиться

Похоже, вам просто нужно использовать PostGIS, SpatialLite, SQLServer2008 или Oracle Spatial. Все они могут ответить на этот вопрос с помощью пространственного SQL.

1
ответ дан 23 November 2019 в 21:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: