Определение, перекрывают ли длинный круг и круг на сфере

StackOverflow https://stackoverflow.com/questions/610496

Вопрос

Я создаю приложение с возможностью поиска Geo Proximity, используя 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?

Это было полезно?

Решение

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

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

& # 8730; (( x 0 - x n ) & # 178; + (< em> y 0 - y n ) & # 178;) & # 8804; r 0 + r n

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top