PostGIS入门

下载

  • PostgreSQL下载地址

  • 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的坐标系统。

PostGIS入门_第1张图片

PostGIS入门_第2张图片


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:缩放

你可能感兴趣的:(Database)