PostGIS入门
目录
下载
创建数据库
在创建数据库时,选择“postgis 模版”。
WKT格式
WKT示例
-
POINT(0 0)
-
POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))
-
MULTIPOINT(0 0,1 2)
-
MULTILINESTRING((0 0,1 1,1 2),(2 3,3 2,5 4))
-
MULTIPOLYGON(((0 0,4 0,4 4,0 4,0 0),(1 1,2 1,2 2,1 2,1 1)), ((-1 -1,-1 -2,-2 -2,-2 -1,-1 -1)))
-
GEOMETRYCOLLECTION(POINT(2 3),LINESTRING(2 3,3 4))
EWKT示例
-
POINT(0 0 0) – XYZ
-
SRID=32632;POINT(0 0) – XY with SRID
-
POINTM(0 0 0) – XYM
-
POINT(0 0 0 0) – XYZM
-
SRID=4326;MULTIPOINTM(0 0 0,1 2 1) – XYM with SRID
-
MULTILINESTRING((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
-
POLYGON((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))
-
MULTIPOLYGON(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),((-1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))
-
GEOMETRYCOLLECTIONM( POINTM(2 3 9), LINESTRINGM(2 3 4, 3 4 5) )
-
MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4) )
-
POLYHEDRALSURFACE( ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)), ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0
0 0)), ((1 1 0, 1 1 1, 1 0 1, 1 0 0, 1 1 0)), ((0 1 0, 0 1 1, 1 1 1, 1 1 0, 0 1 0)), ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)) ) -
TRIANGLE ((0 0, 0 9, 9 0, 0 0))
-
TIN( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )
坐标系统 spatial_ref_sys
创建空间数据库后会默认生成数据表spatial_ref_sys,该数据表中存储常用坐标系统。在创建数据表、进行坐标转换等操作时,需要使用坐标系统。使用方法是找到所需坐标系统的srid。
下面分别为WGS84和北京54的坐标系统。
geometry(Point)
创建geometry字段的方法:
- 创建数据表时创建
CREATE TABLE test(
gid serial NOT NULL,
geom geometry(Point) );
或 geometry(Point,4326),4326 表示 WGS84 坐标系统。
- 创建表后添加几何类型字段
CREATE TABLE test(
gid serial NOT NULL);
SELECT AddGeometryColumn ('test', 'geom', 4326, 'POINT', 2);
AddGeometryColumn说明:
属性 | 含义 |
---|---|
‘test’ | 表名 |
‘geom’ | 字段名 |
4326 | 坐标系统 |
‘POINT’ | 几何类型 |
2 | 二维 |
写入数据的方式 ST_GeomFromText
ST_GeomFromText(text WKT);
ST_GeomFromText(text WKT, integer srid);//srid表示坐标系统
例如:
insert into test(geom) values(ST_GeomFromText(’POINT(-71.064544 42.28787)’));
读取数据的方式
ST_AsText(geom):结果示例 POINT(-81.233 42.983)
ST_AsEwkt(geom): 结果示例 SRID=4326;POINT(-81.233 42.983)
ST_X(geom): 结果示例 -81.233
ST_Y(geom): 结果示例 42.983
空间方法的使用
计算轨迹点的长度
通过 ST_MakeLine 将整张表的点构造成线,再通过 ST_Length 计算线的长度。
Select ST_Length(ST_MakeLine(geom)) from test;
若要查询多张表计算长度,可将多表合并后计算,例如:
Select ST_Length(ST_MakeLine(geom)) from (Select * from a union all Select * from b) as c;
计算瞬时距离(相邻两点的距离)
Select ST_Distance(p1.geom,p2.geom) from test as p1, test as p2 where p1.gid = p2.gid-1;
坐标转换
从“Beijing 1954 / 3-degree Gauss-Kruger CM 114E”转换为“WGS84”:
select ST_AsText(ST_Transform(ST_SetSRID(geom, 2435), 4326)) from test;
从“WGS84”转换为“Beijing 1954 / 3-degree Gauss-Kruger CM 114E”:
select ST_AsText(ST_Transform(ST_SetSRID(geom, 4326), 2435)) from test;
其他常用方法
- ST_XMax,ST_XMin,ST_YMax,ST_YMin:计算最大最小值
- ST_Area:面积
- ST_Boundary:计算边框
- ST_Envelop:计算包围盒
- ST_Translate:平移
- ST_Rotate,ST_RotateX,ST_RotateY,ST_RotateY:旋转
- ST_Scale:缩放
转载自:https://blog.csdn.net/doris_d/article/details/45825187