У меня есть широта и долгота, и я хочу вытянуть запись от базы данных, которая имеет ближайшую широту и долготу расстоянием, если то расстояние становится дольше, чем указанное, то не получайте его.
Структура таблицы:
id
latitude
longitude
place name
city
country
state
zip
sealevel
Вам нужно перевести расстояние в градусы долготы и широты, отфильтровать на основе этих значений, чтобы ограничить записи, которые примерно находятся в ограничивающей рамке, а затем выполнить более точный фильтр расстояния. Вот отличная статья, в которой объясняется, как все это сделать:
http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL
Эта проблема совсем не сложная, но она становится более сложной, если вам нужно ее оптимизировать.
Я имею в виду, у вас в базе данных 100 местоположений или 100 миллионов? Это большая разница.
Если количество ячеек невелико, извлеките их из SQL в код, просто выполнив ->
Select * from Location
После того, как вы введете их в код, вычислите расстояние между каждым шагом широты / долготы и вашим исходным кодом с помощью формулы Хаверсинуса и отсортируйте это.
Похоже, вы хотите выполнить поиск ближайшего соседа с некоторой границей расстояния. Насколько мне известно, SQL не поддерживает ничего подобного, и вам потребуется использовать альтернативную структуру данных, такую как R-tree или kd-tree .
Вам нужны такие вещи, как формула гаверсинуса . См. Также здесь .
Есть и другие, но наиболее часто цитируемые.
Если вы ищете что-то еще более надежное, вы можете изучить возможности ГИС своих баз данных. Они способны на некоторые интересные вещи, например, сообщать вам, появляется ли точка (город) внутри данного многоугольника (региона, страны, континента).
Похоже, вам просто нужно использовать PostGIS, SpatialLite, SQLServer2008 или Oracle Spatial. Все они могут ответить на этот вопрос с помощью пространственного SQL.