貊淀 发表于 昨天 21:36

PostGIS 介绍(1)--数据管理

PostGIS 是 PostgreSQL 的扩展,允许将 GIS(地理信息系统)对象存储在数据库中。 PostGIS 支持基于 GiST 的 R 树空间索引,并可以分析和处理 GIS 对象;本文主要介绍 PostGIS 的数据管理。
1、空间数据模型

1.1、OGC 几何

开放地理空间联盟(OGC)制定了简单要素访问标准(SFA),为地理空间数据提供模型。它定义了基本的空间类型几何,以及操作和转换几何值以执行空间分析任务的操作。PostGIS 将 OGC 几何模型实现为 PostgreSQL 数据类型 geometry 和 geography。
几何在二维笛卡尔平面中建模形状。多面体表面、三角形和 TIN 类型也可以表示三维空间中的形状。形状的大小和位置由其坐标指定。每个坐标都有一个 X 和 Y 纵坐标值,用于确定其在平面中的位置。形状由点或线段构成,点由单个坐标指定,线段由两个坐标指定。
坐标可以包含可选的 Z 和 M 纵坐标值。Z 纵坐标通常用于表示高程。M 纵坐标包含一个度量值,可以表示时间或距离。如果几何值中存在 Z 或 M 值,则必须为几何中的每个点定义它们。如果几何具有 Z 或 M 纵坐标,则坐标维度为 3D;如果同时具有 Z 和 M,则坐标维度为 4D。
几何值与一个空间参考系统相关联,该系统指示它嵌入的坐标系。空间参考系统由几何 SRID 编号标识。X 轴和 Y 轴的单位由空间参考系统确定。在平面参考系统中,X 和 Y 坐标通常表示东向和北向,而在大地系统中,它们表示经度和纬度。SRID 0 表示一个无限笛卡尔平面,其轴未分配任何单位。
几何维度是几何类型的一个属性。点类型的维度为 0,线性类型的维度为 1,多边形类型的维度为 2。集合的维度是最大元素维度。
1.1.1、点

点是 0 维几何,表示坐标空间中的单个位置。
POINT (1 2)
POINT Z (1 2 3)
POINT ZM (1 2 3 4)1.1.2、线串

线串是由连续的线段序列形成的 1 维线。每个线段由两个点定义,一个线段的端点形成下一个线段的起点。OGC 有效的线串具有零个或两个或多个点,但 PostGIS 也允许单点线串。线串可能会自相交。如果线串的起点和终点相同,则该线串是闭合的。如果线串不自相交,则该线串是简单的。
LINESTRING (1 2, 3 4, 5 6)1.1.3、线性环

线性环是既闭合又简单的线串。第一个点和最后一个点必须相等,并且线不能自相交。
LINEARRING (0 0 0, 4 0 0, 4 4 0, 0 4 0, 0 0 0)1.1.4、多边形

多边形是由外部边界(外壳)和零个或多个内部边界(孔)分隔的二维平面区域。每个边界都是一个线性环。
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))1.1.5、多点

多点是点的集合。
MULTIPOINT ( (0 0), (1 2) )1.1.6、多线串

多线串是线串的集合。如果其每个元素都闭合,则多线串是闭合的。
MULTILINESTRING ( (0 0,1 1,1 2), (2 3,3 2,5 4) )1.1.7、多多边形

多多边形是不重叠、不相邻的多边形的集合。集合中的多边形只能在有限数量的点上接触。
MULTIPOLYGON (((1 5, 5 5, 5 1, 1 1, 1 5)), ((6 5, 9 1, 6 1, 6 5)))1.1.8、几何集合

几何集合是几何的异构(混合)集合。
GEOMETRYCOLLECTION ( POINT(2 3), LINESTRING(2 3, 3 4))1.1.9、多面体表面

多面体表面是共享一些边的连续的面片或刻面的集合。每个面片都是一个平面多边形。如果多边形坐标具有 Z 纵坐标,则该表面是三维的。
POLYHEDRALSURFACE 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)) )1.1.10、三角形

三角形是由三个不同的非共线顶点定义的多边形。由于三角形是多边形,因此由四个坐标指定,第一个坐标和第四个坐标相等。
TRIANGLE ((0 0, 0 9, 9 0, 0 0))1.1.11、TIN

TIN 是表示 不规则三角网 的不重叠的 三角形 的集合。
TIN Z ( ((0 0 0, 0 0 1, 0 1 0, 0 0 0)), ((0 0 0, 0 1 0, 1 1 0, 0 0 0)) )1.2、SQL/MM 第 3 部分 - 曲线

ISO/IEC 13249-3 SQL 多媒体 - 空间标准(SQL/MM)扩展了 OGC SFA,以定义包含具有圆弧的曲线的几何子类型。SQL/MM 类型支持 3DM、3DZ 和 4D 坐标。
1.2.1、圆弧串

圆弧串是基本曲线类型,类似于线性世界中的线串。单个弧段由三个点指定:起点和终点(第一个和第三个)以及弧上的一些其他点。要指定一个闭合的圆,起点和终点是相同的,中间点是圆直径上的相反点(即弧的中心)。在弧的序列中,前一个弧的端点是下一个弧的起点,就像线串的段一样。这意味着圆弧串必须具有大于 1 的奇数个点。
CIRCULARSTRING(0 0, 1 1, 1 0)
CIRCULARSTRING(0 0, 4 0, 4 4, 0 4, 0 0)1.2.2、复合曲线

复合曲线是可能包含圆弧段和线段的单条连续曲线。这意味着除了具有格式正确的组件外,每个组件(最后一个除外)的端点必须与后续组件的起点重合。
COMPOUNDCURVE( CIRCULARSTRING(0 0, 1 1, 1 0),(1 0, 0 1))1.2.3、曲线多边形

曲线多边形类似于多边形,具有外环和零个或多个内环。不同之处在于环可以是圆弧串或复合曲线以及线串。
CURVEPOLYGON(
COMPOUNDCURVE( CIRCULARSTRING(0 0,2 0, 2 1, 2 3, 4 3),
               (4 3, 4 5, 1 4, 0 0)),
CIRCULARSTRING(1.7 1, 1.4 0.4, 1.6 0.4, 1.6 0.5, 1.7 1) )1.2.4、多曲线

多曲线是曲线的集合,可以包括线串、圆弧串或复合曲线。
MULTICURVE( (0 0, 5 5), CIRCULARSTRING(4 0, 4 4, 8 4))1.2.5、多表面

多表面是表面的集合,可以是(线性)多边形或曲线多边形。
MULTISURFACE(
CURVEPOLYGON(
    CIRCULARSTRING( 0 0, 4 0, 4 4, 0 4, 0 0),
    (1 1, 3 3, 3 1, 1 1)),
((10 10, 14 12, 11 10, 10 10), (11 11, 11.5 11, 11 11.5, 11 11)))1.3、WKT 和 WKB

OGC SFA 规范定义了两种用于外部表示几何值的格式:众所周知的文本 (WKT) 和众所周知的二进制 (WKB)。WKT 和 WKB 都包含有关对象类型和定义它的坐标的信息。
众所周知的文本 (WKT) 提供了空间数据的标准文本表示形式,如:
POINT(0 0)
POINT Z (0 0 0)
LINESTRING(0 0,1 1,1 2)
LINESTRING EMPTYWKT 的输入和输出由 ST_GeomFromText 和 ST_AsText 函数提供,如:
SELECT ST_GeomFromText('POINT(1 1)', 4326);
SELECT ST_AsText(ST_GeomFromText('POINT(1 1)', 4326));众所周知的二进制 (WKB) 将空间数据以二进制数据(字节数组)的形式提供了一种可移植的、全精度的表示形式,如:
WKT: POINT(1 1)
WKB: 0101000000000000000000F03F000000000000F03F

WKT: LINESTRING (2 2, 9 9)
WKB: 0102000000020000000000000000000040000000000000004000000000000022400000000000002240WKB 的输入和输出由 ST_GeomFromWKB 和 ST_AsBinary 函数提供,如:
SELECT ST_GeomFromWKB('\x0101000000000000000000F03F000000000000F03F', 4326);
SELECT ST_AsBinary(ST_GeomFromWKB('\x0101000000000000000000F03F000000000000F03F', 4326));2、几何数据类型

2.1、PostGIS EWKB 和 EWKT

OGC SFA 规范最初仅支持 2D 几何图形,并且几何 SRID 不包含在输入/输出表示形式中。OGC SFA 规范 1.2.1(与 ISO 19125 标准一致)增加了对 3D (XYZ) 和测量 (XYM 和 XYZM) 坐标的支持,但仍然不包括 SRID 值。
由于这些限制,PostGIS 定义了扩展的 EWKB 和 EWKT 格式。它们提供 3D (XYZ 和 XYM) 和 4D (XYZM) 坐标支持,并包含 SRID 信息。包含所有几何信息允许 PostGIS 将 EWKB 用作记录的格式(例如,在 DUMP 文件中)。
EWKB 和 EWKT 用于 PostGIS 数据对象的“规范形式”。对于输入,二进制数据的规范形式为 EWKB,而对于文本数据,则接受 EWKB 或 EWKT。这允许通过使用 ::geometry 将 HEXEWKB 或 EWKT 中的文本值强制转换为几何值来创建几何值。对于输出,二进制的规范形式是 EWKB,文本的规范形式是 HEXEWKB(十六进制编码的 EWKB)。
PostGIS EWKT 输出与 OGC WKT 有一些差异:
A、对于 3DZ 几何图形,省略了 Z 限定符
OGC: POINT Z (1 2 3)
EWKT: POINT (1 2 3)
B、对于 3DM 几何图形,包括 M 限定符
OGC: POINT M (1 2 3)
EWKT: POINT (1 2 3)
C、对于 4D 几何图形,省略了 ZM 限定符
OGC: POINT ZM (1 2 3 4)
EWKT: POINT (1 2 3 4)
空间对象的 EWKT 文本表示形式示例如下:
POINT(0 0 0) -- XYZ
SRID=32632;POINT(0 0) -- 带有 SRID 的 XY
POINTM(0 0 0) -- XYM
POINT(0 0 0 0) -- XYZM
SRID=4326;MULTIPOINTM(0 0 0,1 2 1) -- 带有 SRID 的 XYM
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))EWKT 的输入和输出由 ST_GeomFromEWKT 和 ST_AsEWKT 函数提供,如:
SELECT ST_GeomFromEWKT('SRID=4326;POINT(1 1)');

SELECT ST_AsEWKT(ST_GeomFromEWKT('SRID=4326;POINT(1 1)'));
SELECT ST_AsEWKT('SRID=4326;POINT(1 1)'::geometry);EWKB 的输入和输出由 ST_GeomFromEWKB 和 ST_AsEWKB 函数提供,如:
SELECT ST_GeomFromEWKB('\x0101000020E6100000000000000000F03F000000000000F03F');
SELECT ST_AsEWKB(ST_GeomFromEWKB('\x0101000020E6100000000000000000F03F000000000000F03F'));3、使用地理表

PostGIS geography 数据类型为以“地理”坐标(有时称为“大地”坐标或“纬度/经度”或“经度/纬度”)表示的空间要素提供原生支持。地理坐标是以角度单位(度)表示的球面坐标。
PostGIS 几何数据类型的基础是一个平面。平面上两点之间的最短路径是直线。这意味着使用直线向量和笛卡尔数学计算几何图形上的函数(面积、距离、长度、交点等)。这使得它们更易于实现和更快地执行,但也使它们对于地球椭球表面的数据不准确。
PostGIS 地理数据类型基于球面模型。球体上两点之间的最短路径是大圆弧。使用球体上的弧线计算地理函数(面积、距离、长度、交点等)。通过考虑世界的椭球形状,这些函数提供了更准确的结果。
由于底层数学更复杂,因此为地理类型定义的函数比为几何类型定义的函数少。随着时间的推移,随着新算法的添加,地理类型的功能将会扩展。作为一种解决方法,可以在几何类型和地理类型之间来回转换。
与几何数据类型一样,地理数据通过空间参考系统标识符 (SRID) 与空间参考系统相关联。spatial_ref_sys 表中定义的任何大地(基于经度/纬度)空间参考系统都可以使用。(
对于所有空间参考系统,测量函数(例如,ST_Distance、ST_Length、ST_Perimeter、ST_Area)返回的单位以及 ST_DWithin 的距离参数的单位均为米。
3.1、创建地理表

地理类型支持两个可选的类型修饰符:
A、空间类型修饰符限制列中允许的形状和维度类型。空间类型允许的值为:POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION。地理类型不支持曲线、TIN 或 POLYHEDRALSURFACE。该修饰符通过添加后缀来支持坐标维度限制:Z、M 和 ZM。例如,修饰符“LINESTRINGM”仅允许具有三个维度的线串,并将第三个维度视为度量。同样,“POINTZM”需要四维 (XYZM) 数据。
B、SRID 修饰符将空间参考系统 SRID 限制为特定数字。如果省略,则 SRID 默认为 4326 (WGS84 大地),并且所有计算都使用 WGS84 执行。
如:
CREATE TABLE global_points (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    location geography(POINT,4326)
);创建空间索引的方式与几何列相同:
CREATE INDEX global_points_gix ON global_points USING GIST ( location );3.2、使用地理表

可以像插入几何数据一样插入地理表中的数据。如果几何数据具有 SRID 4326,它将自动转换为地理类型。 EWKT 和 EWKB 格式也可用于指定地理值。如:
INSERT INTO global_points (name, location) VALUES ('Town', 'SRID=4326;POINT(-110 30)');
INSERT INTO global_points (name, location) VALUES ('Forest', 'SRID=4326;POINT(-109 29)');
INSERT INTO global_points (name, location) VALUES ('London', 'SRID=4326;POINT(0 49)');查询和测量函数使用米作为单位。因此,距离参数应以米为单位表示,返回值应以米(或面积为平方米)为单位;如:
SELECT name FROM global_points WHERE ST_DWithin(location, 'SRID=4326;POINT(-110 29)'::geography, 1000000);3.3、何时使用地理数据类型

地理数据类型允许以经度/纬度坐标存储数据,但代价是:GEOGRAPHY 上定义的功能比 GEOMETRY 上的少;那些已定义的功能需要更多的 CPU 时间来执行。
选择的数据类型应由正在构建的应用程序的预期工作区域决定。数据是跨越全球或大型大陆区域,还是限于州、县或市?
A、如果数据包含在一个小区域内,选择合适的投影并使用 GEOMETRY 是最佳解决方案,在性能和可用功能方面都是如此。
B、如果数据是全球性的或覆盖大陆区域,最好使用 GEOGRAPHY,无需担心投影细节。
C、如果您不了解投影,并且不想了解它们,并且准备接受 GEOGRAPHY 中可用功能的限制,那么使用 GEOGRAPHY 可能比使用 GEOMETRY 更容易。只需将数据加载为经度/纬度即可。
4、几何验证

PostGIS 符合开放地理空间联盟 (OGC) 的简单要素规范。该标准定义了几何图形简单和有效的概念。这些定义允许简单要素几何模型以一致且明确的方式表示空间对象,从而支持高效计算。(注意:OGC SF 和 SQL/MM 对简单和有效的定义相同。)
4.1、简单几何

简单几何是不具有异常几何点的几何图形,例如自相交或自相切。
作为 0 维几何对象,POINT 本质上是简单的。
如果不存在两个坐标(POINT)相等(具有相同的坐标值),则 MULTIPOINT 是简单的。
如果 LINESTRING 不两次通过同一点(端点除外),则它是简单的。如果简单 LineString 的端点相同,则称其为闭合,并称为线性环。
(a) 和 (c) 是简单的 LINESTRING。 (b) 和 (d) 不是简单的。 (c) 是一个闭合的线性环。

仅当 MULTILINESTRING 的所有元素都是简单的,并且任意两个元素之间的唯一交点发生在两个元素的边界上的点时,该 MULTILINESTRING 才是简单的。
(e) 和 (f) 是简单的 MULTILINESTRING。 (g) 不是简单的。

POLYGON 由线性环组成,因此有效的多边形几何始终是简单的。
要测试几何是否简单,可使用 ST_IsSimple 函数:
SELECT
   ST_IsSimple('LINESTRING(0 0, 100 100)') AS straight, --t
   ST_IsSimple('LINESTRING(0 0, 100 100, 100 0, 0 100)') AS crossing --f通常,PostGIS 函数不要求几何参数是简单的。简单性主要用作定义几何有效性的基础。它也是某些类型的空间数据模型的要求(例如,线性网络通常不允许相交的线)。可以使用 ST_UnaryUnion 使多点和线性几何简单化。
4.2、有效几何

几何有效性主要适用于二维几何(POLYGON 和 MULTIPOLYGON)。有效性由多边形几何建模平面区域的规则定义。
如果满足以下条件,则 POLYGON 是有效的:
A、多边形边界环(外部外壳环和内部孔环)是简单的(不交叉或自接触)。因此,多边形不能有切割线、尖刺或环路。这意味着多边形孔必须表示为内部环,而不是通过外部环自接触(所谓的“反向孔”)。
B、边界环不交叉
C、边界环可能会在点处接触,但只能作为切线(即,而不是在一条线上)
D、内部环包含在外部环中
E、多边形内部是简单连接的(即,环的接触方式不能将多边形分割成多个部分)

如果满足以下条件,则 MULTIPOLYGON 是有效的
A、其元素 POLYGON 是有效的
B、元素不重叠(即,它们的内部不得相交)
C、元素仅在点处接触(即,不沿着一条线)
(n) 是有效的 MULTIPOLYGON。 (o) 和 (p) 是无效的。

这些规则意味着有效的多边形几何也是简单的。
对于线性几何,唯一的有效性规则是 LINESTRING 必须至少有两个点并且具有非零长度(或等效地,至少有两个不同的点)。请注意,非简单(自相交)线是有效的。
SELECT
   ST_IsValid('LINESTRING(0 0, 1 1)') AS len_nonzero, --t
   ST_IsValid('LINESTRING(0 0, 0 0, 0 0)') AS len_zero, --f
   ST_IsValid('LINESTRING(10 10, 150 150, 180 50, 20 130)') AS self_int --tPOINT 和 MULTIPOINT 几何没有有效性规则。
4.3、管理有效性

PostGIS 允许创建和存储有效和无效的几何图形。这允许检测、标记或修复无效几何图形。在某些情况下,OGC 有效性规则比预期的更严格(例如,零长度线串和具有反向孔的多边形)。
要测试几何图形是否有效,可使用 ST_IsValid 函数:
SELECT ST_IsValid('POLYGON ((20 180, 180 180, 180 20, 20 20, 20 180))') --t有关几何图形无效的性质和位置的信息,可使用 ST_IsValidDetail 函数获取:
SELECT valid, reason, ST_AsText(location) AS location
    FROM ST_IsValidDetail('POLYGON ((20 20, 120 190, 50 190, 170 50, 20 20))') AS t;在某些情况下,需要自动更正无效的几何图形,可使用 ST_MakeValid 函数来实现。
5、空间参考系统

空间参考系统 (SRS)(也称为坐标参考系统 (CRS))定义了如何将几何图形引用到地球表面的位置。SRS 有三种类型:
A、大地 SRS使用角度坐标(经度和纬度),直接映射到地球表面。
B、投影 SRS使用数学投影变换将球形地球的表面“展平”到一个平面上。它以允许直接测量诸如距离、面积和角度等量的方式分配位置坐标。坐标系是笛卡尔坐标系,这意味着它有一个定义的原点和两个垂直轴(通常朝向北方和东方)。每个投影 SRS 使用声明的长度单位(通常是米或英尺)。为了避免失真并保持在定义的坐标范围内,投影 SRS 的适用区域可能会受到限制。
C、局部 SRS是一个未参考到地球表面的笛卡尔坐标系。在 PostGIS 中,这由 SRID 值 0 指定。
有许多不同的空间参考系统在使用。常见的 SRS 在欧洲石油勘测集团的 EPSG 数据库中进行了标准化。为了方便起见,PostGIS(和许多其他空间系统)使用一个名为 SRID 的整数标识符来引用 SRS 定义。
几何图形通过其 SRID 值与空间参考系统相关联,该值可以通过 ST_SRID 访问。可以使用 ST_SetSRID 为几何图形分配 SRID。一些几何图形构造函数允许提供 SRID(例如 ST_Point 和 ST_MakeEnvelope)。EWKT 格式支持带有 SRID=n; 前缀的 SRID。
处理成对几何图形的空间函数(例如叠加 和 关系 函数)要求输入几何图形位于同一空间参考系统中(具有相同的 SRID)。可以使用 ST_Transform 和 ST_TransformPipeline 将几何图形数据转换为不同的空间参考系统。从函数返回的几何图形具有与输入几何图形相同的 SRS。
5.1、SPATIAL_REF_SYS 表

PostGIS 使用的 SPATIAL_REF_SYS 表是一个符合 OGC 标准的数据库表,用于定义可用的空间参考系统。它保存了坐标系统的数字 SRID 和文本描述。

一些常用的空间参考系统包括:4326 - WGS 84 经纬度、4269 - NAD 83 经纬度、3395 - WGS 84 世界墨卡托、2163 - 美国国家地图集等,以及 60 个 WGS84 UTM 区域。UTM 区域是最适合测量的区域之一,但仅覆盖 6 度区域。
6、空间表

6.1、创建空间表

geometry 类型支持两个可选的类型修饰符:
A、空间类型修饰符限制列中允许的形状和维度类型。该值可以是任何受支持的几何子类型(例如,POINT、LINESTRING、POLYGON、MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION 等)。该修饰符通过添加后缀来支持坐标维度限制:Z、M 和 ZM。例如,修饰符 'LINESTRINGM' 仅允许具有三个维度的线串,并将第三个维度视为度量。类似地,'POINTZM' 要求四维 (XYZM) 数据。
B、SRID 修饰符将空间参考系统 SRID 限制为特定数字。如果省略,SRID 默认为 0。
如:
CREATE TABLE roads (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    geom geometry(POLYGON, 4326)
)6.2、GEOMETRY_COLUMNS 视图

OGC SQL 简单要素规范定义了 GEOMETRY_COLUMNS 元数据表来描述几何图形表的结构。在 PostGIS 中,geometry_columns 是一个从数据库系统目录表中读取的视图。这确保空间元数据信息始终与当前定义的表和视图保持一致。

7、空间索引

通常用于属性数据的 B 树索引方法对于空间数据不是很有效,因为它仅支持存储和查询单维数据。诸如几何(具有 2 个或更多维度)之类的数据需要支持跨所有数据维度进行范围查询的索引方法。PostgreSQL 用于空间数据处理的关键优势之一是,它提供了多种非常适合多维数据的索引方法:GiST、BRIN 和 SP-GiST 索引。
A、GiST(广义搜索树) 索引将数据分解为“一边的事物”、“重叠的事物”、“内部的事物”,并且可以用于各种数据类型,包括 GIS 数据。PostGIS 使用在 GiST 之上实现的 R 树索引来索引空间数据。GiST 是最常用且用途最广泛的空间索引方法,可提供非常好的查询性能。
B、BRIN(块范围索引)索引通过总结表记录的空间范围来操作。搜索是通过扫描范围来完成的。BRIN 仅适用于某些类型的数据(空间排序、不频繁更新或不更新)。但是,它提供更快的索引创建时间和更小的索引大小。
C、SP-GiST(空间分区广义搜索树) 是一种通用索引方法,支持分区搜索树,如四叉树、k-d 树和基数树。
空间索引仅存储几何体的边界框。空间查询使用索引作为主过滤器,以快速确定可能匹配查询条件的一组几何体。
7.1、GiST 索引

GiST 代表“广义搜索树”,它是多维数据的一种通用索引形式。PostGIS 使用在 GiST 之上实现的 R 树索引来索引空间数据。GiST 是最常用且用途最广泛的空间索引方法,可提供非常好的查询性能。GiST 的其他实现用于加速搜索各种不规则数据结构(整数数组、光谱数据等),这些数据结构不适合正常的 B 树索引。
在 geometry 列上构建 GiST 索引的语法如下:
CREATE INDEX ON USING GIST ( )7.2、BRIN 索引

BRIN 代表“块范围索引”。它是 PostgreSQL 9.5 中引入的通用索引方法。BRIN 是一种有损索引方法,这意味着需要进行二次检查以确认记录是否与给定的搜索条件匹配(所有提供的空间索引都是这种情况)。它提供更快的索引创建和更小的索引大小,以及合理的读取性能。其主要目的是支持对与表中物理位置相关的列的非常大的表进行索引。除了空间索引外,BRIN 还可以加速对各种属性数据结构(整数、数组等)的搜索。
在 geometry 列上构建 BRIN 索引的语法为:
CREATE INDEX ON USING BRIN ( )7.3、SP-GiST 索引

SP-GiST 代表“空间分割广义搜索树”,它是一种用于多维数据类型的通用索引形式,支持分区搜索树,例如四叉树、k-d 树和基数树(trie)。这些数据结构的共同特点是它们重复地将搜索空间划分为大小不必相等的多个分区。除了空间索引之外,SP-GiST 还用于加速许多类型数据的搜索,例如电话路由、IP 路由、子字符串搜索等。
在 geometry 列上构建 SP-GiST 索引的语法为:
CREATE INDEX ON USING SPGIST ( ) 
 
 
转自:https://postgis.net.cn/docs/manual-3.5/using_postgis_dbmanagement.html。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: PostGIS 介绍(1)--数据管理