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
  1. ST_asText(GEOMETRY) -> VARCHAR

将Geometry数据转成WKT格式的字符串数据。

示例:

  1. select ST_asText(ST_LineFromText('LINESTRING (0 0, 1 1, 1 2)'));
  2. +----------------------------+
  3. | _col0 |
  4. +----------------------------+
  5. | LINESTRING (0 0, 1 1, 1 2) |
  6. +----------------------------+
  • ST_LineFromText
  1. ST_LineFromText(VARCHAR) -> GEOMETRY

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

示例:

  1. select ST_asText(ST_LineFromText('LINESTRING (0 0, 1 1, 1 2)'));
  2. +----------------------------+
  3. | _col0 |
  4. +----------------------------+
  5. | LINESTRING (0 0, 1 1, 1 2) |
  6. +----------------------------+
  • ST_Point
  1. ST_Point(DOUBLE, DOUBLE) -> GEOMETRY

从坐标系的坐标值(X, Y),生成对应的Point的Geometry数据。

示例:

  1. select ST_asText(ST_Point(30.2741500000,120.1551500000));
  2. +----------------------------+
  3. | _col0 |
  4. +----------------------------+
  5. | POINT (30.27415 120.15515) |
  6. +----------------------------+
  • ST_Polygon
  1. ST_Polygon(VARCHAR) -> GEOMETRY

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

示例:

  1. 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))'));
  2. +----------------------------------------------------------------+
  3. | _col0 |
  4. +----------------------------------------------------------------+
  5. | POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 1 2, 2 2, 2 1, 1 1)) |
  6. +----------------------------------------------------------------+
  • ST_Area
  1. ST_Area(Geometry) -> DOUBLE

返回面或多面的面积。对于点、线,返回0.0。对于GeometryCollection,返回所有单个面积的和。

示例:

  1. 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))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 15.0 |
  6. +-------+
  7. 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)))'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 16.0 |
  12. +-------+
  • ST_GeometryFromText
  1. ST_GeometryFromText(VARCHAR) -> GEOMETRY

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

  • ST_Buffer
  1. ST_Buffer(GEOMETRY, DOUBLE) -> GEOMETRY

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

  • ST_Centroid
  1. ST_Centroid(GEOMETRY) -> GEOMETRY

获取几何对象的中心点。

示例:

  1. 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)))')));
  2. +-----------------------+
  3. | _col0 |
  4. +-----------------------+
  5. | POINT (1.8125 1.8125) |
  6. +-----------------------+
  7. select ST_asText(ST_Centroid(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));
  8. +---------------+
  9. | _col0 |
  10. +---------------+
  11. | POINT (0.5 1) |
  12. +---------------+
  13. select ST_asText(ST_Centroid(ST_GeometryFromText('POINT (0.5 1)')));
  14. +---------------+
  15. | _col0 |
  16. +---------------+
  17. | POINT (0.5 1) |
  18. +---------------+
  19. 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))')));
  20. +---------------------------------------------+
  21. | _col0 |
  22. +---------------------------------------------+
  23. | POINT (2.033333333333333 2.033333333333333) |
  24. +---------------------------------------------+
  • ST_CoordDim
  1. ST_CoordDim(GEOMETRY) -> BIGINT

返回几何对象的坐标值维度。

示例:

  1. 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))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 2 |
  6. +-------+
  7. 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)))'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 2 |
  12. +-------+
  13. select st_coorddim(st_geometryfromtext('point Z (60.567222 -140.404 5959)'));
  14. +-------+
  15. | _col0 |
  16. +-------+
  17. | 3 |
  18. +-------+
  19. select st_coorddim(st_geometryfromtext('point M (60.567222 -140.404 5250)'));
  20. +-------+
  21. | _col0 |
  22. +-------+
  23. | 3 |
  24. +-------+
  25. select st_coorddim(st_geometryfromtext('point ZM (60.567222 -140.404 5959 5250)'));
  26. +-------+
  27. | _col0 |
  28. +-------+
  29. | 4 |
  30. +-------+
  • ST_Dimension
  1. ST_Dimension(GEOMETRY) -> BIGINT

用于返回几何对象的维度。在这种情况下,维度是指长度和宽度。例如,点既没有长度也没有宽度,所以其维度为 0;而线只有长度却没有宽度,因此其维度为 1。

示例:

  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)))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 2 |
  6. +-------+
  • ST_IsClosed
  1. ST_IsClosed(GEOMETRY) -> BOOLEAN

判断Line或者MultiLine是否闭合。

示例:

  1. select ST_IsClosed(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 0 |
  6. +-------+
  7. select ST_IsClosed(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 1 |
  12. +-------+
  13. select ST_IsClosed(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  14. +-------+
  15. | _col0 |
  16. +-------+
  17. | 0 |
  18. +-------+
  • ST_IsEmpty
  1. ST_IsEmpty(GEOMETRY) -> BOOLEAN

判断几何对象是否为空。

示例:

  1. select ST_IsEmpty(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 0 |
  6. +-------+
  7. select ST_IsEmpty(null);
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | NULL |
  12. +-------+
  13. SELECT ST_IsEmpty(ST_GeometryFromText('GEOMETRYCOLLECTION EMPTY'));
  14. +-------+
  15. | _col0 |
  16. +-------+
  17. | 1 |
  18. +-------+
  19. SELECT ST_IsEmpty(ST_GeometryFromText('POLYGON EMPTY'));
  20. +-------+
  21. | _col0 |
  22. +-------+
  23. | 1 |
  24. +-------+
  • ST_Length
  1. ST_Length(GEOMETRY) -> DOUBLE

计算Line或者MultiLine的长度。

示例:

  1. SELECT ST_Length(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));
  2. +-------------------+
  3. | _col0 |
  4. +-------------------+
  5. | 4.650281539872885 |
  6. +-------------------+
  7. SELECT ST_Length(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  8. +-------------------+
  9. | _col0 |
  10. +-------------------+
  11. | 6.656854249492381 |
  12. +-------------------+
  • ST_XMax
  1. ST_XMax(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最大X坐标值。

示例:

  1. SELECT ST_XMax(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 5.0 |
  6. +-------+
  7. SELECT ST_XMax(ST_GeometryFromText('POINT (0.5 1)'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 0.5 |
  12. +-------+
  • ST_XMin
  1. ST_XMin(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最小X坐标值。

示例:

  1. SELECT ST_XMin(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 0.0 |
  6. +-------+
  7. SELECT ST_XMin(ST_GeometryFromText('POINT (0.5 1)'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 0.5 |
  12. +-------+
  • ST_YMax
  1. ST_YMax(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最大Y坐标值。

示例:

  1. SELECT ST_YMax(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 4.0 |
  6. +-------+
  7. SELECT ST_YMax(ST_GeometryFromText('POINT (0.5 1)'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 1.0 |
  12. +-------+
  • ST_YMin
  1. ST_YMin(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最小Y坐标值。

示例:

  1. SELECT ST_YMin(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 0.0 |
  6. +-------+
  7. SELECT ST_YMin(ST_GeometryFromText('POINT (0.5 1)'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 1.0 |
  12. +-------+
  • ST_NumInteriorRing
  1. ST_NumInteriorRing(GEOMETRY) -> BIGINT

以Polygon作为输入参数,并返回其内部环数。

示例:

  1. 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))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 1 |
  6. +-------+
  • ST_NumPoints
  1. ST_NumPoints(GEOMETRY) -> BIGINT

用于返回几何对象中的点(折点)数。

示例:

  1. 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))'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 8 |
  6. +-------+
  7. SELECT ST_NumPoints(ST_GeometryFromText('POLYGON EMPTY'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 0 |
  12. +-------+
  13. SELECT ST_NumPoints(ST_GeometryFromText('POINT (0.5 1)'));
  14. +-------+
  15. | _col0 |
  16. +-------+
  17. | 1 |
  18. +-------+
  • ST_IsRing
  1. ST_IsRing(GEOMETRY) -> BOOLEAN

以Line作为输入参数,判断是否是环(如Line是闭合的)。

示例:

  1. select ST_IsRing(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 0 |
  6. +-------+
  7. select ST_IsRing(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)'));
  8. +-------+
  9. | _col0 |
  10. +-------+
  11. | 1 |
  12. +-------+
  • ST_StartPoint
  1. ST_StartPoint(GEOMETRY) -> GEOMETRY

用于返回Line的第一个点。

示例:

  1. select ST_asText(ST_StartPoint(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)')));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT (0 0) |
  6. +-------------+
  • ST_EndPoint
  1. ST_EndPoint(GEOMETRY) -> GEOMETRY

用于返回Line的最后一个点。

示例:

  1. select ST_asText(ST_EndPoint(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT (1 2) |
  6. +-------------+
  • ST_X
  1. ST_X(GEOMETRY) -> DOUBLE

返回Point的X坐标。

示例:

  1. select ST_X(ST_GeometryFromText('POINT (0.5 1)'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 0.5 |
  6. +-------+
  • ST_Y
  1. ST_Y(GEOMETRY) -> DOUBLE

返回Point的Y坐标。

示例:

  1. select ST_Y(ST_GeometryFromText('POINT (0.5 1)'));
  2. +-------+
  3. | _col0 |
  4. +-------+
  5. | 1.0 |
  6. +-------+
  • ST_Boundary
  1. ST_Boundary(GEOMETRY) -> GEOMETRY

输入一个几何对象,然后以几何对象形式返回其组合边界。

示例:

  1. select ST_asText(ST_Boundary(ST_GeometryFromText('POINT (0.5 1)')));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT EMPTY |
  6. +-------------+
  7. select ST_asText(ST_Boundary(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));
  8. +---------------------------+
  9. | _col0 |
  10. +---------------------------+
  11. | MULTIPOINT ((0 0), (1 2)) |
  12. +---------------------------+
  13. 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)))')));
  14. +-------------------------------------------------------------------------------------------------------------+
  15. | _col0 |
  16. +-------------------------------------------------------------------------------------------------------------+
  17. | 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)) |
  18. +-------------------------------------------------------------------------------------------------------------+
  • ST_Envelope
  1. ST_Envelope(GEOMETRY) -> GEOMETRY

以多边形的形式返回几何对象的最小边界框。

示例:

  1. 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)))')));
  2. +-------------------------------------------+
  3. | _col0 |
  4. +-------------------------------------------+
  5. | POLYGON ((-2 -2, 4 -2, 4 4, -2 4, -2 -2)) |
  6. +-------------------------------------------+
  • ST_Difference
  1. ST_Difference(GEOMETRY, GEOMETRY) -> GEOMETRY

输入两个几何对象,然后返回表示两个源对象之差的几何对象。

示例:

  1. select ST_asText(ST_Difference(
  2. 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)))'),
  3. 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))')));
  4. +--------------------------------------------------------------------------------------------------------------+
  5. | _col0 |
  6. +--------------------------------------------------------------------------------------------------------------+
  7. | 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))) |
  8. +--------------------------------------------------------------------------------------------------------------+
  9. select ST_asText(ST_Difference(
  10. 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)))'),
  11. 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)))')));
  12. +--------------------+
  13. | _col0 |
  14. +--------------------+
  15. | MULTIPOLYGON EMPTY |
  16. +--------------------+
  • ST_Distance
  1. ST_Distance(GEOMETRY, GEOMETRY) -> DOUBLE

用于返回两个几何对象之间的距离。这一距离是两个几何对象的最近折点之间的距离。

示例:

  1. select ST_Distance(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 0.0 |
  8. +-------+
  9. select ST_Distance(
  10. ST_GeometryFromText('POINT(0 0)'),
  11. ST_GeometryFromText('POINT(1 1)'));
  12. +--------------------+
  13. | _col0 |
  14. +--------------------+
  15. | 1.4142135623730951 |
  16. +--------------------+
  • ST_ExteriorRing
  1. ST_ExteriorRing(GEOMETRY) -> GEOMETRY

以Line形式返回面的外部环。

示例:

  1. 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))')));
  2. +--------------------------------------+
  3. | _col0 |
  4. +--------------------------------------+
  5. | LINESTRING (0 0, 4 0, 4 4, 0 4, 0 0) |
  6. +--------------------------------------+
  • ST_Intersection
  1. ST_Intersection(GEOMETRY, GEOMETRY) -> GEOMETRY

以两个几何对象作为输入参数,然后以二维几何对象的形式返回交集。

示例:

  1. select ST_asText(ST_Intersection(
  2. 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)))'),
  3. 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)))')));
  4. +--------------------------------------------------------------------------------------------------------------+
  5. | _col0 |
  6. +--------------------------------------------------------------------------------------------------------------+
  7. | 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))) |
  8. +--------------------------------------------------------------------------------------------------------------+
  9. select ST_asText(ST_Intersection(
  10. ST_GeometryFromText('POINT(0 0)'),
  11. ST_GeometryFromText('POINT(1 1)')));
  12. +--------------------+
  13. | _col0 |
  14. +--------------------+
  15. | MULTIPOLYGON EMPTY |
  16. +--------------------+
  • ST_SymDifference
  1. ST_SymDifference(GEOMETRY, GEOMETRY) -> GEOMETRY

返回表示两个几何对象间的点集对称差异的几何值对象。

示例:

  1. select ST_asText(ST_SymDifference(
  2. 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)))'),
  3. 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)))')));
  4. +--------------------+
  5. | _col0 |
  6. +--------------------+
  7. | MULTIPOLYGON EMPTY |
  8. +--------------------+
  9. select ST_asText(ST_SymDifference(
  10. ST_GeometryFromText('POINT(0 0)'),
  11. ST_GeometryFromText('POINT(1 1)')));
  12. +---------------------------+
  13. | _col0 |
  14. +---------------------------+
  15. | MULTIPOINT ((0 0), (1 1)) |
  16. +---------------------------+

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

  • ST_Contains
  1. ST_Contains(GEOMETRY, GEOMETRY) -> BOOLEAN

输入两个几何对象,判断第一个对象是否完全包含第二个对象。

示例:

  1. select ST_Contains(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 1 |
  8. +-------+
  9. select ST_Contains(
  10. ST_GeometryFromText('POINT(0 0)'),
  11. ST_GeometryFromText('POINT(1 1)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 0 |
  16. +-------+
  • ST_Crosses
  1. ST_Crosses(GEOMETRY, GEOMETRY) -> BOOLEAN

以两个几何对象作为输入,如果这两个对象的交集生成的几何对象的维度小于两个源对象中的最大维度,则返回 1。交集对象所包含的点必须在两个源几何的内部,并且不等于其中任何一个源对象。否则,返回 0。

示例:

  1. select ST_Crosses(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 0 |
  8. +-------+
  9. select ST_Crosses(
  10. ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 2, 2 0)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 1 |
  16. +-------+
  • ST_Disjoint
  1. ST_Disjoint(GEOMETRY, GEOMETRY) -> BOOLEAN

输入两个几何对象,判断两个几何对象的交集是否为空集。

示例:

  1. select ST_Disjoint(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 0 |
  8. +-------+
  9. select ST_Disjoint(
  10. ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 2, 2 4)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 1 |
  16. +-------+
  • ST_Equals
  1. ST_Equals(GEOMETRY, GEOMETRY) -> BOOLEAN

判断两个几何对象是否完全相同。

示例:

  1. select ST_Equals(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 1 |
  8. +-------+
  9. select ST_Equals(
  10. ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 2, 2 4)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 0 |
  16. +-------+
  • ST_Intersects
  1. ST_Intersects(GEOMETRY, GEOMETRY) -> BOOLEAN

判断两个几何对象的交集是否不生成空集。

示例:

  1. select ST_Intersects(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 1 |
  8. +-------+
  9. select ST_Intersects(
  10. ST_GeometryFromText('LINESTRING(0 0, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 2, 2 4)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 0 |
  16. +-------+
  • ST_Overlaps
  1. ST_Overlaps(GEOMETRY, GEOMETRY) -> BOOLEAN

判断两个几何对象的交集生成的几何对象是否维度相同但不等于任一源对象。

示例:

  1. select ST_Overlaps(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 0 |
  8. +-------+
  9. select ST_Overlaps(
  10. ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 0, 1.5 1.5)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 1 |
  16. +-------+
  • ST_Relate
  1. ST_Relate(GEOMETRY, GEOMETRY, VARCHAR) -> BOOLEAN

比较两个几何对象,判断是否满足“DE-9IM”模式(https://en.wikipedia.org/wiki/DE-9IM)矩阵字符串指定的条件。

示例:

  1. select ST_Relate(
  2. 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)))'),
  3. 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)))'),
  4. '102101FF2');
  5. +-------+
  6. | _col0 |
  7. +-------+
  8. | 0 |
  9. +-------+
  10. select ST_Relate(
  11. ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  12. ST_GeometryFromText('LINESTRING(0 0, 1.5 1.5)'),
  13. '1*1***1**');
  14. +-------+
  15. | _col0 |
  16. +-------+
  17. | 1 |
  18. +-------+
  • ST_Touches
  1. ST_Touches(GEOMETRY, GEOMETRY) -> BOOLEAN

判断两个几何对象的公共点是否都不与两个几何对象的内部相交。

示例:

  1. select ST_Touches(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 0 |
  8. +-------+
  9. select ST_Touches(
  10. ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 0, 1 1)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 1 |
  16. +-------+
  • ST_Within
  1. ST_Within(GEOMETRY, GEOMETRY) -> BOOLEAN

判断第一个几何对象是否完全位于第二个几何对象的范围内。

示例:

  1. select ST_Within(
  2. 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)))'),
  3. 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)))'));
  4. +-------+
  5. | _col0 |
  6. +-------+
  7. | 1 |
  8. +-------+
  9. select ST_Within(
  10. ST_GeometryFromText('LINESTRING(1 1, 2 2)'),
  11. ST_GeometryFromText('LINESTRING(0 0, 1 1)'));
  12. +-------+
  13. | _col0 |
  14. +-------+
  15. | 0 |
  16. +-------+
  • ST_asBinary
  1. ST_asBinary(GEOMETRY) -> VARBINARY

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

  • ST_GeometryFromWKBHexString
  1. ST_GeometryFromWKBHexString(VARCHAR) -> GEOMETRY

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

示例:

  1. select ST_ASTEXT(ST_GeometryFromWKBHexString('000000000140000000000000004010000000000000'));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT (2 4) |
  6. +-------------+
  • ST_pointFromWKBHexString
  1. ST_pointFromWKBHexString(VARCHAR) -> GEOMETRY

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

示例:

  1. select ST_ASTEXT(ST_pointFromWKBHexString('000000000140000000000000004010000000000000'));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT (2 4) |
  6. +-------------+
  • ST_lineFromWKBHexString
  1. ST_lineFromWKBHexString(VARCHAR) -> GEOMETRY

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

  • ST_polyFromWKBHexString
  1. ST_polyFromWKBHexString(VARCHAR) -> GEOMETRY

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

  • ST_MPointFromWKBHexString
  1. ST_MPointFromWKBHexString(VARCHAR) -> GEOMETRY

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

示例:

  1. SELECT ST_asText(ST_MPointFromWKBHexString('0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040'));
  2. +---------------------------+
  3. | _col0 |
  4. +---------------------------+
  5. | MULTIPOINT ((0 0), (1 2)) |
  6. +---------------------------+
  • ST_MLineFromWKBHexString
  1. ST_MLineFromWKBHexString(VARCHAR) -> GEOMETRY

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

  • ST_MPolyFromWKBHexString
  1. ST_MPolyFromWKBHexString(VARCHAR) -> GEOMETRY

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

  • ST_GeometryFromWKB
  1. ST_GeometryFromWKB(VARBINARY) -> GEOMETRY

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

示例:

  1. select ST_ASTEXT(ST_GeometryFromWKB(from_hex('000000000140000000000000004010000000000000')));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT (2 4) |
  6. +-------------+
  • ST_pointFromWKB
  1. ST_pointFromWKB(VARBINARY) -> GEOMETRY

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

示例:

  1. select ST_ASTEXT(ST_pointFromWKB(from_hex('000000000140000000000000004010000000000000')));
  2. +-------------+
  3. | _col0 |
  4. +-------------+
  5. | POINT (2 4) |
  6. +-------------+
  • ST_lineFromWKB
  1. ST_lineFromWKB(VARBINARY) -> GEOMETRY

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

  • ST_polyFromWKB
  1. ST_polyFromWKB(VARBINARY) -> GEOMETRY

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

  • ST_MPointFromWKB
  1. ST_MPointFromWKB(VARBINARY) -> GEOMETRY

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

示例:

  1. SELECT ST_asText(ST_MPointFromWKB(from_hex('0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040')));
  2. +---------------------------+
  3. | _col0 |
  4. +---------------------------+
  5. | MULTIPOINT ((0 0), (1 2)) |
  6. +---------------------------+
  • ST_MLineFromWKB
  1. ST_MLineFromWKB(VARBINARY) -> GEOMETRY

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

  • ST_MPolyFromWKB
  1. ST_MPolyFromWKB(VARBINARY) -> GEOMETRY

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

  • ST_GeometryFromGeoJson
  1. ST_GeometryFromGeoJson(VARCHAR) -> GEOMETRY

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

  • ST_GeometryFromJson
  1. ST_GeometryFromJson(VARCHAR) -> GEOMETRY

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

  • ST_asGeoJson
  1. ST_asGeoJson(GEOMETRY) -> VARCHAR

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

示例:

  1. SELECT ST_asGeoJson(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  2. +-----------------------------------------------------------------------------------------------+
  3. | _col0 |
  4. +-----------------------------------------------------------------------------------------------+
  5. | {"type":"MultiLineString","coordinates":[[[0,0],[1,1],[1,2]],[[2,3],[3,2],[5,4]]],"crs":null} |
  6. +-----------------------------------------------------------------------------------------------+
  • ST_asJson
  1. ST_asJson(GEOMETRY) -> VARCHAR

把几何对象转成ESRI Geometry Object Json格式输出。

示例:

  1. SELECT ST_asJson(ST_GeometryFromText('MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))'));
  2. +-----------------------------------------------------+
  3. | _col0 |
  4. +-----------------------------------------------------+
  5. | {"paths":[[[0,0],[1,1],[1,2]],[[2,3],[3,2],[5,4]]]} |
  6. +-----------------------------------------------------+
  • ST_GeometryFromEsriShape
  1. ST_GeometryFromEsriShape(VARBINARY) -> GEOMETRY

输入ESRI Shape的二进制数据,返回对应的几何对象。

示例:

  1. SELECT california_counties.name,
  2. COUNT(*) cnt
  3. FROM california_counties
  4. CROSS JOIN earthquakes
  5. WHERE ST_CONTAINS (ST_GeometryFromesrishape(california_counties.boundaryshape), ST_POINT(earthquakes.longitude, earthquakes.latitude))
  6. GROUP BY california_counties.name
  7. ORDER BY cnt DESC, california_counties.name;
  8. +-----------------+------+
  9. | name | cnt |
  10. +-----------------+------+
  11. | San Benito | 8 |
  12. | San Bernardino | 7 |
  13. | Riverside | 6 |
  14. | Inyo | 5 |
  15. | Imperial | 3 |
  16. | San Diego | 2 |
  17. | Kern | 1 |
  18. | Kings | 1 |
  19. | Monterey | 1 |
  20. | San Luis Obispo | 1 |
  21. | Santa Clara | 1 |
  22. | Ventura | 1 |
  23. +-----------------+------+
  • UDF_SYS_GEO_IN_CYCLE
  1. UDF_SYS_GEO_IN_CYCLE(longitude, latitude, point, radius) -> BOOLEAN
  2. 第一个参数为经度列名称, 类型FLOAT/DOUBLE
  3. 第二个参数为纬度列名称, 类型FLOAT/DOUBLE
  4. 第三个参数为圆圈中心点的位置,格式=>'经度,维度', =>'120.85979,30.011984'
  5. 第四个参数为圆圈的半径,单位米

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

示例:

  1. SELECT count(*) as cnt FROM earthquakes
  2. WHERE UDF_SYS_GEO_IN_CYCLE(longitude,latitude, '120.85979,30.011984', 5000000000000) = true;
  3. +------+
  4. | cnt |
  5. +------+
  6. | 2858 |
  7. +------+
  • UDF_SYS_GEO_IN_RECTANGLE
  1. UDF_SYS_GEO_IN_RECTANGLE(longitude, latitude, pointA, pointB) -> BOOLEAN
  2. 第一个参数为经度列名称, 类型FLOAT/DOUBLE
  3. 第二个参数为纬度列名称, 类型FLOAT/DOUBLE
  4. 第三个参数为矩形的左下角坐标,格式=>'经度,维度', =>'120.85979,30.011984'
  5. 第四个参数为矩形的右上角坐标,格式=>'经度,维度', =>'120.88450,31.21011'

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

示例:

  1. SELECT count(*) as cnt FROM earthquakes
  2. WHERE UDF_SYS_GEO_IN_RECTANGLE(longitude, latitude, '69.037,36.5759', '142.018,67.8713')=true;
  3. +------+
  4. | cnt |
  5. +------+
  6. | 55 |
  7. +------+
  • UDF_SYS_GEO_DISTANCE
  1. UDF_SYS_GEO_DISTANCE(longitude, latitude, pointA) -> INTEGER
  2. 第一个参数为经度列名称, 类型FLOAT/DOUBLE
  3. 第二个参数为纬度列名称, 类型FLOAT/DOUBLE
  4. 第三个参数为固定坐标点的经纬度,格式=>'经度,维度', =>'120.85979,30.011984'

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

示例:

  1. SELECT count(*) as cnt FROM earthquakes
  2. WHERE UDF_SYS_GEO_DISTANCE(longitude, latitude, '69.037,36.5759') > 10000;
  3. +------+
  4. | cnt |
  5. +------+
  6. | 2857 |
  7. +------+

原文链接
本文为云栖社区原创内容,未经允许不得转载。

Data Lake Analytics的Geospatial分析函数的更多相关文章

  1. Data Lake Analytics + OSS数据文件格式处理大全

    0. 前言 Data Lake Analytics是Serverless化的云上交互式查询分析服务.用户可以使用标准的SQL语句,对存储在OSS.TableStore上的数据无需移动,直接进行查询分析 ...

  2. Data Lake Analytics: 读/写PolarDB的数据

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于PolarDB的支持, PolarDB 是阿里云自研的下一代关系型分布式云原生数据库,100%兼容MySQL,存储容量最高 ...

  3. Data Lake Analytics,大数据的ETL神器!

    0. Data Lake Analytics(简称DLA)介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake. ...

  4. Data Lake Analytics: 使用DataWorks来调度DLA任务

    DataWorks作为阿里云上广受欢迎的大数据开发调度服务,最近加入了对于Data Lake Analytics的支持,意味着所有Data Lake Analytics的客户可以获得任务开发.任务依赖 ...

  5. 使用Data Lake Analytics + OSS分析CSV格式的TPC-H数据集

    0. Data Lake Analytics(DLA)简介 关于Data Lake的概念,更多阅读可以参考:https://en.wikipedia.org/wiki/Data_lake 以及AWS和 ...

  6. Data Lake Analytics账号和权限体系详细介绍

    一.Data Lake Analytics介绍 数据湖(Data Lake)是时下大数据行业热门的概念:https://en.wikipedia.org/wiki/Data_lake.基于数据湖做分析 ...

  7. 如何使用Data Lake Analytics创建分区表

    前言 Data Lake Analytics(后文简称DLA)提供了无服务化的大数据分析服务,帮助用户通过标准的SQL语句直接对存储在OSS.TableStore上的数据进行查询分析. 在关系型数据库 ...

  8. 如何在Data Lake Analytics中使用临时表

    前言 Data Lake Analytics (后文简称DLA)是阿里云重磅推出的一款用于大数据分析的产品,可以对存储在OSS,OTS上的数据进行查询分析.相较于传统的数据分析产品,用户无需将数据重新 ...

  9. 使用Data Lake Analytics读/写RDS数据

    Data Lake Analytics 作为云上数据处理的枢纽,最近加入了对于RDS(目前支持 MySQL , SQLServer ,Postgres 引擎)的支持, 这篇教程带你玩转 DLA 的 R ...

随机推荐

  1. 如何书写一篇能看懂的html和CSS代码

    在书写html和CSS过程中,如果只是想要实现网页的外观和基本功能,那么简单的书写代码就可以满足需求,甚至不需要使用类名或者注释等.但实际上,这么写肯定是不行的,首先对于类同结构的重复书写就是一件很浪 ...

  2. Python_socket_UDP

    zReceiver.py import socket #使用ipv4协议,使用UDP协议传输数据 s=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # ...

  3. angular访问后台服务及监控会话超时的封装

    angular访问后台服务及监控会话超时的封装 angular本身自带访问组件http和httpclient,组件本身都是异步模式访问.本文只列举了对http组件的封装同时也一同处理会话超时监控. 获 ...

  4. springboot数据库连接池使用策略

    springboot官方文档介绍数据库连接池的使用策略如下: Production database connections can also be auto-configured using a p ...

  5. Swift学习字符串、数组、字典

    一.字符串的使用 let wiseWords = "\"I am a handsome\"-boy" var emptyString = "" ...

  6. Idea 的两个快捷键不能用的解决过程

    早上来重启电脑后,Idea 的Ctrl+Alt+V还能用,但中间不知道那个时间点开始就不好用了(中间有启动有道词典查词) 度娘上没找到答案,hot key这种软件被win10提示有病毒,没敢用 然后尝 ...

  7. PuTTY/终端使用复制、粘贴

    Putty鼠标按钮选项 通过鼠标按钮选项可以控制鼠标来进行复制.粘贴操作,选项包括: 1.Windows选项: 2.混合模式(系统默认选项): 3.Xterm模式. 以上是三种模式选项的简单介绍,下面 ...

  8. titanium环境配置

    ###### **工具:** > * [titanium studio](http://www.appcelerator.com/product/) > * [node.js](https ...

  9. python一键刷屏

    #当按键q的时候,自动输入 "大家好!"并回车键发送! from pynput import keyboard from pynput.keyboard import Key, C ...

  10. git fatal: 远程 origin 已经存在。

    不小心将git远程地址配错了,再次配置提示以下错误: fatal: 远程 origin 已经存在. 此时只需要将远程配置删除,重新添加即可: git remote rm origin git remo ...