Запрос периметра вокруг геокодирования (широта / долгота) - PullRequest
3 голосов
/ 03 мая 2010

как я могу искать геообъекты по определенному периметру? Например. У меня есть несколько объектов с координатами широты / долготы, хранящихся в моей БД. Теперь я хочу получить все объекты, которые лежат в определенном периметре (10 миль или 20 миль) вокруг данной точки.

Полагаю, мне нужно было бы сформировать запрос типа:

SELECT * FROM objects o where o.lat < (myPositionLat+x) AND o.lon < (myPositionLon+y)

Это правильно? Как определить / установить значения для х и у?

1 Ответ

1 голос
/ 04 мая 2010

Вы должны иметь в виду, что расстояние между долготами не является постоянным. Градусы широты параллельны и находятся на расстоянии приблизительно 111 километров (69 миль), но широта широты широты на экваторе равна 111 километрам и постепенно сходится к нулю на полюсах.

При 40 ° к северу или югу расстояние между градусами долготы составляет около 85 километров (53 мили), тогда как расстояние между широтами остается примерно одинаковым на уровне 111 километров ( Источник ). Если ваши геообъекты будут ограничены только определенной областью, и допустим очень грубый фильтр, вы можете использовать эту информацию для определения смещений x и y.

Однако, если ваши объекты будут редкими по всему земному шару, вы должны вместо этого вычислить расстояние большого круга . К счастью, это относительно просто с формулой haversine . Вы можете прочитать далее и проверить реализацию в Рассчитать расстояние, направление и многое другое между точками широты / долготы Крисом Венессом.

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

Однако, если у вас будет много геообъектов, вам следует рассмотреть возможность использования базы данных с возможностями пространственного индексирования . MySQL , PostgreSQL и SQL Server 2008 имеют геопространственные функции (как исходные, так и через расширения), которые включают пространственное индексирование и реализации формулы haversine.

...