Определение, перекрывают ли длинный круг и круг на сфере - PullRequest
1 голос
/ 04 марта 2009

Я создаю приложение с возможностью поиска Geo Proximity Search, используя PHP в качестве языка сценариев сервера и MySQL в качестве Databse.

Рассмотрим ситуацию:

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

SELECT [columns] 
FROM [column] 
WHERE 1=1 
AND 3963.191 * 
    ACOS(
    (SIN(PI() * [latitude] / 180) * SIN(PI() * [column].latitude / 180)) + 
    (COS(PI() * [latitude] /180) * cos(PI() * [column].latitude / 180) * COS(PI() * [column].longitude / 180 - PI() * [longitude] / 180)) ) 
    <= 10

Приведенные выше расчеты дадут объекты, которые находятся в пределах 10 км от центра страны / города на земле.

Теперь предположим, что у меня есть один объект (с широтой и долготой), который находится не в этой области 10 км, но, например, в 15 км от центра страны / города на земле. Этот объект имеет диапазон обслуживания 10 км (предоставление услуг до 10 км).

Теперь возникает вопрос: если я ищу объекты в диапазоне 10 км от центра страны / города, тогда объект (расстояние 15 км от центра страны / города), имеющий диапазон обслуживания 10 км, также должен быть включен в поиск .

Как я могу сделать это возможным? У меня есть широта / центр города, длинные координаты, диапазон / радиус (в котором мы должны найти объекты) и объект, имеющий радиус доставки (например, 10 км) и соответствующие ему координаты.

Можете ли вы рассказать мне, как это сделать с помощью PHP, MySQL?

1 Ответ

3 голосов
/ 04 марта 2009

Использовать пространственные расширения MySQL http://dev.mysql.com/doc/refman/5.1/en/spatial-extensions.html

С другой стороны, если вы хотите просто идентифицировать другие круги, которые пересекаются с данным, они будут всеми из них, для которых расстояние между центрами круга меньше суммы радиуса. Другими словами, предполагая, что ваша исходная точка и диапазон задаются как тройные ( x 0 , y 0 , r 0 ), вам нужно все ( x n , y n , r n ), для которых

√ (( x 0 - x n ) ² + ( y 0 - y n ) ²) ≤ r 0 + r n

...