Data Lake Analytics的Geospatial分析函数怎么理解

发布时间:2021-12-23 17:42:57 作者:柒染
来源:亿速云 阅读:107

Data Lake Analytics的Geospatial分析函数怎么理解,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

0. 简介

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

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

1. WKT数据

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

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

2. WKB数据

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

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

WKTWKB
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. 函数列表

NameDescription
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(GEOMETRY) -> VARCHAR

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

示例:

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

+----------------------------+
| _col0                      |
+----------------------------+
| LINESTRING (0 0, 1 1, 1 2) |
+----------------------------+
ST_LineFromText(VARCHAR) -> GEOMETRY

输入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(DOUBLE, DOUBLE) -> GEOMETRY

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

示例:

select ST_asText(ST_Point(30.2741500000,120.1551500000));

+----------------------------+
| _col0                      |
+----------------------------+
| POINT (30.27415 120.15515) |
+----------------------------+
ST_Polygon(VARCHAR) -> GEOMETRY

输入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(Geometry) -> DOUBLE

返回面或多面的面积。对于点、线,返回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(VARCHAR) -> GEOMETRY

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

ST_Buffer(GEOMETRY, DOUBLE) -> GEOMETRY

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

ST_Centroid(GEOMETRY) -> GEOMETRY

获取几何对象的中心点。

示例:

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(GEOMETRY) -> BIGINT

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

示例:

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(GEOMETRY) -> BIGINT

用于返回几何对象的维度。在这种情况下,维度是指长度和宽度。例如,点既没有长度也没有宽度,所以其维度为 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(GEOMETRY) -> BOOLEAN

判断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(GEOMETRY) -> BOOLEAN

判断几何对象是否为空。

示例:

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(GEOMETRY) -> DOUBLE

计算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(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最大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(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最小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(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最大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(GEOMETRY) -> DOUBLE

返回几何对象在坐标系中的最小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(GEOMETRY) -> BIGINT

以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(GEOMETRY) -> BIGINT

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

示例:

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(GEOMETRY) -> BOOLEAN

以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(GEOMETRY) -> GEOMETRY

用于返回Line的第一个点。

示例:

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

+-------------+
| _col0       |
+-------------+
| POINT (0 0) |
+-------------+
ST_EndPoint(GEOMETRY) -> GEOMETRY

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

示例:

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

+-------------+
| _col0       |
+-------------+
| POINT (1 2) |
+-------------+
ST_X(GEOMETRY) -> DOUBLE

返回Point的X坐标。

示例:

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

+-------+
| _col0 |
+-------+
|   0.5 |
+-------+
ST_Y(GEOMETRY) -> DOUBLE

返回Point的Y坐标。

示例:

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

+-------+
| _col0 |
+-------+
|   1.0 |
+-------+
ST_Boundary(GEOMETRY) -> GEOMETRY

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

示例:

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(GEOMETRY) -> GEOMETRY

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

示例:

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(GEOMETRY, GEOMETRY) -> GEOMETRY

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

示例:

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(GEOMETRY, GEOMETRY) -> DOUBLE

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

示例:

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(GEOMETRY) -> GEOMETRY

以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(GEOMETRY, GEOMETRY) -> GEOMETRY

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

示例:

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(GEOMETRY, GEOMETRY) -> GEOMETRY

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

示例:

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)) |
+---------------------------+

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

Data Lake Analytics的Geospatial分析函数怎么理解

ST_Contains(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY, GEOMETRY) -> BOOLEAN

以两个几何对象作为输入,如果这两个对象的交集生成的几何对象的维度小于两个源对象中的最大维度,则返回 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(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY, GEOMETRY, VARCHAR) -> BOOLEAN

比较两个几何对象,判断是否满足“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(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY, GEOMETRY) -> BOOLEAN

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

示例:

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(GEOMETRY) -> VARBINARY

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

ST_GeometryFromWKBHexString(VARCHAR) -> GEOMETRY

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

示例:

select ST_ASTEXT(ST_GeometryFromWKBHexString('000000000140000000000000004010000000000000'));

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
ST_pointFromWKBHexString(VARCHAR) -> GEOMETRY

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

示例:

select ST_ASTEXT(ST_pointFromWKBHexString('000000000140000000000000004010000000000000'));

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
ST_lineFromWKBHexString(VARCHAR) -> GEOMETRY

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

ST_polyFromWKBHexString(VARCHAR) -> GEOMETRY

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

ST_MPointFromWKBHexString(VARCHAR) -> GEOMETRY

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

示例:

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

+---------------------------+
| _col0                     |
+---------------------------+
| MULTIPOINT ((0 0), (1 2)) |
+---------------------------+
ST_MLineFromWKBHexString(VARCHAR) -> GEOMETRY

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

ST_MPolyFromWKBHexString(VARCHAR) -> GEOMETRY

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

ST_GeometryFromWKB(VARBINARY) -> GEOMETRY

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

示例:

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

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
ST_pointFromWKB(VARBINARY) -> GEOMETRY

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

示例:

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

+-------------+
| _col0       |
+-------------+
| POINT (2 4) |
+-------------+
ST_lineFromWKB(VARBINARY) -> GEOMETRY

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

ST_polyFromWKB(VARBINARY) -> GEOMETRY

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

ST_MPointFromWKB(VARBINARY) -> GEOMETRY

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

示例:

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

+---------------------------+
| _col0                     |
+---------------------------+
| MULTIPOINT ((0 0), (1 2)) |
+---------------------------+
ST_MLineFromWKB(VARBINARY) -> GEOMETRY

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

ST_MPolyFromWKB(VARBINARY) -> GEOMETRY

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

ST_GeometryFromGeoJson(VARCHAR) -> GEOMETRY

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

ST_GeometryFromJson(VARCHAR) -> GEOMETRY

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

ST_asGeoJson(GEOMETRY) -> VARCHAR

把几何对象转成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(GEOMETRY) -> VARCHAR

把几何对象转成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(VARBINARY) -> GEOMETRY

输入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) -> BOOLEAN

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

判断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, pointA, pointB) -> BOOLEAN

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

判断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) -> INTEGER

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

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

示例:

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

+------+
| cnt  |
+------+
| 2857 |
+------+

看完上述内容,你们掌握Data Lake Analytics的Geospatial分析函数怎么理解的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. 关于Azure Data Share的详细介绍
  2. 详解Spring Data操作Redis数据库

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

data lake analytics geospatial

上一篇:config和cluster.spec中keys怎么配置

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》