Я новичок в PostgreSQL и PostGIS. Я хочу хранить значения широты и долготы в таблице базы данных PostgreSQL 9.1.1. Я вычислю расстояние между двумя точками, найду более близкие точки, используя значения этого местоположения.
Какой тип данных я должен использовать для широты и долготы?
postgresql
types
latitude-longitude
postgis
user1008404
источник
источник
Ответы:
Вы можете использовать тип данных
point
- объединяет,(x,y)
который может быть вашим широтой / долготой. Занимает 16 байтов: 2float8
числа внутри.Или сделайте это двумя столбцами типа
float
(=float8
илиdouble precision
). 8 байтов каждый.Или
real
(=float4
), если дополнительная точность не требуется. 4 байта каждый.Или даже
numeric
если вам нужна абсолютная точность. 2 байта для каждой группы из 4 цифр, плюс 3 - 8 байтов.Прочитайте прекрасное руководство о числовых типах и геометрических типах .
Эти
geometry
иgeography
типы данных обеспечиваются дополнительным модулем PostGIS и занимают один столбец в таблице. Каждый занимает 32 байта за точку. Там есть некоторые дополнительные издержки, такие как SRID. Эти типы хранят (long / lat), а не (lat / long).Начните читать руководство PostGIS здесь .
источник
float
тип данных. Это делает расчет с координатами очень сложным. Вы должны использовать PostGIS иgeography
тип данных для таких расчетов.В PostGIS для точек с широтой и долготой существует тип данных географии.
Чтобы добавить столбец:
Чтобы вставить данные:
4326 - это идентификатор пространственной привязки, который говорит, что данные в градусах долготы и широты, такие же, как в GPS. Подробнее об этом: http://epsg.io/4326
Порядок - Долгота, Широта - поэтому, если вы нанесете его на карту, то это (x, y).
Чтобы найти ближайшую точку, вам нужно сначала создать пространственный индекс:
и затем запросите, скажем, 5 ближайших к данной точке:
источник
Я настоятельно рекомендую PostGis . Он специфичен для этого типа данных и имеет готовые методы для расчета расстояния между точками, среди других операций ГИС, которые вы можете найти полезными в будущем
источник
Если вам не нужны все функции, которые предлагает PostGIS, Postgres (в настоящее время) предлагает модуль расширения, называемый earthdistance . Он использует тип данных точки или куба в зависимости от вашей точности, необходимой для расчета расстояния.
Теперь вы можете использовать функцию earth_box, например, для запроса точек на определенном расстоянии от местоположения.
источник
В PostGIS геометрия предпочтительнее, чем география (модель с круглой землей), потому что вычисления намного проще, а значит, быстрее. Он также имеет МНОГИЕ более доступные функции, но менее точен на очень больших расстояниях.
Импортируйте CSV в длинные поля lat в
DECIMAL(10,6)
столбцы. 6 цифр с точностью до 10 см, должно быть достаточно для большинства случаев использования.Затем приведите ваши импортированные данные
Убедитесь, что SRID не равен нулю!
Проверьте порядок вашего параметра long lat с помощью средства просмотра WKT и
ST_AsEWKT(target_table.geom)
.Затем индексируйте его для лучшей производительности
источник