Каков наилучший способ хранения данных географических координат в базе данных - PullRequest
4 голосов
/ 12 июля 2011

Я создаю мобильное картографическое приложение и хочу сохранить данные GPS-трека, путевые точки и т. Д. В базе данных (SQL CE 4.0).Это означает, что у меня есть доступ только к основным типам данных (http://msdn.microsoft.com/en-us/library/ms172424(SQL.110).aspx)

  1. Какую систему координат мне следует использовать (широта / долгота, WGS 84, ...)
  2. Какой тип данных вы бы выбрали?предложить ответ на вопрос 1.

Операции, которые я, вероятно, захочу выполнить

  • Найти все достопримечательности в пределах x расстояние
  • Рассчитать расстояниемежду точками x и y
  • Найти ближайшую путевую точку к точке x

1 Ответ

3 голосов
/ 06 сентября 2011

WGS84 является геодезической системой (датумом), а не системой координат - буквально (W) или (G) эодезической (S) системой 19 (84). Так что я не уверен на 100%, что вы спрашиваете.

Если вы спрашиваете о решении, какой тип данных использовать, то это будет зависеть от того, что вы намереваетесь делать с данными и местоположениями, с которыми вы имеете дело. Например, если вы имеете дело только с британскими функциями и хотите отображать точки на картах ОС, тогда OSGB36 будет наиболее целесообразным. Если вам нужна всемирная справочная система и вы хотите использовать что-то вроде Google Maps, тогда WGS84 будет лучше. Стоит отметить, что WGS84 является стандартным базовым значением по умолчанию для координат, хранящихся в развлекательных и коммерческих единицах GPS.

Однако все эти датумы определяют точки на основе географической системы координат широты и долготы - поэтому все они используют одну и ту же «систему координат». Также возможно преобразование данных с использованием матрицы преобразования Гельмерта, поэтому вы никогда не застрянете, даже если какая-то альтернативная система будет более применимой в конкретном случае.

При всем этом, если вы используете SQL CE, я бы предложил использовать простую таблицу для хранения путевых точек. Что-то вроде следующего должно хорошо работать во многих случаях. Вам нужно будет выбрать уровень точности, который вам требуется для координат. например,

CREATE TABLE 'waypoints' (
 'id' INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 'name' VARCHAR( 60 ) NOT NULL ,
 'type' VARCHAR( 30 ) NOT NULL ,
 'latitude' FLOAT( 10, 6 ) NOT NULL ,
 'longitude' FLOAT( 10, 6 ) NOT NULL
)'

Очевидно, что вам могут не понадобиться такие поля, как «имя» и «тип», они просто существуют, чтобы показать, как можно различить путевые точки понятным для человека способом.

...