У меня есть набор WGS84 coordinates. Консервативный подход состоит в том, чтобы хранить их как число (What datatype to use when storing latitude and longitude data in SQL databases?) и рассчитать расстояния, как здесь (latitude/longitude find nearest latitude/longitude - complex sql or complex calculation).Могу ли я хранить широту/долготу WGS84 непосредственно в виде пространственных данных в MySQL?
Чуть более продвинутый подход заключается в создании определенного пользователя функции для «в пределах» (MySQL User Defined Function for Latitude Longitude Syntax)
MySQL latitude and Longitude table setup использует spatial index. Но я не совсем понимаю, можно ли напрямую хранить координаты WGS, а затем запросить расстояние на основе типа данных Point
?
Пример: Данные выглядят следующим образом: "lat" 40.7142298
, "lng" -73.9614669
, и это то, что я хотел бы импортировать. Затем запрос типа «выберите весь тюль в пределах 10 км от лат/lng».
я мог быть полностью отсутствующей точку вашего вопроса, но то, что является проблемой хранения координат, как «ш = 40,7, LNG = -73.9 "как" POINT (40.7 -73.9) "? Или вы хотите избежать преобразования (string) при импорте ваших данных? – RandomSeed
Или я пропустил пункт здесь - я никогда не использовал MySQL пространственный. Как знать БД 40.7 является координатой WGS, а не координатой в нормальной системе X/Y, т. Е. метрические координаты против полярности (широта и долгота). И как я могу сделать очевидным, что что-то вроде 40.30 не означает 30 минут, но 0.3. –
Теперь я понимаю, что я пропустил :) Да, чтобы вычислить расстояние от координат, вам нужно было бы преобразовать линейные расстояния в полярные координаты. Это [нет тривиально, но он может работать] (http://www.movable-type.co.uk/scripts/latlong.html). Что касается вашего второго вопроса, тип данных POINT() 'является десятичным, поэтому« 40,5 »не должен означать ничего, кроме« сорок с половиной ». – RandomSeed