PostGIS空间函数

更新时间:
复制 MD 格式

PostGIS是数据库PostgreSQL的空间扩展,PostGIS可以提供空间对象、空间索引、空间操作函数和空间操作符等空间信息服务功能。本文为您介绍PostGISHologres中的使用方法。

引擎支持说明

Hologres V1.3及以上版本中,大部分PostGIS函数由Hologres自研引擎HQE支持,性能更优;Hologres V1.3以下版本由PQE引擎支持,性能稍弱。各函数当前的引擎归属请参见空间函数中各函数表的支持的引擎列。

安装与卸载PostGIS

在使用PostGIS之前,需要SuperuserDB内执行以下语句安装扩展包才可以正常使用。一个DB只需执行一次即可,如果创建新的DB,还需要再次执行如下语句。

-- 加载PostGIS插件,显式指定安装到public schema
CREATE EXTENSION IF NOT EXISTS postgis SCHEMA public;
说明

不支持将postgis extension创建在pg_catalog schema下。

在安装完成后,您可以执行如下SQL语句查看当前PostGIS版本。Hologres中目前使用的PostGIS版本是3.0.0。

SELECT public.postgis_full_version();
说明

postgis_full_version()public schema下的plpgsql函数。Hologres默认的search_path已包含public,可以直接调用;如果当前会话的search_path不包含public,则需要加上public.前缀,否则会报function postgis_full_version() does not exist。为保证在任意search_path下均可执行,本文示例统一使用public.前缀。

卸载PostGIS

若不再使用PostGIS,您可执行如下命令卸载PostGIS插件。

DROP EXTENSION postgis;

如果数据库中存在依赖geometry、geography类型的对象(例如按照创建并查询包含空间数据类型的表创建的表),直接执行上述命令会报错cannot drop extension postgis because other objects depend on it。此时请按以下步骤先清理依赖对象,再卸载插件。

  1. 查询仍依赖geometry、geography类型的对象及其所在列。

    SELECT n.nspname AS schema_name, c.relname AS object_name, a.attname AS column_name, t.typname
    FROM pg_attribute a
      JOIN pg_class c ON c.oid = a.attrelid
      JOIN pg_type t ON t.oid = a.atttypid
      JOIN pg_namespace n ON n.oid = c.relnamespace
    WHERE t.typname IN ('geometry', 'geography')
      AND c.relkind IN ('r', 'p', 'm', 'f')
      AND a.attnum > 0
      AND NOT a.attisdropped
      AND n.nspname NOT LIKE 'pg_%';
  2. 删除上一步查询到的表,或删除表中的空间数据类型列。

    DROP TABLE <TABLE_NAME>;
    说明

    若数据库已开启表回收站(Hologres V3.1及以上版本默认开启),DROP TABLE删除的表会进入回收站,需继续执行下一步清空回收站。您也可以执行DROP TABLE <TABLE_NAME> FORCE;使表不进入回收站,从而跳过下一步。关于表回收站的更多信息,请参见表回收站

  3. 清空回收站。回收站中的表仍持有对空间数据类型的依赖,需清空回收站才能释放该依赖。

    CALL hologres.hg_purge_all_tables();
    重要

    hg_purge_all_tables()会清理当前数据库回收站中的所有表,清理后无法恢复,执行前请确认回收站中没有需要保留的表。该命令需由当前实例的Superuser执行。

  4. 卸载PostGIS插件。

    DROP EXTENSION postgis;
重要

请按上述步骤清理依赖对象后再卸载,不推荐使用DROP EXTENSION <EXTENSION_NAME> CASCADE;命令级联卸载Extension。CASCADE(级联)删除命令不仅会删除指定扩展本身,还会一并清除扩展数据(例如PostGIS数据、RoaringBitmap数据、Proxima数据、Binlog数据、BSI数据等)以及依赖该扩展的对象(包括元数据、表、视图、Server数据等)。

表冲突处理

执行CREATE EXTENSION postgis时如果报错relation spatial_ref_sys already exists,说明数据库中存在历史安装残留的系统表。正常执行DROP EXTENSION postgis卸载后重装不会产生残留,该报错通常出现在从其他数据库迁移导入、或此前手工创建过同名表的场景。按以下步骤处理:

  1. 卸载已部分安装的扩展。

    DROP EXTENSION IF EXISTS postgis;
  2. 清理残留的系统表。执行前请确认该表确为安装残留而非业务表。

    DROP TABLE IF EXISTS spatial_ref_sys CASCADE;
  3. 重新安装PostGIS扩展。

    CREATE EXTENSION IF NOT EXISTS postgis SCHEMA public;
  4. 验证安装。

    SELECT public.postgis_full_version();

创建并查询包含空间数据类型的表

目前在Hologres中使用PostGIS,支持两类空间数据类型,即几何类型(Geometry Type)和地理类型(Geography Type)。

在实际使用过程中,几何类型(Geometry Type)是使用较频繁的类型,如下内容将以几何类型为例,指导您创建包含Geometry数据类型的表并进行典型空间查询。更多关于地理类型(Geography Type)的参数和使用说明,请参见PostGIS Geography Type

  1. 创建包含Geometry数据类型的表

    说明

    创建包含几何类型的表时,您可以指定创建的几何体类型。包括Point、MultiPoint、Linestring、MultiLinestring、Polygon、MultiPolygon等。

    • 创建不指定几何类型的表。

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

      以上示例中,创建了包含几何类型的表,但是该表中不指定具体的几何类型。

    • 创建指定几何体类型和SRID的表。

      CREATE TABLE holo_gis_2 ( id INT, geom geometry(point, 4326), PRIMARY KEY (id)) ;

      以上示例中,Geometry类型指定为Point,SRID4326,SRID不指定默认为0。插入数据和查询条件中几何体的SRID必须与列定义的SRID一致,否则会报错,例如Geometry SRID (0) does not match column SRID (4326)Operation on mixed SRID geometries。更多关于SRID释义,请参见PostGIS官方文档

  2. 向表中插入数据

    您可以通过如下方式向表中插入数据,其中,关于空间函数的使用说明,请参见空间函数。关于SRID释义,请参见PostGIS官方文档

    • 不指定SRID值。

      INSERT INTO holo_gis_1 VALUES (1, ST_GeomFromText('point(116 39)'));
    • 指定SRID值。

      INSERT INTO holo_gis_2 VALUES (1, ST_GeomFromText('point(116 39)', 4326));
  3. 执行数据查询

    您可以在创建表并插入数据后,执行矩形范围查询和多边形相交判定两种典型场景的查询。如下示例中,更多关于空间函数的使用说明,请参见空间函数

    • 矩形范围查询

      • 不指定SRID值。

        SELECT st_astext(geom) FROM holo_gis_1
        WHERE ST_Covers(ST_MakeBox2D(ST_Point(116, 39),ST_Point(117, 40)), geom);

        返回结果如下:

        st_astext
        -------------
        POINT(116 39)
      • 指定SRID值。

        SELECT st_astext(geom) FROM holo_gis_2 
        WHERE ST_Covers(ST_SetSRID(ST_MakeBox2D(ST_Point(116, 39),ST_Point(117, 40)), 4326), geom);

        返回结果如下:

        st_astext
        -------------
        POINT(116 39)
      说明

      数据量较大时,建议先用外包框运算符&&做粗过滤,再执行精确的空间关系判断,以减少参与精确计算的数据量。&&HQE支持,开销低于ST_IntersectsST_Covers等需要下推至PQE的拓扑判断函数。示例如下:

      SELECT st_astext(geom) FROM holo_gis_1
      WHERE geom && ST_MakeBox2D(ST_Point(116, 39), ST_Point(117, 40))
        AND ST_Intersects(ST_GeomFromText('POLYGON((116 39,117 39,117 40,116 40,116 39))'), geom);

      如果只需要矩形范围过滤、不需要精确的拓扑语义,直接使用geom && ST_MakeBox2D(...)即可。如果列定义了SRID,需使用ST_SetSRID为外包框设置相同的SRID,否则会报Operation on mixed SRID geometries

    • 多边形相交判定(在内部或在边界上)

      • 不指定SRID值。

        SELECT st_astext(geom) FROM holo_gis_1
        WHERE ST_Intersects(ST_GeomFromText('POLYGON((116 39,117 39,117 40,116 40,116 39))'), geom);

        返回结果如下:

        st_astext
        -------------
        POINT(116 39)
      • 指定SRID值。

        SELECT st_astext(geom) FROM holo_gis_2 
        WHERE ST_Intersects(ST_SetSRID(ST_GeomFromText('POLYGON((116 39,117 39,117 40,116 40,116 39))'), 4326), geom);

        返回结果如下:

        st_astext
        -------------
        POINT(116 39)

空间函数

PostGIS为您提供了一些空间函数,每种函数可以将一种数据类型的值转换为另一种类型。各类空间函数的说明请参见以下各表,关于函数语法,部分参数说明如下:

  • geom:表格中涉及的geom均表示一个GEOMETRY类型的值,或一个计算结果为GEOMETRY类型的表达式。

  • precision:表示一个INTEGER类型的值,用于控制坐标的输出精度。该参数在不同函数中的名称、语义和默认值不同:

    • ST_AsText(geom [, precision]):precision为有效数字位数,未指定时默认为15。

    • ST_AsGeoJSON(geom [, maxdecimaldigits]):该参数为最大小数位数,未指定时默认为9。如果需要保留更高精度,请显式指定该参数,否则导出结果会丢失精度。

    建议取值范围为1~20。超出该范围不会报错,但输出位数没有实际意义(双精度浮点数的有效位约为15~17位)。

  • index:表格中涉及的index为索引,均表示一个INTEGER类型的值。

  • srid:表格中涉及srid均表示一个INTEGER类型的值,它是空间参考标识符SRID。

更多关于空间函数的说明,请参见PostGIS官方文档

说明
  • 支持的引擎列仅标注函数当前的引擎归属(HQEPQE),标注基于Hologres V4.2版本实测。函数的引擎归属会随版本演进,请以实例实际执行计划(EXPLAIN结果中是否出现PQE节点)为准。各版本的整体引擎支持情况,请参见引擎支持说明

  • 以下各表仅列出各函数的常用签名。部分函数还支持其他重载形式(例如ST_MakeLine支持传入几何体数组、ST_AddPoint支持指定插入位置),完整的重载列表,以及本文示例中出现但未列入以下各表的函数(例如ST_MakeBox2D),请参见PostGIS官方文档

  • Geometry Constructors函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_LineFromMultiPoint

    ST_LineFromMultiPoint(geom)

    GEOMETRY

    ST_LineFromMultiPoint 返回输入多点几何体中的线串。点的顺序将保留。返回的几何体的空间参考系统标识符(SRID)与输入几何体的相同。

    HQE

    ST_MakeEnvelope

    ST_MakeEnvelope(xmin, ymin, xmax, ymax [, srid])

    子类型为POLYGONGEOMETRY。

    返回由输入坐标指定的矩形范围对应的多边形,输入坐标分别指定矩形的左下角和右上角。即使输入坐标退化为一个点或一条线,返回值仍为POLYGON。如果指定了SRID,返回几何体的空间参考系统标识符(SRID)将设置为该值,未指定时默认为0。

    HQE

    ST_MakeLine

    ST_MakeLine(geom1, geom2)

    子类型 LINESTRINGGEOMETRY。

    ST_MakeLine从输入几何体创建线串。

    HQE

    ST_MakePoint

    ST_MakePoint(x, y)

    子类型POINT的 GEOMETRY。

    ST_MakePoint返回其坐标值为输入值的点几何体。

    HQE

    ST_Point

    ST_Point(x, y)

    子类型POINT的 GEOMETRY。

    ST_Point从输入坐标值返回点几何体。

    HQE

    ST_Polygon

    ST_Polygon(linestring, srid)

    子类型POLYGONGEOMETRY。

    ST_Polygon返回一个多边形几何体,其外部环形是输入线串,其值是空间参考系统标识符(SRID)的输入值。

    HQE

  • Geometry Accessors函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    GeometryType

    GeometryType(geom)

    TEXT

    以字符串形式返回输入几何体的子类型,返回值为不带前缀的大写形式,例如POINT、POLYGON。

    HQE

    ST_Boundary

    ST_Boundary(geom)

    GEOMETRY

    ST_Boundary返回输入几何体的边界,如下所示:如果输入几何为空(即不包含点),则按原样返回。如果输入几何是点或非空多点,则返回空几何集合。如果输入是线串或多线串,则返回包含边界上所有点的多点,多点可能为空。如果输入是一个没有任何内环的面,则返回一个表示其边界的闭合线串。如果输入是具有内环的面,或者是多面,则返回多线串。多线串包含面积几何中所有环的所有边界作为闭合线串。

    HQE

    ST_Dimension

    ST_Dimension(geom)

    INTEGER

    ST_Dimension 返回输入几何体的固有维度。固有维度是几何体中定义的子类型的维度值。

    HQE

    ST_Envelope

    ST_Envelope(geom)

    GEOMETRY

    ST_Envelope 返回输入几何体的最小边界框,如下所示:如果输入几何体为空,则返回的几何体是输入几何体的副本。如果输入几何体的最小边界框退化为一个点,则返回的几何体是一个点。如果输入几何体的最小边界框是一维的,则返回两点线串。如果上述条件都不成立,则函数将返回一个顺时针方向的多边形,其顶点为最小边界框的角。返回的几何体的空间参考系统标识符(SRID)与输入几何体的相同。

    HQE

    ST_ExteriorRing

    ST_ExteriorRing(geom)

    子类型 LINESTRINGGEOMETRY。

    ST_ExteriorRing返回一个表示输入面外环的闭合线串。

    HQE

    ST_GeometryN

    ST_GeometryN(geom, index)

    GEOMETRY

    ST_GeometryN返回由输入几何体的输入索引指向的几何体,如下所示:当输入是点、线串或多边形时,如果索引等于一 (1),则按原样返回几何体;如果索引不是一 (1),则返回 null。如果输入是多点、多线串、多边形或几何体集合,则返回由输入索引指向的点、线串、多边形或几何体集合。索引是从 1 开始的。结果的空间参考系统标识符 (SRID) 与输入几何体的相同。

    HQE

    ST_GeometryType

    ST_GeometryType(geom)

    TEXT

    以字符串形式返回输入几何体的子类型,返回值带ST_前缀,例如ST_Point、ST_Polygon。与GeometryType的区别仅在于返回值格式,编写等值判断条件时请注意区分。

    HQE

    ST_InteriorRingN

    ST_InteriorRingN(geom, index)

    子类型LINESTRINGGEOMETRY。

    ST_InteriorRingN返回与索引位置处输入多边形的内环相对应的闭合线串。

    HQE

    ST_IsClosed

    ST_IsClosed(geom)

    BOOLEAN

    如果输入几何体已闭合,则 ST_IsClosed 返回 true。以下规则定义闭合的几何体:输入的几何体是一个点或一个多点。输入几何体是一个线串,并且该线串的起点和终点是重合的。输入几何体是一个非空的多线串,并且其所有线串均已闭合。输入几何体是一个非空多边形,所有多边形的环都是非空的,并且所有环的起点和终点都是重合的。输入几何体是一个非空的多边形集合,并且其所有多边形均已闭合。输入几何体是一个非空几何体集合,并且其所有组件均已闭合。

    HQE

    ST_IsCollection

    ST_IsCollection(geom)

    BOOLEAN

    如果输入几何体为下列子类型之一,则 ST_IsCollection返回true:GEOMETRYCOLLECTION、MULTIPOINT、MULTILINESTRING或者MULTIPOLYGON。

    HQE

    ST_IsEmpty

    ST_IsEmpty(geom)

    BOOLEAN

    如果输入几何体是空的,则ST_IsEmpty返回true。如果一个几何体不包含点,则该几何体为空。

    HQE

    ST_IsPolygonCW

    ST_IsPolygonCW(geom)

    BOOLEAN

    如果输入多边形的外环为顺时针方向且所有内环为逆时针方向,则返回true;如果外环与内环方向相同,则返回false。如果输入几何体是点、线串、多点或多线串,则返回true。对于几何体集合,如果集合中的所有多边形均满足上述条件,则返回true。对于空多边形(POLYGON EMPTY),返回true。

    HQE

    ST_IsPolygonCCW

    ST_IsPolygonCCW(geom)

    BOOLEAN

    如果输入多边形的外环为逆时针方向且所有内环为顺时针方向,则返回true;如果外环与内环方向相同,则返回false。如果输入几何体是点、线串、多点或多线串,则返回true。对于几何体集合,如果集合中的所有多边形均满足上述条件,则返回true。对于空多边形(POLYGON EMPTY),返回true。

    说明

    通过PQE支持。ST_IsPolygonCWHQE支持,对大表做绕向筛选时请注意两者的性能差异。两个函数不是互补关系,当外环与内环方向相同时两者同时返回false,因此不能通过对ST_IsPolygonCW取反来判断逆时针绕向。

    PQE

    ST_IsSimple

    ST_IsSimple(geom)

    BOOLEAN

    如果输入几何体是简单的,则ST_IsSimple返回 true。

    HQE

    ST_NPoints

    ST_NPoints(geom)

    INTEGER

    ST_NPoints 返回输入几何体中的点数。

    HQE

    ST_NRings

    ST_NRings(geom)

    INTEGER

    ST_NRings 返回输入几何体中的环形数。

    HQE

    ST_NumGeometries

    ST_NumGeometries(geom)

    INTEGER

    ST_NumGeometries返回输入几何体中的几何体数。

    HQE

    ST_NumInteriorRings

    ST_NumInteriorRings(geom)

    INTEGER

    ST_NumInteriorRings返回输入多边形几何体中的环形数。

    HQE

    ST_NumPoints

    ST_NumPoints(geom)

    INTEGER

    ST_NumPoints返回输入几何体中的点数。

    HQE

    ST_PointN

    ST_PointN(geom, index)

    子类型POINT的 GEOMETRY。

    ST_PointN返回由索引值指定的线串中的点。负索引值从线串的末尾开始倒计数,因此-1是最后一个点。

    HQE

    ST_Points

    ST_Points(geom)

    子类型MULTIPOINT的 GEOMETRY。

    ST_Points返回包含输入几何中所有非空点的多点几何。ST_Points不会移除输入中重复的点,包括环形几何的起点和终点。

    HQE

    ST_StartPoint

    ST_StartPoint(geom)

    GEOMETRY

    ST_StartPoint返回输入线串的第一个点。结果的空间参考系统标识符(SRID)值与输入几何体的相同。

    HQE

    ST_X

    ST_X(point)

    DOUBLE PRECISION

    ST_X返回输入点的第一个坐标。

    HQE

    ST_Y

    ST_Y(point)

    DOUBLE PRECISION

    ST_Y返回输入点的第二个坐标。

    HQE

  • Geometry Editors函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_AddPoint

    ST_AddPoint(geom1, geom2)

    GEOMETRY

    ST_AddPoint返回一个线串几何体,它与添加了点的输入几何体相同。

    HQE

    ST_Multi

    ST_Multi(geom)

    GEOMETRY带子类型MULTIPOINT、MULTILINESTRING、MULTIPOLYGON或者GEOMETRYCOLLECTION。

    ST_Multi将几何转换为相应的多类型。如果输入几何已经是多类型或几何集合,则返回其副本。如果输入几何体是点、线串或多边形,则分别返回包含输入几何体的MultiPoint、MultiLineStringMultiPolygon。

    HQE

    ST_RemovePoint

    ST_RemovePoint(geom, index)

    GEOMETRY

    ST_RemovePoint返回一个线串几何体,该几何体已删除输入几何体在索引位置的点。索引是从零开始的。结果的空间参考系统标识符 (SRID) 与输入几何体的相同。

    HQE

    ST_Reverse

    ST_Reverse(geom)

    GEOMETRY

    ST_Reverse可反转线性和面积几何的折点顺序。对于点或多点几何,将返回原始几何的副本。对于几何体集合,ST_Reverse将反转集合中每个几何体的折点顺序。

    HQE

    ST_SetPoint

    ST_SetPoint(geom1, index, geom2)

    GEOMETRY

    将输入线串中index指定位置的折点替换为geom2的坐标,并返回替换后的线串。

    HQE

  • Geometry Validation函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_IsValid

    ST_IsValid(geom)

    BOOLEAN

    如果输入几何体有效,则ST_IsValid返回true。

    说明

    通过PQE支持。

    PQE

  • Spatial Reference System函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_SetSRID

    ST_SetSRID(geom, srid)

    GEOMETRY

    ST_SetSRID返回一个与输入几何体相同的几何体,只不过使用空间参考系统标识符(SRID)的输入值进行了更新。

    HQE

    ST_SRID

    ST_SRID(geom)

    INTEGER

    ST_SRID返回输入几何体的空间参考系统标识符(SRID)。

    HQE

  • Geometry Input函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_GeomFromText

    ST_GeomFromText(wkt_string [, srid])

    GEOMETRY。

    ST_GeomFromText从输入几何体的已知文本(WKT)表示形式构造几何体对象。

    说明

    通过PQE支持。

    PQE

  • Geometry Output函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_AsBinary

    ST_AsBinary(geom)

    BYTEA

    ST_AsBinary 使用 ASCII 十六进制字符(0—9,A—F)返回输入几何体的十六进制已知二进制 (WKB) 表示形式。

    HQE

    ST_AsEWKB

    ST_AsEWKB(geom)

    BYTEA

    ST_AsEWKB 使用 ASCII 十六进制字符(0—9,A—F)返回输入几何体的扩展的已知二进制 (EWKB) 表示形式。

    HQE

    ST_AsEWKT

    ST_AsEWKT(geom)

    TEXT

    ST_AsEWKT 返回输入几何体的扩展的已知文本 (EWKT) 表示形式。

    HQE

    ST_AsGeoJSON

    ST_AsGeoJSON(geom [, maxdecimaldigits])

    TEXT

    ST_AsGeoJSON 返回输入几何体的 GeoJSON 表示形式。有关 GeoJSON 的更多信息,请参阅 Wikipedia 中的 GeoJSON。

    HQE

    ST_AsText

    ST_AsText(geom [, precision])

    TEXT

    ST_AsText 返回输入几何体的已知文本 (WKT) 表示形式。

    HQE

  • Spatial Relationships函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_Contains

    ST_Contains(geom1, geom2)

    BOOLEAN

    如果第一个输入几何体包含第二个输入几何体,则 ST_Contains 返回 true。如果 B 中的每个点均为 A 中的一个点,并且其内部有非空相交区域,则几何体 A 包含几何体 B。ST_Contains(A, B) 与 ST_Within(B, A) 等效。

    说明

    通过PQE支持。

    PQE

    ST_ContainsProperly

    ST_ContainsProperly(geom1, geom2)

    BOOLEAN

    如果两个输入几何都是非空的,并且第二个几何的所有点都是第一个几何的内部点,则 ST_ContainsProperly 返回 true。

    说明

    通过PQE支持。

    PQE

    ST_CoveredBy

    ST_CoveredBy(geom1, geom2)

    BOOLEAN

    如果第一个输入几何体被第二个输入几何体覆盖,则 ST_CoveredBy 返回 true。如果几何体 A 和几何体 B 都是非空的,并且 A 中的每个点均为 B 中的一个点,则前者被后者覆盖。ST_CoveredBy(A, B) 与 ST_Covers(B, A) 等效。

    HQE

    ST_Covers

    ST_Covers(geom1, geom2)

    BOOLEAN

    如果第一个输入几何体被第二个输入几何体覆盖,则 ST_Covers 返回 true。如果几何体 A 和几何体 B 都是非空的,并且 B 中的每个点均为 A 中的一个点,则前者覆盖了后者。ST_Covers(A, B) 与 ST_CoveredBy(B, A) 等效。

    说明

    通过PQE支持。

    PQE

    ST_Crosses

    ST_Crosses(geom1, geom2)

    BOOLEAN

    如果两个输入几何体相互交叉,则 ST_Crosses 返回 true。

    HQE

    ST_Disjoint

    ST_Disjoint(geom1, geom2)

    BOOLEAN

    如果两个输入几何体没有共同点,则 ST_Disjoint 返回 true。

    HQE

    ST_DWithin

    ST_DWithin(geom1, geom2, threshold)

    BOOLEAN

    如果两个输入几何体值之间的欧氏距离不大于阈值,则 ST_DWithin 返回 true。

    说明

    通过PQE支持。

    PQE

    ST_DWithin_S2

    ST_DWithin_S2(x1, y1, x2, y2, threshold)

    BOOLEAN

    如果两个地理位置之间的球面距离不大于阈值threshold(单位:米),则ST_DWithin_S2返回true

    入参依次为位置1的经度和纬度、位置2的经度和纬度、距离阈值。

    说明

    Hologres V2.0.8版本支持,暂不支持常量查询。

    HQE

    ST_Equals

    ST_Equals(geom1, geom2)

    BOOLEAN

    如果输入几何体在几何上相等,则 ST_Equals 返回 true。如果几何体具有相等的点集且其内部具有非空相交区域,则将几何体视为在几何上相等。

    HQE

    ST_Intersects

    ST_Intersects(geom1, geom2)

    BOOLEAN

    如果两个输入几何体至少有一个共同点,则 ST_Intersects 返回 true。

    说明

    通过PQE支持。

    PQE

    ST_Touches

    ST_Touches(geom1, geom2)

    BOOLEAN

    如果两个输入几何体接触,则 ST_Touches 返回 true。如果两个几何体是非空的、相交并且没有共同的内部点,则它们是接触的。

    HQE

    ST_Within

    ST_Within(geom1, geom2)

    BOOLEAN

    如果第一个输入几何体在第二个输入几何体中,则 ST_Within 返回 true。例如,如果几何体 A 中的每个点均为几何体 B 中的一个点,并且其内部有非空相交区域,则几何体 A 在几何体 B 中。ST_Within(A, B) 与 ST_Contains(B, A) 等效。

    说明

    通过PQE支持。

    PQE

  • Measurement函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_Angle

    ST_Angle(geom1, geom2, geom3 [, geom4])

    DOUBLE PRECISION

    ST_Angle返回顺时针方向测量的点之间的角度,返回值以弧度为单位,取值范围为[0, 2π)。具体规则如下:

    • 如果输入三个点,则测量P1P2P3三个点顺时针组成的角度。

    • 如果输入四个点,则测量有向线P1P2P3P4顺时针形成的角度。如果输入为两条线平行(即,P1等于P2,或P3等于P4),则返回 null。

    HQE

    ST_Area

    ST_Area(geom)

    DOUBLE PRECISION

    ST_Area 返回输入几何体的笛卡尔面积。面积单位与用于表示输入几何体坐标的单位相同。对于点、线串、多点和多线串,此函数返回 0。对于几何体集合,它返回集合中几何体的面积之和。

    HQE

    ST_Azimuth

    ST_Azimuth(point1, point2)

    DOUBLE PRECISION

    ST_Azimuth返回两个输入点的基于北向的笛卡尔方位。

    HQE

    ST_Distance

    ST_Distance(geom1, geom2)

    DOUBLE PRECISION

    ST_Distance返回两个输入几何体之间的笛卡尔距离。距离单位与用于表示输入几何体坐标的单位相同。如需计算球面距离(单位:米),请使用ST_Distance_Sphere_S2,该函数的入参为两个位置的经纬度数值而非几何体。

    HQE

    ST_Distance_Sphere_S2

    ST_Distance_Sphere_S2(x1, y1, x2, y2)

    DOUBLE PRECISION

    ST_Distance_Sphere_S2返回两个地理位置的球面距离(单位:米)。

    入参依次为位置1的经度和纬度、位置2的经度和纬度。经度范围是[-180度, +180度],纬度范围是[-90度, +90度]。

    说明

    Hologres V2.0.8版本支持,暂不支持常量查询。

    HQE

    ST_Length

    ST_Length(geom)

    DOUBLE PRECISION

    ST_Length返回输入线性几何体的笛卡尔长度。长度单位与用于表示输入几何体坐标的单位相同。对于点、多点和平面几何体,此函数返回零 (0)。当输入为几何体集合时,此函数返回集合中的几何体长度之和。

    HQE

    ST_Perimeter

    ST_Perimeter(geom)

    DOUBLE PRECISION

    ST_Perimeter返回输入平面几何体的笛卡尔周长(边界长度)。周长单位与用于表示输入几何体坐标的单位相同。对于点、多点和线性几何体,此函数返回零 (0)。当输入为几何体集合时,此函数返回集合中的几何体周长之和。

    HQE

  • Overlay函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_Intersection

    ST_Intersection(geom1, geom2)

    GEOMETRY。

    返回几何之间的交集。

    HQE

  • Geometry Processing函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_Buffer

    ST_Buffer(geom, radius)

    与输入类型一致:geometry入参返回GEOMETRY,geography入参返回GEOGRAPHY。

    返回与输入几何体的距离不超过radius的所有点构成的几何体,即输入几何体的缓冲区。

    说明

    通过PQE支持。

    PQE

    ST_ConvexHull

    ST_ConvexHull(geom)

    GEOMETRY

    ST_ConvexHull返回一个几何,该几何表示输入几何中包含的非空点的凸包。

    HQE

    ST_Simplify

    ST_Simplify(geom, tolerance)

    GEOMETRY

    ST_Simplify中使用带有给定容差的 Ramer-Douglas-Peucker 算法返回输入几何的简化副本。输入几何的拓扑可能不会保留。有关该算法的详细信息,请参阅拉默-道格拉斯-普克算法在维基百科。

    HQE

  • Bounding Box函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_XMax

    ST_XMax(geom)

    DOUBLE PRECISION

    返回输入几何体外包框的X坐标最大值。该函数的入参类型为box3d,传入geometry时会自动隐式转换。

    说明

    通过PQE支持。

    PQE

    ST_XMin

    ST_XMin(geom)

    DOUBLE PRECISION

    返回输入几何体外包框的X坐标最小值。该函数的入参类型为box3d,传入geometry时会自动隐式转换。

    说明

    通过PQE支持。

    PQE

    ST_YMax

    ST_YMax(geom)

    DOUBLE PRECISION

    返回输入几何体外包框的Y坐标最大值。该函数的入参类型为box3d,传入geometry时会自动隐式转换。

    说明

    通过PQE支持。

    PQE

    ST_YMin

    ST_YMin(geom)

    DOUBLE PRECISION

    返回输入几何体外包框的Y坐标最小值。该函数的入参类型为box3d,传入geometry时会自动隐式转换。

    说明

    通过PQE支持。

    PQE

  • Linear Referencing函数

    函数

    函数语法

    返回类型

    说明

    支持的引擎

    ST_LineInterpolatePoint

    ST_LineInterpolatePoint(geom, fraction)

    子类型POINTGEOMETRY。

    ST_LineInterpolatePoint为插值点,即返回一个距离线起点为小数距离的点。

    HQE

空间函数最佳实践

阿里云为您提供了空间函数使用方法的最佳实践,详情请参见使用空间函数查询数据方法