PostgreSQL下载地址
PostGIS下载地址
在创建数据库时,选择“postgis 模版”。
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))
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,该数据表中存储常用坐标系统。在创建数据表、进行坐标转换等操作时,需要使用坐标系统。使用方法是找到所需坐标系统的srid。
下面分别为WGS84和北京54的坐标系统。
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(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;