Data Lake Analytics的Geospatial分析函数

简介: 0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial Consortium’s (OGC) OpenGIS规范,支持的常用数据格式包括: WKT WKB GeoJson ESRI Geometry Object Json ESRI Shape DLA采用4326坐标系标准,EPSG 4326使用经纬度坐标,属于地理坐标系。

0. 简介

为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial Consortium’s (OGC) OpenGIS规范,支持的常用数据格式包括:

  • WKT
  • WKB
  • GeoJson
  • ESRI Geometry Object Json
  • ESRI Shape

DLA采用4326坐标系标准,EPSG 4326使用经纬度坐标,属于地理坐标系。GPS采用的就是这个坐标系。

1. WKT数据

详细描述:
https://en.wikipedia.org/wiki/Well-known_text
http://www.opengeospatial.org/standards/wkt-crs

支持类似如下的WKT相关字符串。

  • POINT (0 0)
  • LINESTRING (0 0, 1 1, 1 2)
  • 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))

2. WKB数据

详细描述:https://en.wikipedia.org/wiki/Well-known_text#Well-known_binary

上述WKT数据和WKB的对应示例:

WKT WKB
POINT (0 0) 010100000000000000000000000000000000000000
LINESTRING (0 0, 1 1, 1 2) 01020000000300000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040
POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 2 1, 2 2, 1 2, 1 1)) 01030000000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F000000000000F03F0000000000000040000000000000004000000000000000400000000000000040000000000000F03F000000000000F03F000000000000F03F
MULTIPOINT (0 0, 1 2) 0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040
MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4)) 01050000000200000001020000000300000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040010200000003000000000000000000004000000000000008400000000000000840000000000000004000000000000014400000000000001040
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))) 01060000000200000001030000000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F000000000000F03F0000000000000040000000000000004000000000000000400000000000000040000000000000F03F000000000000F03F000000000000F03F01030000000100000005000000000000000000F0BF000000000000F0BF00000000000000C0000000000000F0BF00000000000000C000000000000000C0000000000000F0BF00000000000000C0000000000000F0BF000000000000F0BF
GEOMETRYCOLLECTION (POINT (2 3), LINESTRING (2 3, 3 4)) 0107000000020000000101000000000000000000004000000000000008400102000000020000000000000000000040000000000000084000000000000008400000000000001040

3. GeoJson数据

GeoJson的详细描述:http://geojson.org/

4. ESRI Geometry Object Json数据

规范说明:http://resources.esri.com/help/9.3/arcgisserver/apis/REST/geometry.html

5. ESRI Shape二进制数据

规范说明:http://www.esri.com/LIBRARY/WHITEPAPERS/PDFS/SHAPEFILE.PDF

6. 函数列表

Name Description
ST_asText 将Geometry数据转成WKT格式的字符串数据。
ST_LineFromText 输入WKT格式的Line字符串数据,生成Line的Geometry数据。
ST_Point 从坐标系的坐标值(X, Y),生成对应的Point的Geometry数据。
ST_Polygon 输入WKT格式的Polygon字符串数据,生成Polygon的Geometry数据。
ST_Area 返回面或多面的面积。对于点、线,返回0.0。对于GeometryCollection,返回所有单个面积的和。
ST_GeometryFromText 输入WKT格式的字符串数据,生成Geometry数据。
ST_Buffer 获取几何对象和距离,然后返回表示围绕源对象的缓冲区的几何对象。
ST_Centroid 获取几何对象的中心点。
ST_CoordDim 返回几何对象的坐标值维度。
ST_Dimension 用于返回几何对象的维度。在这种情况下,维度是指长度和宽度。例如,点既没有长度也没有宽度,所以其维度为 0;而线只有长度却没有宽度,因此其维度为 1。
ST_IsClosed 判断Line或者MultiLine是否闭合。
ST_IsEmpty 判断几何对象是否为空。
ST_Length 计算Line或者MultiLine的长度。
ST_XMax 返回几何对象在坐标系中的最大X坐标值。
ST_XMin 返回几何对象在坐标系中的最小X坐标值。
ST_YMax 返回几何对象在坐标系中的最大Y坐标值。
ST_YMin 返回几何对象在坐标系中的最小Y坐标值。
ST_NumInteriorRing 以Polygon作为输入参数,并返回其内部环数。
ST_NumPoints 用于返回几何对象中的点(折点)数。
ST_IsRing 以Line作为输入参数,判断是否是环(如Line是闭合的)。
ST_StartPoint 用于返回Line的第一个点。
ST_EndPoint 用于返回Line的最后一个点。
ST_X 返回Point的X坐标。
ST_Y 返回Point的Y坐标。
ST_Boundary 输入一个几何对象,然后以几何对象形式返回其组合边界。
ST_Envelope 以多边形的形式返回几何对象的最小边界框。
ST_Difference 输入两个几何对象,然后返回表示两个源对象之差的几何对象。
ST_Distance 用于返回两个几何对象之间的距离。这一距离是两个几何对象的最近折点之间的距离。
ST_ExteriorRing 以Line形式返回面的外部环。
ST_Intersection 以两个几何对象作为输入参数,然后以二维几何对象的形式返回交集。
ST_SymDifference 返回表示两个几何对象间的点集对称差异的几何值对象。
ST_Contains 输入两个几何对象,判断第一个对象是否完全包含第二个对象。
ST_Crosses 以两个几何对象作为输入,如果这两个对象的交集生成的几何对象的维度小于两个源对象中的最大维度,则返回 1。交集对象所包含的点必须在两个源几何的内部,并且不等于其中任何一个源对象。否则,返回 0。
ST_Disjoint 输入两个几何对象,判断两个几何对象的交集是否为空集。
ST_Equals 判断两个几何对象是否完全相同。
ST_Intersects 判断两个几何对象的交集是否不生成空集。
ST_Overlaps 判断两个几何对象的交集生成的几何对象是否维度相同但不等于任一源对象。
ST_Relate 比较两个几何对象,判断是否满足“DE-9IM”模式(https://en.wikipedia.org/wiki/DE-9IM)矩阵字符串指定的条件。
ST_Touches 判断两个几何对象的公共点是否都不与两个几何对象的内部相交。
ST_Within 判断第一个几何对象是否完全位于第二个几何对象的范围内。
ST_asBinary 输入一个几何对象,然后返回其可识别的二进制WKB数据。
ST_GeometryFromWKBHexString 输入WKB的HEX字符串数据,返回对应的几何对象。
ST_pointFromWKBHexString 输入Point的WKB的HEX字符串数据,返回对应的Point几何对象。
ST_lineFromWKBHexString 输入Line的WKB的HEX字符串数据,返回对应的Line几何对象。
ST_polyFromWKBHexString 输入Polygon的WKB的HEX字符串数据,返回对应的Polygon几何对象。
ST_MPointFromWKBHexString 输入MultiPoint的WKB的HEX字符串数据,返回对应的MultiPoint几何对象。
ST_MLineFromWKBHexString 输入MultiLine的WKB的HEX字符串数据,返回对应的MultiLine几何对象。
ST_MPolyFromWKBHexString 输入MultiPolygon的WKB的HEX字符串数据,返回对应的MultiPolygon几何对象。
ST_GeometryFromWKB 输入WKB数据,返回对应的几何对象。
ST_pointFromWKB 输入Point的WKB数据,返回对应的Point几何对象。
ST_lineFromWKB 输入Line的WKB数据,返回对应的Line几何对象。
ST_polyFromWKB 输入Polygon的WKB数据,返回对应的Polygon几何对象。
ST_MPointFromWKB 输入MultiPoint的WKB数据,返回对应的MultiPoint几何对象。
ST_MLineFromWKB 输入MultiLine的WKB数据,返回对应的MultiLine几何对象。
ST_MPolyFromWKB 输入MultiPolygon的WKB数据,返回对应的MultiPolygon几何对象。
ST_GeometryFromGeoJson 输入GeoJson的字符串数据,返回对应的几何对象。
ST_GeometryFromJson 输入ESRI Geometry Object Json的字符串数据,返回对应的几何对象。
ST_asGeoJson 把几何对象转成GeoJson格式输出。
ST_asJson 把几何对象转成ESRI Geometry Object Json格式输出。
ST_GeometryFromEsriShape 输入ESRI Shape的二进制数据,返回对应的几何对象。
UDF_SYS_GEO_IN_CYCLE 仅适用于北半球:做基于地理位置的经纬度画圈
UDF_SYS_GEO_IN_RECTANGLE 仅适用于北半球:用于做基于地理位置的经纬度画矩形
UDF_SYS_GEO_DISTANCE 仅适用于北半球:用作一个经纬度列和一个固定的坐标点的距离计算

7. 函数定义与示例

  • ST_asText
    ST_asText(GEOMETRY) -> VARCHAR
    
    AI 代码解读
    将Geometry数据转成WKT格式的字符串数据。

示例:

select ST_asText(ST_LineFromText('LINESTRING (0 0, 1 1, 1 2)'));

+----------------------------+
| _col0                      |
+----------------------------+
| LINESTRING (0 0, 1 1, 1 2) |
+----------------------------+
AI 代码解读
  • ST_LineFromText
    ST_LineFromText(VARCHAR) -> GEOMETRY
    
    AI 代码解读
    输入WKT格式的Line字符串数据,生成Line的Geometry数据。

示例:

select ST_asText(ST_LineFromText('LINESTRING (0 0, 1 1, 1 2)'));

+----------------------------+
| _col0                      |
+----------------------------+
| LINESTRING (0 0, 1 1, 1 2) |
+----------------------------+
AI 代码解读
  • ST_Point
    ST_Point(DOUBLE, DOUBLE) -> GEOMETRY
    
    AI 代码解读
    从坐标系的坐标值(X, Y),生成对应的Point的Geometry数据。

示例:

select ST_asText(ST_Point(30.2741500000,120.1551500000));

+----------------------------+
| _col0                      |
+----------------------------+
| POINT (30.27415 120.15515) |
+----------------------------+
AI 代码解读
  • ST_Polygon
    ST_Polygon(VARCHAR) -> GEOMETRY
    
    AI 代码解读
    输入WKT格式的Polygon字符串数据,生成Polygon的Geometry数据。

示例:

select ST_asText(ST_Polygon('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))'));

+----------------------------------------------------------------+
| _col0                                                          |
+----------------------------------------------------------------+
| POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1)) |
+----------------------------------------------------------------+
AI 代码解读
  • ST_Area
    ST_Area(Geometry) -> DOUBLE
    
    AI 代码解读
    返回面或多面的面积。对于点、线,返回0.0。对于GeometryCollection,返回所有单个面积的和。

示例:

select ST_Area(ST_Polygon('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))'));

+-------+
| _col0 |
+-------+
|  15.0 |
+-------+

select ST_Area(ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|  16.0 |
+-------+
AI 代码解读
  • ST_GeometryFromText

    ST_GeometryFromText(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入WKT格式的字符串数据,生成Geometry数据。

  • ST_Buffer

    ST_Buffer(GEOMETRY, DOUBLE) -> GEOMETRY
    
    AI 代码解读

    获取几何对象和距离,然后返回表示围绕源对象的缓冲区的几何对象。

  • ST_Centroid

    ST_Centroid(GEOMETRY) -> GEOMETRY
    
    AI 代码解读

    获取几何对象的中心点。

示例:

select ST_asText(ST_Centroid(ST_GeometryFromText('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)))')));

+-----------------------+
| _col0                 |
+-----------------------+
| POINT (1.8125 1.8125) |
+-----------------------+

select ST_asText(ST_Centroid(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));

+---------------+
| _col0         |
+---------------+
| POINT (0.5 1) |
+---------------+

select ST_asText(ST_Centroid(ST_GeometryFromText('POINT (0.5 1)')));

+---------------+
| _col0         |
+---------------+
| POINT (0.5 1) |
+---------------+

select ST_asText(ST_Centroid(ST_GeometryFromText('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))')));

+---------------------------------------------+
| _col0                                       |
+---------------------------------------------+
| POINT (2.033333333333333 2.033333333333333) |
+---------------------------------------------+
AI 代码解读
  • ST_CoordDim
    ST_CoordDim(GEOMETRY) -> BIGINT
    
    AI 代码解读
    返回几何对象的坐标值维度。

示例:

select ST_CoordDim(ST_GeometryFromText('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))'));

+-------+
| _col0 |
+-------+
|     2 |
+-------+

select ST_CoordDim(ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     2 |
+-------+

select st_coorddim(st_geometryfromtext('point Z (60.567222 -140.404 5959)'));

+-------+
| _col0 |
+-------+
|     3 |
+-------+

select st_coorddim(st_geometryfromtext('point M (60.567222 -140.404 5250)'));

+-------+
| _col0 |
+-------+
|     3 |
+-------+

select st_coorddim(st_geometryfromtext('point ZM (60.567222 -140.404 5959 5250)'));

+-------+
| _col0 |
+-------+
|     4 |
+-------+
AI 代码解读
  • ST_Dimension
    ST_Dimension(GEOMETRY) -> BIGINT
    
    AI 代码解读
    用于返回几何对象的维度。在这种情况下,维度是指长度和宽度。例如,点既没有长度也没有宽度,所以其维度为 0;而线只有长度却没有宽度,因此其维度为 1。

示例:

select ST_Dimension(ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     2 |
+-------+
AI 代码解读
  • ST_IsClosed
    ST_IsClosed(GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断Line或者MultiLine是否闭合。

示例:

select ST_IsClosed(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_IsClosed(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+

select ST_IsClosed(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+
AI 代码解读
  • ST_IsEmpty
    ST_IsEmpty(GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断几何对象是否为空。

示例:

select ST_IsEmpty(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_IsEmpty(null);

+-------+
| _col0 |
+-------+
|  NULL |
+-------+

SELECT ST_IsEmpty(ST_GeometryFromText('GEOMETRYCOLLECTION EMPTY'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+

SELECT ST_IsEmpty(ST_GeometryFromText('POLYGON EMPTY'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_Length
    ST_Length(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    计算Line或者MultiLine的长度。

示例:

SELECT ST_Length(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));

+-------------------+
| _col0             |
+-------------------+
| 4.650281539872885 |
+-------------------+

SELECT ST_Length(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-------------------+
| _col0             |
+-------------------+
| 6.656854249492381 |
+-------------------+
AI 代码解读
  • ST_XMax
    ST_XMax(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    返回几何对象在坐标系中的最大X坐标值。

示例:

SELECT ST_XMax(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-------+
| _col0 |
+-------+
|   5.0 |
+-------+

SELECT ST_XMax(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|   0.5 |
+-------+
AI 代码解读
  • ST_XMin
    ST_XMin(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    返回几何对象在坐标系中的最小X坐标值。

示例:

SELECT ST_XMin(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-------+
| _col0 |
+-------+
|   0.0 |
+-------+

SELECT ST_XMin(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|   0.5 |
+-------+
AI 代码解读
  • ST_YMax
    ST_YMax(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    返回几何对象在坐标系中的最大Y坐标值。

示例:

SELECT ST_YMax(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-------+
| _col0 |
+-------+
|   4.0 |
+-------+

SELECT ST_YMax(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|   1.0 |
+-------+
AI 代码解读
  • ST_YMin
    ST_YMin(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    返回几何对象在坐标系中的最小Y坐标值。

示例:

SELECT ST_YMin(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-------+
| _col0 |
+-------+
|   0.0 |
+-------+

SELECT ST_YMin(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|   1.0 |
+-------+
AI 代码解读
  • ST_NumInteriorRing
    ST_NumInteriorRing(GEOMETRY) -> BIGINT
    
    AI 代码解读
    以Polygon作为输入参数,并返回其内部环数。

示例:

SELECT ST_NumInteriorRing(ST_GeometryFromText('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_NumPoints
    ST_NumPoints(GEOMETRY) -> BIGINT
    
    AI 代码解读
    用于返回几何对象中的点(折点)数。

示例:

SELECT ST_NumPoints(ST_GeometryFromText('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))'));

+-------+
| _col0 |
+-------+
|     8 |
+-------+

SELECT ST_NumPoints(ST_GeometryFromText('POLYGON EMPTY'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

SELECT ST_NumPoints(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_IsRing
    ST_IsRing(GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    以Line作为输入参数,判断是否是环(如Line是闭合的)。

示例:

select ST_IsRing(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_IsRing(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_StartPoint
    ST_StartPoint(GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    用于返回Line的第一个点。

示例:

select ST_asText(ST_StartPoint(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)')));

+-------------+
| _col0       |
+-------------+
| POINT (0 0) |
+-------------+
AI 代码解读
  • ST_EndPoint
    ST_EndPoint(GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    用于返回Line的最后一个点。

示例:

select ST_asText(ST_EndPoint(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));

+-------------+
| _col0       |
+-------------+
| POINT (1 2) |
+-------------+
AI 代码解读
  • ST_X
    ST_X(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    返回Point的X坐标。

示例:

select ST_X(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|   0.5 |
+-------+
AI 代码解读
  • ST_Y
    ST_Y(GEOMETRY) -> DOUBLE
    
    AI 代码解读
    返回Point的Y坐标。

示例:

select ST_Y(ST_GeometryFromText('POINT (0.5 1)'));

+-------+
| _col0 |
+-------+
|   1.0 |
+-------+
AI 代码解读
  • ST_Boundary
    ST_Boundary(GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    输入一个几何对象,然后以几何对象形式返回其组合边界。

示例:

select ST_asText(ST_Boundary(ST_GeometryFromText('POINT (0.5 1)')));

+-------------+
| _col0       |
+-------------+
| POINT EMPTY |
+-------------+

select ST_asText(ST_Boundary(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));

+---------------------------+
| _col0                     |
+---------------------------+
| MULTIPOINT ((0 0), (1 2)) |
+---------------------------+

select ST_asText(ST_Boundary(ST_GeometryFromText('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)))')));

+-------------------------------------------------------------------------------------------------------------+
| _col0                                                                                                       |
+-------------------------------------------------------------------------------------------------------------+
| MULTILINESTRING ((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1), (-1 -1, -2 -1, -2 -2, -1 -2, -1 -1)) |
+-------------------------------------------------------------------------------------------------------------+
AI 代码解读
  • ST_Envelope
    ST_Envelope(GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    以多边形的形式返回几何对象的最小边界框。

示例:

select ST_asText(ST_Envelope(ST_GeometryFromText('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)))')));

+-------------------------------------------+
| _col0                                     |
+-------------------------------------------+
| POLYGON ((-2 -2, 4 -2, 4 4, -2 4, -2 -2)) |
+-------------------------------------------+
AI 代码解读
  • ST_Difference
    ST_Difference(GEOMETRY, GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    输入两个几何对象,然后返回表示两个源对象之差的几何对象。

示例:

select ST_asText(ST_Difference(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('MULTILINESTRING ((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1), (-1 -1, -2 -1, -2 -2, -1 -2, -1 -1))')));

+--------------------------------------------------------------------------------------------------------------+
| _col0                                                                                                        |
+--------------------------------------------------------------------------------------------------------------+
| MULTIPOLYGON (((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1)), ((-1 -1, -2 -1, -2 -2, -1 -2, -1 -1))) |
+--------------------------------------------------------------------------------------------------------------+

select ST_asText(ST_Difference(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))')));

+--------------------+
| _col0              |
+--------------------+
| MULTIPOLYGON EMPTY |
+--------------------+
AI 代码解读
  • ST_Distance
    ST_Distance(GEOMETRY, GEOMETRY) -> DOUBLE
    
    AI 代码解读
    用于返回两个几何对象之间的距离。这一距离是两个几何对象的最近折点之间的距离。

示例:

select ST_Distance(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|   0.0 |
+-------+

select ST_Distance(
  ST_GeometryFromText('POINT(0 0)'),
  ST_GeometryFromText('POINT(1 1)'));

+--------------------+
| _col0              |
+--------------------+
| 1.4142135623730951 |
+--------------------+
AI 代码解读
  • ST_ExteriorRing
    ST_ExteriorRing(GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    以Line形式返回面的外部环。

示例:

select ST_asText(ST_ExteriorRing(ST_GeometryFromText('POLYGON((0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1))')));

+--------------------------------------+
| _col0                                |
+--------------------------------------+
| LINESTRING (0 0, 4 0, 4 4, 0 4, 0 0) |
+--------------------------------------+
AI 代码解读
  • ST_Intersection
    ST_Intersection(GEOMETRY, GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    以两个几何对象作为输入参数,然后以二维几何对象的形式返回交集。

示例:

select ST_asText(ST_Intersection(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))')));

+--------------------------------------------------------------------------------------------------------------+
| _col0                                                                                                        |
+--------------------------------------------------------------------------------------------------------------+
| MULTIPOLYGON (((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1)), ((-1 -1, -2 -1, -2 -2, -1 -2, -1 -1))) |
+--------------------------------------------------------------------------------------------------------------+

select ST_asText(ST_Intersection(
  ST_GeometryFromText('POINT(0 0)'),
  ST_GeometryFromText('POINT(1 1)')));

+--------------------+
| _col0              |
+--------------------+
| MULTIPOLYGON EMPTY |
+--------------------+
AI 代码解读
  • ST_SymDifference
    ST_SymDifference(GEOMETRY, GEOMETRY) -> GEOMETRY
    
    AI 代码解读
    返回表示两个几何对象间的点集对称差异的几何值对象。

示例:

select ST_asText(ST_SymDifference(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))')));

+--------------------+
| _col0              |
+--------------------+
| MULTIPOLYGON EMPTY |
+--------------------+

select ST_asText(ST_SymDifference(
  ST_GeometryFromText('POINT(0 0)'),
  ST_GeometryFromText('POINT(1 1)')));

+---------------------------+
| _col0                     |
+---------------------------+
| MULTIPOINT ((0 0), (1 1)) |
+---------------------------+
AI 代码解读

下图的阴影部分显示了对称差异的结果。对称差异为包括两个表面的多表面图形:其中一个表面包含位于正方形之内、圆形之外的所有点,另外一个表面包含位于圆形之内、正方形之外的所有点。

image.png | left | 223x166

  • ST_Contains
    ST_Contains(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    输入两个几何对象,判断第一个对象是否完全包含第二个对象。

示例:

select ST_Contains(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+

select ST_Contains(
  ST_GeometryFromText('POINT(0 0)'),
  ST_GeometryFromText('POINT(1 1)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+
AI 代码解读
  • ST_Crosses
    ST_Crosses(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    以两个几何对象作为输入,如果这两个对象的交集生成的几何对象的维度小于两个源对象中的最大维度,则返回 1。交集对象所包含的点必须在两个源几何的内部,并且不等于其中任何一个源对象。否则,返回 0。

示例:

select ST_Crosses(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_Crosses(
  ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 2, 2 0)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_Disjoint
    ST_Disjoint(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    输入两个几何对象,判断两个几何对象的交集是否为空集。

示例:

select ST_Disjoint(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_Disjoint(
  ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 2, 2 4)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_Equals
    ST_Equals(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断两个几何对象是否完全相同。

示例:

select ST_Equals(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+

select ST_Equals(
  ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 2, 2 4)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+
AI 代码解读
  • ST_Intersects
    ST_Intersects(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断两个几何对象的交集是否不生成空集。

示例:

select ST_Intersects(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+

select ST_Intersects(
  ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 2, 2 4)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+
AI 代码解读
  • ST_Overlaps
    ST_Overlaps(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断两个几何对象的交集生成的几何对象是否维度相同但不等于任一源对象。

示例:

select ST_Overlaps(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_Overlaps(
  ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 0, 1.5 1.5)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_Relate
    ST_Relate(GEOMETRY, GEOMETRY, VARCHAR) -> BOOLEAN
    
    AI 代码解读
    比较两个几何对象,判断是否满足“DE-9IM”模式(https://en.wikipedia.org/wiki/DE-9IM)矩阵字符串指定的条件。

示例:

select ST_Relate(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'),
  '102101FF2');

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_Relate(
  ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 0, 1.5 1.5)'),
  '1*1***1**');

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_Touches
    ST_Touches(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断两个几何对象的公共点是否都不与两个几何对象的内部相交。

示例:

select ST_Touches(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+

select ST_Touches(
  ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 0, 1 1)'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+
AI 代码解读
  • ST_Within
    ST_Within(GEOMETRY, GEOMETRY) -> BOOLEAN
    
    AI 代码解读
    判断第一个几何对象是否完全位于第二个几何对象的范围内。

示例:

select ST_Within(
  ST_GeometryFromText('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)))'),
  ST_GeometryFromText('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)))'));

+-------+
| _col0 |
+-------+
|     1 |
+-------+

select ST_Within(
  ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  ST_GeometryFromText('LINESTRING(0 0, 1 1)'));

+-------+
| _col0 |
+-------+
|     0 |
+-------+
AI 代码解读
  • ST_asBinary

    ST_asBinary(GEOMETRY) -> VARBINARY
    
    AI 代码解读

    输入一个几何对象,然后返回其可识别的二进制WKB数据。

  • ST_GeometryFromWKBHexString

    ST_GeometryFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入WKB的HEX字符串数据,返回对应的几何对象。

示例:

select ST_ASTEXT(ST_GeometryFromWKBHexString('000000000140000000000000004010000000000000'));

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
AI 代码解读
  • ST_pointFromWKBHexString
    ST_pointFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读
    输入Point的WKB的HEX字符串数据,返回对应的Point几何对象。

示例:

select ST_ASTEXT(ST_pointFromWKBHexString('000000000140000000000000004010000000000000'));

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
AI 代码解读
  • ST_lineFromWKBHexString

    ST_lineFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入Line的WKB的HEX字符串数据,返回对应的Line几何对象。

  • ST_polyFromWKBHexString

    ST_polyFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入Polygon的WKB的HEX字符串数据,返回对应的Polygon几何对象。

  • ST_MPointFromWKBHexString

    ST_MPointFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入MultiPoint的WKB的HEX字符串数据,返回对应的MultiPoint几何对象。

示例:

SELECT ST_asText(ST_MPointFromWKBHexString('0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040'));

+---------------------------+
| _col0                     |
+---------------------------+
| MULTIPOINT ((0 0), (1 2)) |
+---------------------------+
AI 代码解读
  • ST_MLineFromWKBHexString

    ST_MLineFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入MultiLine的WKB的HEX字符串数据,返回对应的MultiLine几何对象。

  • ST_MPolyFromWKBHexString

    ST_MPolyFromWKBHexString(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入MultiPolygon的WKB的HEX字符串数据,返回对应的MultiPolygon几何对象。

  • ST_GeometryFromWKB

    ST_GeometryFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读

    输入WKB数据,返回对应的几何对象。

示例:

select ST_ASTEXT(ST_GeometryFromWKB(from_hex('000000000140000000000000004010000000000000')));

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
AI 代码解读
  • ST_pointFromWKB
    ST_pointFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读
    输入Point的WKB数据,返回对应的Point几何对象。

示例:

select ST_ASTEXT(ST_pointFromWKB(from_hex('000000000140000000000000004010000000000000')));

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
AI 代码解读
  • ST_lineFromWKB

    ST_lineFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读

    输入Line的WKB数据,返回对应的Line几何对象。

  • ST_polyFromWKB

    ST_polyFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读

    输入Polygon的WKB数据,返回对应的Polygon几何对象。

  • ST_MPointFromWKB

    ST_MPointFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读

    输入MultiPoint的WKB数据,返回对应的MultiPoint几何对象。

示例:

SELECT ST_asText(ST_MPointFromWKB(from_hex('0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040')));

+---------------------------+
| _col0                     |
+---------------------------+
| MULTIPOINT ((0 0), (1 2)) |
+---------------------------+
AI 代码解读
  • ST_MLineFromWKB

    ST_MLineFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读

    输入MultiLine的WKB数据,返回对应的MultiLine几何对象。

  • ST_MPolyFromWKB

    ST_MPolyFromWKB(VARBINARY) -> GEOMETRY
    
    AI 代码解读

    输入MultiPolygon的WKB数据,返回对应的MultiPolygon几何对象。

  • ST_GeometryFromGeoJson

    ST_GeometryFromGeoJson(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入GeoJson的字符串数据,返回对应的几何对象。

  • ST_GeometryFromJson

    ST_GeometryFromJson(VARCHAR) -> GEOMETRY
    
    AI 代码解读

    输入ESRI Geometry Object Json的字符串数据,返回对应的几何对象。

  • ST_asGeoJson

    ST_asGeoJson(GEOMETRY) -> VARCHAR
    
    AI 代码解读

    把几何对象转成GeoJson格式输出。

示例:

SELECT ST_asGeoJson(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-----------------------------------------------------------------------------------------------+
| _col0                                                                                         |
+-----------------------------------------------------------------------------------------------+
| {
  "type":"MultiLineString","coordinates":[[[0,0],[1,1],[1,2]],[[2,3],[3,2],[5,4]]],"crs":null} |
+-----------------------------------------------------------------------------------------------+
AI 代码解读
  • ST_asJson
    ST_asJson(GEOMETRY) -> VARCHAR
    
    AI 代码解读
    把几何对象转成ESRI Geometry Object Json格式输出。

示例:

SELECT ST_asJson(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));

+-----------------------------------------------------+
| _col0                                               |
+-----------------------------------------------------+
| {
  "paths":[[[0,0],[1,1],[1,2]],[[2,3],[3,2],[5,4]]]} |
+-----------------------------------------------------+
AI 代码解读
  • ST_GeometryFromEsriShape
    ST_GeometryFromEsriShape(VARBINARY) -> GEOMETRY
    
    AI 代码解读
    输入ESRI Shape的二进制数据,返回对应的几何对象。

示例:

SELECT california_counties.name,
        COUNT(*) cnt
FROM california_counties
CROSS JOIN earthquakes
WHERE ST_CONTAINS (ST_GeometryFromesrishape(california_counties.boundaryshape), ST_POINT(earthquakes.longitude, earthquakes.latitude))
GROUP BY  california_counties.name
ORDER BY  cnt DESC, california_counties.name;

+-----------------+------+
| name            | cnt  |
+-----------------+------+
| San Benito      |    8 |
| San Bernardino  |    7 |
| Riverside       |    6 |
| Inyo            |    5 |
| Imperial        |    3 |
| San Diego       |    2 |
| Kern            |    1 |
| Kings           |    1 |
| Monterey        |    1 |
| San Luis Obispo |    1 |
| Santa Clara     |    1 |
| Ventura         |    1 |
+-----------------+------+
AI 代码解读
  • UDF_SYS_GEO_IN_CYCLE
UDF_SYS_GEO_IN_CYCLE(longitude, latitude, point, radius) -> BOOLEAN

第一个参数为经度列名称, 类型FLOAT/DOUBLE
第二个参数为纬度列名称, 类型FLOAT/DOUBLE
第三个参数为圆圈中心点的位置,格式=>'经度,维度', =>'120.85979,30.011984'
第四个参数为圆圈的半径,单位米
AI 代码解读

判断longitude、latitude的点是否在以中心点point为圆心,半径为radius的圆内。

示例:

SELECT count(*) as cnt FROM earthquakes 
WHERE UDF_SYS_GEO_IN_CYCLE(longitude,latitude, '120.85979,30.011984', 5000000000000) = true;

+------+
| cnt  |
+------+
| 2858 |
+------+
AI 代码解读
  • UDF_SYS_GEO_IN_RECTANGLE
UDF_SYS_GEO_IN_RECTANGLE(longitude, latitude, pointA, pointB) -> BOOLEAN

第一个参数为经度列名称, 类型FLOAT/DOUBLE
第二个参数为纬度列名称, 类型FLOAT/DOUBLE
第三个参数为矩形的左下角坐标,格式=>'经度,维度', =>'120.85979,30.011984'
第四个参数为矩形的右上角坐标,格式=>'经度,维度', =>'120.88450,31.21011'
AI 代码解读

判断longitude、latitude的点是否在以2个斜角点构成的矩形内

示例:

SELECT count(*) as cnt FROM earthquakes 
WHERE UDF_SYS_GEO_IN_RECTANGLE(longitude, latitude, '69.037,36.5759', '142.018,67.8713')=true;

+------+
| cnt  |
+------+
|   55 |
+------+
AI 代码解读
  • UDF_SYS_GEO_DISTANCE
UDF_SYS_GEO_DISTANCE(longitude, latitude, pointA) -> INTEGER

第一个参数为经度列名称, 类型FLOAT/DOUBLE
第二个参数为纬度列名称, 类型FLOAT/DOUBLE
第三个参数为固定坐标点的经纬度,格式=>'经度,维度', =>'120.85979,30.011984'
AI 代码解读

求longitude、latitude的点和pointA点的距离,单位:米。

示例:

SELECT count(*) as cnt FROM earthquakes 
WHERE UDF_SYS_GEO_DISTANCE(longitude, latitude, '69.037,36.5759') > 10000;

+------+
| cnt  |
+------+
| 2857 |
+------+
AI 代码解读

8. 更多参考

目录
打赏
0
0
0
1
15
分享
相关文章
Paimon 1.0: Unified Lake Format for Data + AI
Paimon 1.0: Unified Lake Format for Data + AI
Paimon 1.0: Unified Lake Format for Data + AI
本文整理自阿里云智能开源湖存储负责人李劲松在Flink Forward Asia 2024上海站主论坛的演讲。Apache Paimon于今年3月成为顶级项目,计划发布1.0版本,目标是Unified Lake Format for Data + AI,解决数据处理与AI应用中的关键问题。Paimon结合Flink打造Streaming Lakehouse解决方案,已在阿里巴巴集团及多个行业中广泛应用。来自淘天、抖音和vivo的嘉宾分享了基于Paimon + Flink技术栈的数据湖实时处理与分析实践案例。内容涵盖大数据从业者面临的痛点、Paimon的发展历程及大厂的应用经验。
568 1
Paimon 1.0: Unified Lake Format for Data + AI
Geospatial
Geospatial是Redis在3.2版本以后增加的地理位置GEO模块,这个模块可以用来实现微信附近的人,在线点餐“附近的餐馆”等位置功能。
580 1
Geospatial
Google Earth Engine(GEE)——使用 GeoPandas 和 Uber 的 H3 空间索引进行快速多边形点分析
Google Earth Engine(GEE)——使用 GeoPandas 和 Uber 的 H3 空间索引进行快速多边形点分析
953 0
Google Earth Engine(GEE)——使用 GeoPandas 和 Uber 的 H3 空间索引进行快速多边形点分析
PostgreSQL 并行计算解说 之21 - parallel partition table wise agg
标签 PostgreSQL , cpu 并行 , smp 并行 , 并行计算 , gpu 并行 , 并行过程支持 背景 PostgreSQL 11 优化器已经支持了非常多场合的并行。简单估计,已支持27余种场景的并行计算。 parallel seq scan
300 0
如何在阿里云上使用Data Lake Analytics分析Table Store数据
数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake。基于数据湖做分析,可以不用做任何ETL、数据搬迁等前置过程,实现跨各种异构数据源进行大数据关联分析,从而极大的节省成本和提升用户体验。
5984 0
如何在阿里云上使用Data Lake Analytics分析Table Store数据
在Data Lake Analytics中使用视图
在Data Lake Analytics中使用视图 1. 概述 在Data Lake Analytics(以下简称DLA)中使用视图(VIEW)功能,可以大大简化对于重复SQL,特别是较为复杂的SQL语句的编写和维护。
1859 0
教程:如何在Data Lake Analytics中使用临时表
前言 Data Lake Analytics (后文简称DLA)是阿里云重磅推出的一款用于大数据分析的产品,可以对存储在OSS,OTS上的数据进行查询分析。相较于传统的数据分析产品,用户无需将数据重新加载至DLA,只需在DLA中创建一张与数据源关联的表,不仅简化了分析过程,还节约了存储成本,是做大数据分析的不二之选。
2169 0
Optimizing Complex Data Distribution in MaxCompute
For a long time, data distribution has been an issue in the field of Big Data processing. Unfortunately, the Big Data processing systems that are popular today do not satisfactorily solve the issue.
1827 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等