Data Lake Analytics的Geospatial分析函数
2019独角兽企业重金招聘Python工程师标准>>>
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的对应示例:
WKTWKBPOINT (0 0)010100000000000000000000000000000000000000LINESTRING (0 0, 1 1, 1 2)01020000000300000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040POLYGON ((0 0, 4 0, 4 4, 0 4, 0 0), (1 1, 2 1, 2 2, 1 2, 1 1))01030000000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F000000000000F03F0000000000000040000000000000004000000000000000400000000000000040000000000000F03F000000000000F03F000000000000F03FMULTIPOINT (0 0, 1 2)0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040MULTILINESTRING ((0 0, 1 1, 1 2), (2 3, 3 2, 5 4))01050000000200000001020000000300000000000000000000000000000000000000000000000000F03F000000000000F03F000000000000F03F0000000000000040010200000003000000000000000000004000000000000008400000000000000840000000000000004000000000000014400000000000001040MULTIPOLYGON (((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)))01060000000200000001030000000200000005000000000000000000000000000000000000000000000000001040000000000000000000000000000010400000000000001040000000000000000000000000000010400000000000000000000000000000000005000000000000000000F03F000000000000F03F000000000000F03F0000000000000040000000000000004000000000000000400000000000000040000000000000F03F000000000000F03F000000000000F03F01030000000100000005000000000000000000F0BF000000000000F0BF00000000000000C0000000000000F0BF00000000000000C000000000000000C0000000000000F0BF00000000000000C0000000000000F0BF000000000000F0BFGEOMETRYCOLLECTION (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. 函数列表
NameDescriptionST_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
将Geometry数据转成WKT格式的字符串数据。
示例:
select ST_asText(ST_LineFromText('LINESTRING (0 0, 1 1, 1 2)'));+----------------------------+ | _col0 | +----------------------------+ | LINESTRING (0 0, 1 1, 1 2) | +----------------------------+- ST_LineFromText
输入WKT格式的Line字符串数据,生成Line的Geometry数据。
示例:
select ST_asText(ST_LineFromText('LINESTRING (0 0, 1 1, 1 2)'));+----------------------------+ | _col0 | +----------------------------+ | LINESTRING (0 0, 1 1, 1 2) | +----------------------------+- ST_Point
从坐标系的坐标值(X, Y),生成对应的Point的Geometry数据。
示例:
select ST_asText(ST_Point(30.2741500000,120.1551500000));+----------------------------+ | _col0 | +----------------------------+ | POINT (30.27415 120.15515) | +----------------------------+- ST_Polygon
输入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)) | +----------------------------------------------------------------+- ST_Area
返回面或多面的面积。对于点、线,返回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 | +-------+- ST_GeometryFromText
输入WKT格式的字符串数据,生成Geometry数据。
- ST_Buffer
获取几何对象和距离,然后返回表示围绕源对象的缓冲区的几何对象。
- ST_Centroid
获取几何对象的中心点。
示例:
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) | +---------------------------------------------+- ST_CoordDim
返回几何对象的坐标值维度。
示例:
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 | +-------+- ST_Dimension
用于返回几何对象的维度。在这种情况下,维度是指长度和宽度。例如,点既没有长度也没有宽度,所以其维度为 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 | +-------+- ST_IsClosed
判断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 | +-------+- ST_IsEmpty
判断几何对象是否为空。
示例:
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 | +-------+- ST_Length
计算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 | +-------------------+- ST_XMax
返回几何对象在坐标系中的最大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 | +-------+- ST_XMin
返回几何对象在坐标系中的最小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 | +-------+- ST_YMax
返回几何对象在坐标系中的最大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 | +-------+- ST_YMin
返回几何对象在坐标系中的最小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 | +-------+- ST_NumInteriorRing
以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 | +-------+- ST_NumPoints
用于返回几何对象中的点(折点)数。
示例:
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 | +-------+- ST_IsRing
以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 | +-------+- ST_StartPoint
用于返回Line的第一个点。
示例:
select ST_asText(ST_StartPoint(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2, 0 0)')));+-------------+ | _col0 | +-------------+ | POINT (0 0) | +-------------+- ST_EndPoint
用于返回Line的最后一个点。
示例:
select ST_asText(ST_EndPoint(ST_GeometryFromText('LINESTRING (0 0, 1 1, 1 2)')));+-------------+ | _col0 | +-------------+ | POINT (1 2) | +-------------+- ST_X
返回Point的X坐标。
示例:
select ST_X(ST_GeometryFromText('POINT (0.5 1)'));+-------+ | _col0 | +-------+ | 0.5 | +-------+- ST_Y
返回Point的Y坐标。
示例:
select ST_Y(ST_GeometryFromText('POINT (0.5 1)'));+-------+ | _col0 | +-------+ | 1.0 | +-------+- ST_Boundary
输入一个几何对象,然后以几何对象形式返回其组合边界。
示例:
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)) | +-------------------------------------------------------------------------------------------------------------+- ST_Envelope
以多边形的形式返回几何对象的最小边界框。
示例:
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)) | +-------------------------------------------+- ST_Difference
输入两个几何对象,然后返回表示两个源对象之差的几何对象。
示例:
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 | +--------------------+- ST_Distance
用于返回两个几何对象之间的距离。这一距离是两个几何对象的最近折点之间的距离。
示例:
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 | +--------------------+- ST_ExteriorRing
以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) | +--------------------------------------+- ST_Intersection
以两个几何对象作为输入参数,然后以二维几何对象的形式返回交集。
示例:
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 | +--------------------+- ST_SymDifference
返回表示两个几何对象间的点集对称差异的几何值对象。
示例:
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)) | +---------------------------+下图的阴影部分显示了对称差异的结果。对称差异为包括两个表面的多表面图形:其中一个表面包含位于正方形之内、圆形之外的所有点,另外一个表面包含位于圆形之内、正方形之外的所有点。
- ST_Contains
输入两个几何对象,判断第一个对象是否完全包含第二个对象。
示例:
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 | +-------+- ST_Crosses
以两个几何对象作为输入,如果这两个对象的交集生成的几何对象的维度小于两个源对象中的最大维度,则返回 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 | +-------+- ST_Disjoint
输入两个几何对象,判断两个几何对象的交集是否为空集。
示例:
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 | +-------+- ST_Equals
判断两个几何对象是否完全相同。
示例:
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 | +-------+- ST_Intersects
判断两个几何对象的交集是否不生成空集。
示例:
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 | +-------+- ST_Overlaps
判断两个几何对象的交集生成的几何对象是否维度相同但不等于任一源对象。
示例:
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 | +-------+- ST_Relate
比较两个几何对象,判断是否满足“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 | +-------+- ST_Touches
判断两个几何对象的公共点是否都不与两个几何对象的内部相交。
示例:
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 | +-------+- ST_Within
判断第一个几何对象是否完全位于第二个几何对象的范围内。
示例:
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 | +-------+- ST_asBinary
输入一个几何对象,然后返回其可识别的二进制WKB数据。
- ST_GeometryFromWKBHexString
输入WKB的HEX字符串数据,返回对应的几何对象。
示例:
select ST_ASTEXT(ST_GeometryFromWKBHexString('000000000140000000000000004010000000000000'));+-------------+ | _col0 | +-------------+ | POINT (2 4) | +-------------+- ST_pointFromWKBHexString
输入Point的WKB的HEX字符串数据,返回对应的Point几何对象。
示例:
select ST_ASTEXT(ST_pointFromWKBHexString('000000000140000000000000004010000000000000'));+-------------+ | _col0 | +-------------+ | POINT (2 4) | +-------------+- ST_lineFromWKBHexString
输入Line的WKB的HEX字符串数据,返回对应的Line几何对象。
- ST_polyFromWKBHexString
输入Polygon的WKB的HEX字符串数据,返回对应的Polygon几何对象。
- ST_MPointFromWKBHexString
输入MultiPoint的WKB的HEX字符串数据,返回对应的MultiPoint几何对象。
示例:
SELECT ST_asText(ST_MPointFromWKBHexString('0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040'));+---------------------------+ | _col0 | +---------------------------+ | MULTIPOINT ((0 0), (1 2)) | +---------------------------+- ST_MLineFromWKBHexString
输入MultiLine的WKB的HEX字符串数据,返回对应的MultiLine几何对象。
- ST_MPolyFromWKBHexString
输入MultiPolygon的WKB的HEX字符串数据,返回对应的MultiPolygon几何对象。
- ST_GeometryFromWKB
输入WKB数据,返回对应的几何对象。
示例:
select ST_ASTEXT(ST_GeometryFromWKB(from_hex('000000000140000000000000004010000000000000')));+-------------+ | _col0 | +-------------+ | POINT (2 4) | +-------------+- ST_pointFromWKB
输入Point的WKB数据,返回对应的Point几何对象。
示例:
select ST_ASTEXT(ST_pointFromWKB(from_hex('000000000140000000000000004010000000000000')));+-------------+ | _col0 | +-------------+ | POINT (2 4) | +-------------+- ST_lineFromWKB
输入Line的WKB数据,返回对应的Line几何对象。
- ST_polyFromWKB
输入Polygon的WKB数据,返回对应的Polygon几何对象。
- ST_MPointFromWKB
输入MultiPoint的WKB数据,返回对应的MultiPoint几何对象。
示例:
SELECT ST_asText(ST_MPointFromWKB(from_hex('0104000000020000000101000000000000000000000000000000000000000101000000000000000000F03F0000000000000040')));+---------------------------+ | _col0 | +---------------------------+ | MULTIPOINT ((0 0), (1 2)) | +---------------------------+- ST_MLineFromWKB
输入MultiLine的WKB数据,返回对应的MultiLine几何对象。
- ST_MPolyFromWKB
输入MultiPolygon的WKB数据,返回对应的MultiPolygon几何对象。
- ST_GeometryFromGeoJson
输入GeoJson的字符串数据,返回对应的几何对象。
- ST_GeometryFromJson
输入ESRI Geometry Object Json的字符串数据,返回对应的几何对象。
- ST_asGeoJson
把几何对象转成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} | +-----------------------------------------------------------------------------------------------+- ST_asJson
把几何对象转成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]]]} | +-----------------------------------------------------+- ST_GeometryFromEsriShape
输入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 | +-----------------+------+- UDF_SYS_GEO_IN_CYCLE
判断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 | +------+- UDF_SYS_GEO_IN_RECTANGLE
判断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 | +------+- UDF_SYS_GEO_DISTANCE
求longitude、latitude的点和pointA点的距离,单位:米。
示例:
SELECT count(*) as cnt FROM earthquakes WHERE UDF_SYS_GEO_DISTANCE(longitude, latitude, '69.037,36.5759') > 10000;+------+ | cnt | +------+ | 2857 | +------+
原文链接
本文为云栖社区原创内容,未经允许不得转载。
转载于:https://my.oschina.net/u/3889140/blog/3013117
总结
以上是生活随笔为你收集整理的Data Lake Analytics的Geospatial分析函数的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: css禁止点击事件
- 下一篇: OpenJ_Bailian 4148 生