Подтвердить что ты не робот

Запрос в долготе и широте в MySQL

Прежде чем задавать конкретные примеры кода, я просто хотел спросить, можно ли сделать запрос примерно так, как этот псевдокод:

выберите элементы из таблицы, где lat/lon = -within x miles определенной точки lat/lon -

Это выполнимо? Или мне нужно перепрыгнуть через обручи? Любые хорошие подходы, которые можно было бы рекомендовать, были бы замечательными!

4b9b3361

Ответ 1

Вам следует искать формулу Хаверсина, но хорошим началом может быть:

Ссылаясь на первый URL:

Здесь оператор SQL, который найдет ближайшие 20 местоположений, находящихся в радиусе 25 миль от координаты 37, -122. Он вычисляет расстояние, основанное на широте/долготе этой строки и целевой широте/долготе, а затем запрашивает только строки, где значение расстояния меньше 25, заказывает весь запрос по расстоянию и ограничивает его до 20 результатов. Чтобы выполнить поиск километров вместо миль, замените 3959 на 6371.

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;

Ответ 2

Я бы очень рекомендовал использовать SpatiaLite или PostGIS для такого рода операций. Они построили такие функции, которые вы пытаетесь передать. Они также имеют надлежащую поддержку пространственных данных, которые на самом деле не существуют в MySQL.

Не совсем решение в MySQL, но лучшее решение, если вы хотите продолжать делать пространственные запросы в будущем.