У меня есть две таблицы t1
и t2
(t1
имеет 1/10 размера от t2
). Каждая таблица имеет два столбца <Lat, Long>
, которые содержат широту и долготу некоторых точек. Для каждой строки из t1
Я бы хотел (а) найти строку в нем: t2
которая наиболее близка к этому. Каким будет наиболее эффективный запрос для этого? Есть ли у ура какие-либо библиотеки для геопространственного поиска?Поиск ближайшего местоположения до широты и долготы
2
A
ответ
2
Вам нужно сделать немного триггера.
Пожалуйста, обратитесь к этой статье на Database Journal
Последняя рутина Я считаю, что вы ищете (вам нужно изменить его для использования):
CREATE DEFINER=`root`@`localhost` PROCEDURE closest_restaurants_optimized`
(IN units varchar(5), IN lat Decimal(9,6), IN lon Decimal(9,6),
IN max_distance SMALLINT, IN limit_rows MEDIUMINT)
BEGIN
DECLARE ONE_DEGREE_CONSTANT TINYINT;
DECLARE EARTH_RADIUS_CONSTANT SMALLINT;
DECLARE lon1, lon2, lat1, lat2 float;
IF units = 'miles' THEN
SET ONE_DEGREE_CONSTANT = 69;
SET EARTH_RADIUS_CONSTANT = 3959;
ELSE -- default to kilometers
SET ONE_DEGREE_CONSTANT = 111;
SET EARTH_RADIUS_CONSTANT = 6371;
END IF;
SET lon1 = lon-max_distance/abs(cos(radians(lat))*ONE_DEGREE_CONSTANT);
SET lon2 = lon+max_distance/abs(cos(radians(lat))*ONE_DEGREE_CONSTANT);
SET lat1 = lat-(max_distance/ONE_DEGREE_CONSTANT);
SET lat2 = lat+(max_distance/ONE_DEGREE_CONSTANT);
SELECT pm1.post_id, p.post_title,
ROUND((EARTH_RADIUS_CONSTANT * acos(cos(radians(lat))
* cos(radians(pm1.meta_value))
* cos(radians(pm2.meta_value) - radians(lon)) + sin(radians(lat))
* sin(radians(pm1.meta_value)))
), 3) AS distance
FROM goodfood_wp_md20m_postmeta AS pm1,
goodfood_wp_md20m_postmeta AS pm2,
goodfood_wp_md20m_posts AS p
WHERE pm1.meta_key = 'latitude' AND pm2.meta_key = 'longitude'
AND pm1.post_id = pm2.post_id
AND pm1.post_id = p.id
AND p.post_status = 'publish'
AND pm2.meta_value between lon1 and lon2
AND pm1.meta_value between lat1 and lat2
ORDER BY distance ASC
LIMIT limit_rows;
END
Смежные вопросы
- 1. Найти ближайшего соседа/широты и долготы
- 2. Поиск и порядок широты и долготы в SQL
- 3. Поиск широты и долготы в ios8
- 4. Расположение карт до ближайшего местоположения в зависимости от широты и долготы
- 5. Декартовы до широты/долготы
- 6. Поиск широты и долготы нескольких адресов
- 7. Нужен радиус вокруг местоположения широты и долготы
- 8. Поиск широты и долготы с помощью Android.Xamarin
- 9. координаты долготы и широты
- 10. SQL-поиск «около» долготы и широты
- 11. Поиск широты и долготы внутри кода Java
- 12. Поиск промежуточной широты и долготы в javascript
- 13. Поиск широты и долготы в Openstreet Map
- 14. извлечения широты/долготы местоположения с помощью google.maps.geocoder
- 15. Преобразовать широты и долготы до степени
- 16. Широта широты и долготы до десятичного значения
- 17. Включение долготы и широты до точки
- 18. Изменение широты и долготы?
- 19. поиск по местоположению android от широты и долготы
- 20. Приложения на основе местоположения: значения долготы и широты
- 21. почтовый индекс поиск ближайшего местоположения
- 22. Получение широты и долготы
- 23. Попадая широты и долготы
- 24. Радиус широты и долготы
- 25. Отображение долготы и широты
- 26. Отображение долготы и широты
- 27. SQL Server: поиск ближайшего местоположения
- 28. Получение имени местоположения из долготы и широты в BingMap
- 29. Создание объекта местоположения в Android с значениями широты и долготы
- 30. Вложение текущего местоположения (долготы и широты) в API Google Адресов
Просто чтобы дать немного помогите следующему человеку, который это делает: я перевел свои данные в Solr и использовал его быстрый геопространственный поиск для запроса. Солр был очень быстрым в этом. – Mark