Нахождение точек вокруг заданного радиуса указанной точки (формула haversine q) - PullRequest
0 голосов
/ 25 марта 2011

У меня небольшая проблема,

Я только что тестировал использование формулы haversine для моего проекта В проекте я указываю точку и хочу найти все точки в пределах заданного радиуса точки, которую я указал. После долгих поисков я попробовал этот запрос формулы haversine.

SELECT service_id, ( 3959 * acos( cos( radians(51.500152) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(-0.126236) ) + sin( radians(51.500152) ) * sin( radians( latitude ) ) ) ) AS distance 
FROM sys_t_taxi_real_time_servce HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Я получил широту и долготу Лондона, а затем указал данные, как показано в следующем порядке: (service_id, driver_id, trip_id, долгота, широта, driver_status)

4, 1, , 51.5034, -0.174751, ''
5, 1, 2, 51.477106, -0.137329, ''

Таким образом, для набора результатов, однако, я ничего не получаю, строки не возвращаются

ОДНАКО, когда я удаляю предложение, я получаю следующий набор результатов (service_id, distance)

5, 4655.154600
4, 4658.309966

Я действительно застрял в этой проблеме и не могу двигаться вперед из-за нее, и любая помощь будет принята с благодарностью.

Запрос и т.п. был получен по следующей ссылке http://code.google.com/apis/maps/articles/phpsqlsearch.html

Кроме того, кто-нибудь знает какой-либо другой метод для решения той же проблемы, я видел вещи, относящиеся к пространству mysql, но выбрал это, поскольку было проще использовать

С уважением, MilindaD

1 Ответ

0 голосов
/ 30 марта 2011

Я не использовал формулу, которую вы описали, но, возможно, другой подход решает вашу проблему: когда вы вызываете SQL-запрос, я предполагаю, что вы используете хотя бы MySQL.Вы пытались использовать пространственную функциональность базы данных?Есть функции, называемые CONTAINS и WITHIN.Таким образом, вы можете просто создать буферный многоугольник вокруг вашей координаты с нуля и включить функцию CONTAINS в предложение where.

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

С уважением, Мартин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...