【PostGIS入门】二、几何图形与投影

384 阅读5分钟

参考: PostGIS官方教程

1、空间数据类型

( SFSQL ) 规范是 PostGIS 开发的原始指导标准,它定义了真实世界对象的表示方式。
PostGIS中使用geometrygeography这两种数据类型来表示所有的空间几何对象,包括:

  • 原始类型:点**Point**、线**LineString**、面**Polygon**
  • 几何类型:**MultiPoint****MultiLineString****MultiPolygon**、任意集合图形集合**GeometryCollection**
  • PostGIS拓展:TriangleTin

在GIS中集合是一个很重要的内容,比如:表示对被道路分割的宗地。 image.png

1.1 geometry与geography

与SQLSERVER空间数据类型一致,在PostGIS中,geometry代表使用投影坐标系的矢量数据,geography代表使用地理坐标系的矢量数据。

更推荐使用geometry类型,因为有更多的空间函数的支持。(因为投影坐标系下一些空间运算更方便)

1.2 3D支持

PostGIS支持3D以及更高维度的几何图形,通过对几何图形增加"Z"维度添加高程信息,增加“M”维度支持其他的额外信息。
使用WKT格式表示
以点图形为例,使用WKT格式:

  • 2D:Point(x,y)
  • 3D: Point Z(x,y,z)
  • M: POINT ZM (X,Y,Z,M)

2、空间参考系统(坐标系)

空间参考系统分为三种类型:

  • 地理坐标系(经纬度)
  • 投影坐标系
  • 平面坐标系,在PostGIS中SRID为0

:::info postgis中,空间参考系不是与表关联的,是与表中表示几何图形的字段关联的。一个表可以有多个不同的坐标系的几何图形。 :::

2.1 坐标系相关的空间函数

3、几何转换

在PostGIS中,空间数据geom是以仅供PostGIS使用的格式存储的,如何把他转换为我们熟知的格式哪?

有很多格式转换函数:

  • Well-known text (WKT)
    • ST_GeomFromText(text, srid) returns geometry
    • ST_AsText(geometry) returns text
    • ST_AsEWKT(geometry) returns text
  • Well-known binary (WKB)
    • ST_GeomFromWKB(bytea) returns geometry
    • ST_AsBinary(geometry) returns bytea
    • ST_AsEWKB(geometry) returns bytea
  • Geographic Mark-up Language (GML)
    • ST_GeomFromGML(text) returns geometry
    • ST_AsGML(geometry) returns text
  • Keyhole Mark-up Language (KML)
    • ST_GeomFromKML(text) returns geometry
    • ST_AsKML(geometry) returns text
  • GeoJSON
    • ST_AsGeoJSON(geometry) returns text
  • Scalable Vector Graphics (SVG)
    • ST_AsSVG(geometry) returns text

4、创建几何

在PostGIS中有多种创建几何的方式,

2.2 直接指定几何对象

使用Well-Known Text (WKT) and Well-Known Binary(WKB)格式表示几何:

SELECT 'SRID=4;POINT(0 0)'::geometry;
  geometry
  ----------------------------------------------------
  01010000200400000000000000000000000000000000000000

2.3 通过空间函数构造几何

  • ST_Collect — 从一组几何体创建一个 GeometryCollection 或 Multi* 几何体。
  • ST_LineFromMultiPoint — 从多点几何创建一个 LineString。
  • ST_MakeEnvelope — 从最小坐标和最大坐标创建矩形多边形。
  • ST_MakeLine — 从点、多点或线串几何图形创建线串。
  • ST_MakePoint — 创建 2D、3DZ 或 4D 点。
  • ST_MakePointM — 从 X、Y 和 M 值创建一个点。
  • ST_MakePolygon — 从壳和可选的孔列表创建多边形。
  • ST_Point — 创建具有 X、Y 和 SRID 值的点。
  • ST_PointZ — 创建具有 X、Y、Z 和 SRID 值的点。
  • ST_PointM — 创建具有 X、Y、M 和 SRID 值的点。
  • ST_PointZM — 创建具有 X、Y、Z、M 和 SRID 值的点。
  • ST_Polygon — 从具有指定 SRID 的 LineString 创建多边形。
  • ST_TileEnvelope — 使用 XYZ 瓦片系统在 Web Mercator (SRID:3857) 中创建一个矩形多边形。
  • ST_HexagonGrid — 返回一组完全覆盖几何参数边界的六边形和单元格索引。
  • ST_Hexagon — 返回单个六边形,使用六边形网格空间内提供的边尺寸和单元格坐标。
  • ST_SquareGrid — 返回一组完全覆盖几何参数边界的网格正方形和单元格索引。
  • ST_Square — 使用正方形网格空间内提供的边尺寸和单元格坐标返回单个正方形。
  • ST_Letters — 返回呈现为几何图形的输入字母,默认起始位置在原点,默认文本高度为 100。

5、几何有效性

几何有效性主要适用于二维几何(PolygonMutilPolygon
有效的**polygon**

  1. 多边形边界环(外壳环和内孔环)很_简单_(不要交叉或自接触)。因此,多边形不能有切割线、尖峰或环。这意味着多边形孔必须表示为内环,而不是外环自接触(所谓的“倒孔”)。
  2. 边界环不交叉
  3. 边界环可能在点处接触但仅作为切线(即不在一条线上)
  4. 内环包含在外环中
  5. 多边形内部是简单连接的(即环不能以将多边形分成多个部分的方式接触)

有效的multipolygon :

  1. 它的元素POLYGON是有效的
  2. 元素不重叠(即它们的内部不得相交)
  3. 元素仅在点接触(即不沿着一条线)

6、空间索引

在标准数据库中,索引是通过B+树等结构实现数据的高效检索,那么对于几何图形数据,带有空间坐标的数据是如何进行检索哪?
image.png :::info 空间索引是如何工作的哪?
使用R树索引,构建几何数据的最小外包矩形,在查找空间数据时,就可以先通过这个最小外包矩形来对数据进行筛选,从而实现数据的高效检索。 :::

7、元数据表

为了符合Simple Features for SQLSFSQL)规范,PostGIS提供了两张表用于追踪和报告数据库中的几何图形

  • 第一张表spatial_ref_sys —— 定义了数据库已有的几何数据的所有空间参照系统
  • 第二张表**geometry_columns **—— 提供了数据库中所有空间数据的描述信息。


geometry_columns 提供了很多信息,包括:

  • f_table_catalog:数据库名;f_table_schema:模式名:f_table_name:空间数据表名
  • f_geometry_column:用于记录几何信息的属性列的列名**。**
  • coord_dimension:几何图形的维度(2维、3维或4维)
  • srid会引用自spatial_ref_sys表的空间参考标识符
  • type列定义了几何图形的类型。比如"点(Point)"和"线串(Linestring)"等类型。