Какой тип данных для широты и долготы? - PullRequest
114 голосов
/ 16 ноября 2011

Я новичок в PostgreSQL и PostGIS. Я хочу хранить значения широты и долготы в таблице базы данных PostgreSQL 9.1.1. Я вычислю расстояние между двумя точками, найду более близкие точки, используя значения этого местоположения.

Какой тип данных я должен использовать для широты и долготы?

Ответы [ 4 ]

117 голосов
/ 16 ноября 2011

Вы можете использовать тип данных point - объединяет (x,y), который может быть вашим широтой / долготой.Занимает 16 байтов: 2 float8 чисел внутри.

Или сделать его двумя столбцами типа float (= float8 или double precision).8 байтов каждый.
Или real (= float4), если дополнительная точность не требуется.4 байта каждый.
Или даже numeric, если вам нужна абсолютная точность.2 байта для каждой группы из 4 цифр плюс 3 - 8 байтов.

Прочтите подробное руководство о числовых типах и геометрических типах .


Типы данных geometry и geography предоставляются дополнительным модулем PostGIS и занимают один столбец в вашей таблице.Каждый занимает 32 байта за точку.Там есть некоторые дополнительные издержки, такие как SRID.Эти типы хранятся (long / lat), а не (lat / long).

Начните читать руководство PostGIS здесь .

23 голосов
/ 20 ноября 2017

В PostGIS для точек с широтой и долготой существует тип данных географии.

Чтобы добавить столбец:

alter table your_table add column geog geography;

Чтобы вставить данные:

insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');

4326 - это идентификатор пространственной привязки, который сообщает, что данные в градусах долготы и широты, такие же, как в GPS.Подробнее об этом: http://epsg.io/4326

Порядок - Долгота, Широта - поэтому, если вы нанесете его на карту, то это (x, y).

Чтобы найти ближайшую точку, вам сначала нужносоздайте пространственный индекс:

create index on your_table using gist (geog);

, а затем запросите, скажем, 5 ближайших к заданной точке:

select * 
from your_table 
order by geog <-> 'SRID=4326;POINT(lon lat)' 
limit 5;
22 голосов
/ 27 января 2016

Я настоятельно рекомендую PostGis . Он специфичен для этого типа данных и имеет готовые методы для вычисления расстояния между точками, среди других ГИС-операций, которые вы можете найти полезными в будущем

3 голосов
/ 19 ноября 2018

Если вам не нужны все функции, которые предлагает PostGIS, Postgres (в настоящее время) предлагает модуль расширения под названием earthdistance .Он использует тип данных point или cube в зависимости от вашей точности, необходимой для расчета расстояния.

Теперь вы можете использовать функцию earth_box для -например, запрос точек на определенном расстоянии от местоположения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...