Определение, перекрывают ли длинный круг и круг на сфере
-
03-07-2019 - |
Вопрос
Я создаю приложение с возможностью поиска 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