Data Lake Analytics的Geospatial分析函数

news/2023/12/9 16:45:53
  1. 简介

为满足部分客户在云上做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...
http://www.opengeospatial.org...

支持类似如下的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))

  1. WKB数据

详细描述:https://en.wikipedia.org/wiki...

上述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

  1. GeoJson数据

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

  1. ESRI Geometry Object Json数据

规范说明:http://resources.esri.com/hel...

  1. ESRI Shape二进制数据

规范说明:http://www.esri.com/LIBRARY/W...

  1. 函数列表

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...)矩阵字符串指定的条件。
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 仅适用于北半球:用作一个经纬度列和一个固定的坐标点的距离计算

  1. 函数定义与示例

ST_asText
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
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
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
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
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
ST_GeometryFromText(VARCHAR) -> GEOMETRY
输入WKT格式的字符串数据,生成Geometry数据。

ST_Buffer
ST_Buffer(GEOMETRY, DOUBLE) -> GEOMETRY
获取几何对象和距离,然后返回表示围绕源对象的缓冲区的几何对象。

ST_Centroid
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
ST_X(GEOMETRY) -> DOUBLE
返回Point的X坐标。

示例:

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

_col0
0.5

ST_Y
ST_Y(GEOMETRY) -> DOUBLE
返回Point的Y坐标。

示例:

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

_col0
1.0

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

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

image.png | left | 223x166

ST_Contains
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
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
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
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
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
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
ST_Relate(GEOMETRY, GEOMETRY, VARCHAR) -> BOOLEAN
比较两个几何对象,判断是否满足“DE-9IM”模式(https://en.wikipedia.org/wiki...)矩阵字符串指定的条件。

示例:

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)'),
'111');

_col0
1

ST_Touches
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
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
ST_asBinary(GEOMETRY) -> VARBINARY
输入一个几何对象,然后返回其可识别的二进制WKB数据。

ST_GeometryFromWKBHexString
ST_GeometryFromWKBHexString(VARCHAR) -> GEOMETRY
输入WKB的HEX字符串数据,返回对应的几何对象。

示例:

select ST_ASTEXT(ST_GeometryFromWKBHexString('000000000140000000000000004010000000000000'));

_col0
POINT (2 4)

ST_pointFromWKBHexString
ST_pointFromWKBHexString(VARCHAR) -> GEOMETRY
输入Point的WKB的HEX字符串数据,返回对应的Point几何对象。

示例:

select ST_ASTEXT(ST_pointFromWKBHexString('000000000140000000000000004010000000000000'));

_col0
POINT (2 4)

ST_lineFromWKBHexString
ST_lineFromWKBHexString(VARCHAR) -> GEOMETRY
输入Line的WKB的HEX字符串数据,返回对应的Line几何对象。

ST_polyFromWKBHexString
ST_polyFromWKBHexString(VARCHAR) -> GEOMETRY
输入Polygon的WKB的HEX字符串数据,返回对应的Polygon几何对象。

ST_MPointFromWKBHexString
ST_MPointFromWKBHexString(VARCHAR) -> GEOMETRY
输入MultiPoint的WKB的HEX字符串数据,返回对应的MultiPoint几何对象。

示例:

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

_col0
MULTIPOINT ((0 0), (1 2))

ST_MLineFromWKBHexString
ST_MLineFromWKBHexString(VARCHAR) -> GEOMETRY
输入MultiLine的WKB的HEX字符串数据,返回对应的MultiLine几何对象。

ST_MPolyFromWKBHexString
ST_MPolyFromWKBHexString(VARCHAR) -> GEOMETRY
输入MultiPolygon的WKB的HEX字符串数据,返回对应的MultiPolygon几何对象。

ST_GeometryFromWKB
ST_GeometryFromWKB(VARBINARY) -> GEOMETRY
输入WKB数据,返回对应的几何对象。

示例:

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

_col0
POINT (2 4)

ST_pointFromWKB
ST_pointFromWKB(VARBINARY) -> GEOMETRY
输入Point的WKB数据,返回对应的Point几何对象。

示例:

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

_col0
POINT (2 4)

ST_lineFromWKB
ST_lineFromWKB(VARBINARY) -> GEOMETRY
输入Line的WKB数据,返回对应的Line几何对象。

ST_polyFromWKB
ST_polyFromWKB(VARBINARY) -> GEOMETRY
输入Polygon的WKB数据,返回对应的Polygon几何对象。

ST_MPointFromWKB
ST_MPointFromWKB(VARBINARY) -> GEOMETRY
输入MultiPoint的WKB数据,返回对应的MultiPoint几何对象。

示例:

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

_col0
MULTIPOINT ((0 0), (1 2))

ST_MLineFromWKB
ST_MLineFromWKB(VARBINARY) -> GEOMETRY
输入MultiLine的WKB数据,返回对应的MultiLine几何对象。

ST_MPolyFromWKB
ST_MPolyFromWKB(VARBINARY) -> GEOMETRY
输入MultiPolygon的WKB数据,返回对应的MultiPolygon几何对象。

ST_GeometryFromGeoJson
ST_GeometryFromGeoJson(VARCHAR) -> GEOMETRY
输入GeoJson的字符串数据,返回对应的几何对象。

ST_GeometryFromJson
ST_GeometryFromJson(VARCHAR) -> GEOMETRY
输入ESRI Geometry Object Json的字符串数据,返回对应的几何对象。

ST_asGeoJson
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
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
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;

namecnt
San Benito8
San Bernardino7
Riverside6
Inyo5
Imperial3
San Diego2
Kern1
Kings1
Monterey1
San Luis Obispo1
Santa Clara1
Ventura1

UDF_SYS_GEO_IN_CYCLE
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
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
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
  1. 更多参考

教程:Data Lake Analytics + OSS数据文件格式处理大全: https://yq.aliyun.com/article...
使用Data Lake Analytics从OSS清洗数据到AnalyticDB:https://yq.aliyun.com/article...
Data Lake Analytics使用场景:https://help.aliyun.com/docum...
OLAP on TableStore——基于Data Lake Analytics的Serverless SQL大数据分析https://yq.aliyun.com/article...
使用Data Lake Analytics 分析OSS数据:https://help.aliyun.com/docum...
Data Lake Analytics数据库的连接方式:https://help.aliyun.com/docum...
Data Lake Analytics分析RDS数据:https://yq.aliyun.com/article...
下一代企业级云上数据分析服务:Data Lake Analytics:https://yq.aliyun.com/article...
DLA相关技术文档:https://yq.aliyun.com/search?...


http://www.niftyadmin.cn/n/4647231.html

相关文章

十二省联考2019 春节十二响

十二省联考2019 春节十二响 本质上也是傻逼题,全场切的那种。 但是一开始想不到,然后怎么想到呢? “注意:在第 10、11、12 号测试点中,1 号子程序不一定是链的一个端点。” 我就看了一眼树是一条链的部分分 哇傻逼玩意…

c# 模拟表单提交,post form 上传文件、大数据内容

表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每一份资料的边界 (boundary),用以产生多重信息部份 (message…

java三年面试开发

为什么80%的码农都做不了架构师?>>> 1、数组和链表的区别 2、JVM 3、Object类详细分析 4、equal 区别 5、多线程 6、sql 7、Redis分布式锁的正确实现方式 8、多线程 9、springboot 10、int Integer 面试题 11、sql注入问题 12、Autowired 与Resource的…

docker daemon 配置代理

创建插件目录 sudo mkdir -p /etc/systemd/system/docker.service.d 编写proxy配置文件 #vim /etc/systemd/system/docker.service.d/http-proxy.conf [Service] Environment"HTTP_PROXYhttp://proxy.server.com:913/" "HTTPS_PROXYhttp://proxy.server.com:913…

微信扫码登录实现

微信登录验证基于OAuth2.0 流程如下: 先申请公众号 ,然后在公众号里面配置应用的return域名让用户通过扫码授权绑定微信号(绑定的时候就是将该用户的unioid和自己系统中的用户做一个对应关系,将unionid存下来)具体程序流程&#x…

[CF1139 E] Maximize Mex 解题报告 (二分图匹配)

interlinkage: https://codeforces.com/contest/1139/problem/E description: 有$n$个学生,$m$个社团,每个学生有一个能力值,属于一个社团,在接下来的$d$天里,每天会有一个人退出所在的社团。 每天从每个社团中选出最多…

利用Wrap Shell Script定位Android Native内存泄漏

前提条件 Android版本为8.0以上环境配置 cd到/src/main目录下,新建shell目录,同时shell目录下配置与libs目录下相同平台的目录,如下app下的层级结构,可看到shell/lib下具有与libs下相同的平台目录结构── AndroidManifest.xml ├…

Python--day61--Django ORM单表操作之展示用户列表

user_list.html views.py 项目的urls.py文件 转载于:https://www.cnblogs.com/xudj/p/10415523.html

hdu2824 The Euler function(欧拉函数个数)

版权声明:本文为博主原创文章,未经博主同意不得转载。vasttian https://blog.csdn.net/u012860063/article/details/36426357 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid2824 欧拉函数性质: 1:(…

缓存系统设计:缓存击穿,缓存雪崩,缓存穿透,缓存预热

缓存击穿 假设一个缓存系统中存在一个热Key,每分每秒都有大量的请求访问这个key,那么当这个热key因为过期而失效,一瞬间所有的请求直接打到DB上,这种场景称做缓存击穿。 为了避免这种问题业界一般有如下解决方案 1.互斥锁 当缓存过…

OpenJ_Bailian 2814 拨钟问题

总时间限制: 1000ms内存限制: 65536kB描述有9个时钟,排成一个3*3的矩阵。 |-------| |-------| |-------|| | | | | | ||---O | |---O | | O || | | | | ||-------| |-------| |-------| …

当前机器的各种进程、服务信息的收集(win)

当前机器的各种进程、服务信息的收集(win) 前言 我们在做渗透测试的过程中,遇到Windows系统的环境是最多的,然而在拿到一台Windows胸膛呢权限之后,我们要进行横向渗透测试或者纵向渗透测试,这时候针对Windows的信息收集就显得尤为…

使用阿里云的短信服务发送短信

在给客户开发一个信息发送功能的时候,需要涉及到短信的发送,短信发送一般不同的厂商提供的接口不同,处理方式也不太一样,之前用的一个厂商的,提供了一个封装类就很容易发送短息,因此都是基于HTTP协议做的一…

ORACLE SQL and SQL*PLUS 学习

ORACLE SQL and SQL*PLUS 学习 一、选择行 1. 简单的SELECT 语句 SELECT [DISTINCT] {*,COLUMN [ALIAS], ……} FROM table_name; 字段的非唯一的结果集 DISTINCT 字段名1 [ ,字段名2] 数字类型字段名之间可以进行算术运算 - * / 等 例如: (字段名1*字段名2)/3 合并字段内容…

非确定有穷自动机(nondeterministic finite automata,NFA)

是一个五元组,M(S,∑,f,S0,F) S:有穷状态集 ∑:输入字母表(有穷) f:f(S,α)S 表示从一个状态S出发,识别了一个字α后,可以到达S这个状态集合之间的某一个状态(可能的后继有多个,也可能木有) S0&…

多任务之协程浅谈

一、协程(Coroutine) 1、认识协程 a>协程,又称为微线程、纤程 b>协程是Python中另外一种实现多任务的方式,比线程占用更小的执行单位 c>最通俗的理解:就是一个可以暂停的函数,可以挂起的函数 d>…
最新文章