【1】认识postgis

332 阅读5分钟

1.加载PostGIS数据

-- 加载PostGIS插件
create extension if not exists postgis;

或者使用工具

image.png

image.png

使用

1.创建表

CREATE TABLE holo_gis_1 ( id int, geom geometry, PRIMARY KEY (id)) ;

使用工具创建表

image.png 创建完成后表结构

image.png

默认坐标系为0可进行修改

geometry的索引(GiST

image.png

2.插入数据

INSERT INTO holo_gis_1 ("id", "geom") VALUES (1,st_geomfromtext('wkt字符串',srid(坐标系)) );
INSERT INTO holo_gis_1 ("id", "geom") VALUES (1,st_geomfromtext('POINT(0 0)',4326));

3.创建geometry对象

1.方法一 使用函数st_geomfromtext

SELECT st_geomfromtext('point(0 0)')
SELECT st_geomfromtext('point(0 0)',4326)

2.方法二

SELECT 'POINT(-77.0092 38.889588)'::geometry
SELECT 'SRID=4267;POINT(-77.0092 38.889588)'::geometry

3.查看坐标系 使用函数st_srid()

SELECT st_srid('POINT(-77.0092 38.889588)'::geometry)

SELECT st_srid('SRID=4267;POINT(-77.0092 38.889588)'::geometry)

image.png 4.对坐标系为0的geometry重新设置坐标 使用函数st_setsrid(geometry, int4)

SELECT st_setsrid(('POINT(-77.0092 38.889588)'::geometry),4267)

测试

SELECT st_setsrid(('POINT(-77.0092 38.889588)'::geometry),4267)='SRID=4267;POINT(-77.0092 38.889588)'::geometry

image.png

注:不写坐标系,坐标系默认为0

3.WKT

每个几何类型都有一个WKT(Well-known text)表示,既可以用来构造该类型的新实例,也可以将现有实例转换为文本形式。

几何对象WKT表示示例

几何类型WKT 例子说明
PointPoint (10 10)
LineStringLineString ( 10 10, 20 20, 30 40)有 3 个节点的线
PolygonPolygon((10 10, 10 20, 20 20, 20 15, 10 10))只有 1 个外环的多边形
PolygonPolygon((10 10, 10 20, 20 20, 20 15, 10 10),(12 12,12 14,14 14,12 12))有 1 个外环和1个内环的多边形
MultipointMultiPoint ((10 10), (20 20))有 2 个点的多点
MultiLineStringMultiLineString((10 10, 20 20),(15 15, 30 15))有 2 条线的多线
MultiPolygonMultiPolygon(((10 10, 10 20, 20 20, 20 15, 10 10)),((60 60, 70 70, 80 60, 60 60 )))有 2 个面的多面
GeomCollectionGeometryCollection(POINT (10 10),POINT (30 30),LINESTRING (15 15, 20 20))有 2 个点和 1 条线的几何集合
PolyhedralSurfacePolyhedralSurface Z(((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)))一个立方体
TinTin Z (((0 0 0, 0 0 1, 0 1 0, 0 0 0)),((0 0 0, 0 1 0, 1 0 0, 0 0 0)),((0 0 0, 1 0 0, 0 0 1, 0 0 0)),((1 0 0, 0 1 0, 0 0 1, 1 0 0)))有 4 个三角形构成的TIN网络
PointPoint Z (10 10 5)三维点
PointPoint ZM (10 10 5 40)带 M 值的三维点
PointPoint M (10 10 40)带 M 值的二维点

4.空间类

1.Geometry

Geometry是基类,一个不可实例化的抽象类。

2.GeometryCollection

几何集合(GeometryCollection)是一个几何对象,它是一些几何对象的集合。

3.Point

点(Point)是0维几何对象,表示坐标空间中的某个位置。坐标的解释取决于与该点相关联的坐标参考系统。X、Y一般表示经纬度或投影坐标值,Z一般表示高程值,M一般是表示一个附属的测量值,比如温度、浓度等。

SELECT  'POINT(0 0)'::geometry

image.png

4.MultiPoint

多点(MultiPoint)是一个元素为Point的0维GeometryCollection。如果MultiPoint中没有两个点相等,则“多点”是简单的。

SELECT  'MULTIPOINT((10 10), (20 20))'::geometry

image.png

5.Curve

曲线(Curve)通常是存储点序列的一维几何对象,Curve的子类型指定点之间插值的形式。模型中仅定义了一个Curve的子类LineString,使用点之间的线性插值。如果Curve不通过相同的点两次,则Curve是简单的,两个端点除外。如果曲线的起始点等于它的端点,则曲线是封闭的。简单而封闭的曲线是一个环(Ring)。 判断是否是环

SELECT st_isring('linestring(0 0,10 0,10 10,0 10,0 0)'::geometry)

image.png

6.LineString,Line,LinearString

线(LineString)是在点之间进行线性插值的曲线。每一对连续的点定义了一个线段;Line是一条直线,正好有两个点;线环(LinearString)是既封闭又简单的LineString。

SELECT 'linestring(0 0,10 0)'::geometry

image.png

7.MultiCurve

多曲线(MultiCurve)是元素为Curve的一维GeometryCollection。多曲线是不可实例化的类;一个多曲线是简单的要求它的所有元素都是简单的,并且任意两个元素之间的唯一交点在两个元素的边界上。如果所有的元素都是封闭的,则该多曲线是封闭的。

8.MultiLineString

多线(MultiLineString)是元素为LineString的1维GeometryCollection。

image.png

9.Surface

曲面(Surface)是一个二维的几何对象。一个简单的曲面可以由一个“外部边界”和0或多个“内部”边界相关联的片组成。模型中定义的曲面实例化子类是多边形和多面体。

10.Polygon,Triangle

多边形(Polygon)是由1个外环和0或多个内环定义的平面。每个内环在多边形中构成了一个洞。外环沿逆时针方向, 内环沿顺时针方向。

image.png

三角形(Triangle)是具有3个不共线顶点且无内环的多边形。

11.PolyhedralSurface

多面体(PolyhedralSurface)是多边形的集合,它们共享共同的边界。

三角不规则网络(TIN)是一个由三角片组成的多面体。

12.MultiSurface

多曲面(MultiSurface)是一个元素为Surface的2维GeometryCollection。

13.MultiPolygon

多面(MultiPolygon)是元素为Polygon的2维GeometryCollection。

image.png