哪些数据类型为经度和纬度?
我是PostgreSQL和PostGIS的新手。 我想在PostgreSQL 9.1.1数据库表中存储纬度和经度值。 我会计算两点之间的距离,通过使用这个位置值找到更近的点。
我应该使用哪种数据类型的经度和纬度?
你可以使用数据类型point
- 结合(x,y)
,它可以是你的经纬度。 占用16个字节:内部2个float8
数字。
或者使它成为float
(= float8
或double precision
)类型的两列。 每个8字节。
或者如果不需要额外的精度,则为real
(= float4
)。 每个4字节。
或者甚至numeric
如果你需要绝对精度。 每个4位数字组有2个字节,加上3-8个字节的开销。
阅读有关数字类型和几何类型的精美手册。
geometry
和geography
数据类型由附加模块PostGIS提供,并占用表格中的一列。 每个点占用32个字节。 那里有一些额外的开销,如SRID。 这些类型存储(长/拉特),而不是(拉特/长)。
从这里开始阅读PostGIS手册。
我强烈支持PostGis。 它特定于那种数据类型,并且它具有现成的方法来计算点之间的距离,以及将来在其他GIS操作中发现的有用功能
在PostGIS中,对于有经度和纬度的点,有地理数据类型。
要添加一列:
alter table your_table add column geog geography;
要插入数据:
insert into your_table (geog) values ('SRID=4326;POINT(longitude latitude)');
4326是空间参考ID,表示它的经度和纬度数据,与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;
链接地址: http://www.djcxy.com/p/70973.html