2013-09-11 3 views
1

У меня есть набор 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».

+1

я мог быть полностью отсутствующей точку вашего вопроса, но то, что является проблемой хранения координат, как «ш = 40,7, LNG = -73.9 "как" POINT (40.7 -73.9) "? Или вы хотите избежать преобразования (string) при импорте ваших данных? – RandomSeed

+0

Или я пропустил пункт здесь - я никогда не использовал MySQL пространственный. Как знать БД 40.7 является координатой WGS, а не координатой в нормальной системе X/Y, т. Е. метрические координаты против полярности (широта и долгота). И как я могу сделать очевидным, что что-то вроде 40.30 не означает 30 минут, но 0.3. –

+0

Теперь я понимаю, что я пропустил :) Да, чтобы вычислить расстояние от координат, вам нужно было бы преобразовать линейные расстояния в полярные координаты. Это [нет тривиально, но он может работать] (http://www.movable-type.co.uk/scripts/latlong.html). Что касается вашего второго вопроса, тип данных POINT() 'является десятичным, поэтому« 40,5 »не должен означать ничего, кроме« сорок с половиной ». – RandomSeed

ответ

1

Вы прочитали Manual section on the Spatial Extensions?

Для запроса, определить область запроса (например, прямоугольник), а затем фильтровать within

+0

Но координаты по-прежнему выглядят в декартовой системе координат. Не могли бы вы указать пример, где я могу видеть, как он работает с полярными координатами как широта/долгота. –

+2

Используйте SRID. http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html Но я не думаю, что MySQL - лучший выбор. –

+0

Лучший выбор, если я могу спросить ... –

0

SQL Server 2008 имеет тип данных географии, который вы можете использовать, и запросить его обратно, используя открытый запрос. как только это будет сделано, гео-пространственная база данных и начните делать вещи.

+0

Я просто заметил, что вы просите MYSQL, я понятия не имею, что является его эквивалентом в MYSQL, но у него должно быть что-то similer. – johnny