访问器函数
访问器函数可用于从不同 geometry
数据类型中获取类型 varchar
、bigint
或 double
的值,其中 geometry
是 Athena 中支持的任何几何数据类型:point
、line
、polygon
、multiline
和 multipolygon
。例如,您可以获取 polygon
geometry 数据类型的面积、指定 geometry 数据类型的最大和最小 x 和 y 值,获取 line
的长度,或接收指定 geometry 数据类型中的点数。
geometry_invalid_reason(geometry)
以 varchar 数据类型返回指定几何体无效或不简单的原因。如果指定的几何体既无效也不是简单的几何体,则返回其无效的原因。如果指定的几何体有效且简单,则返回空值。例如:
SELECT geometry_invalid_reason(ST_Point(-158.54, 61.56))
great_circle_distance(latitude1, longitude1, latitude2,
longitude2)
以双精度形式返回地球表面上两点之间的大圆距离(以千米为单位)。例如:
SELECT great_circle_distance(36.12, -86.67, 33.94, -118.40)
line_locate_point(lineString, point)
返回 0 到 1 之间的双精度值,表示指定线字符串上与指定点的最近点的位置,作为 2D 线总长度的一部分。
如果指定的线字符串或点为空或空值,则返回空值。例如:
SELECT line_locate_point(ST_GeometryFromText('LINESTRING (0 0, 0 1)'), ST_Point(0, 0.2))
simplify_geometry(geometry, double)
使用 Ramer-Douglas-Peucker 算法
SELECT simplify_geometry(ST_GeometryFromText('POLYGON ((1 0, 2 1, 3 1, 3 1, 4 1, 1 0))'), 1.5)
ST_Area(geometry)
采用几何数据类型作为输入,返回类型为 double
的面积。例如:
SELECT ST_Area(ST_Polygon('polygon((1 1, 4 1, 4 4, 1 4))'))
ST_Centroid(geometry)
采用几何体数据类型 polygon
作为输入,并返回作为多边形信封中心的 point
几何体数据类型。示例:
SELECT ST_Centroid(ST_GeometryFromText('polygon ((0 0, 3 6, 6 0, 0 0))'))
SELECT ST_AsText(ST_Centroid(ST_Envelope(ST_GeometryFromText('POINT (53 27)'))))
ST_ConvexHull(geometry)
返回几何体数据类型,该类型是包含指定输入中所有几何体的最小凸几何体。例如:
SELECT ST_ConvexHull(ST_Point(-158.54, 61.56))
ST_CoordDim(geometry)
采用支持的 geometry 数据类型作为输入,并返回坐标分量的计数(类型为 tinyint
)。例如:
SELECT ST_CoordDim(ST_Point(1.5,2.5))
ST_Dimension(geometry)
采用一个支持的 geometry 数据类型作为输入,并返回一个几何体的空间维度 (类型为 tinyint
)。例如:
SELECT ST_Dimension(ST_Polygon('polygon((1 1, 4 1, 4 4, 1 4))'))
ST_Distance(geometry, geometry)
根据空间参考,双精度形式包含以投影单位返回两个几何体之间的二维最小笛卡尔距离。从 Athena 引擎版本 2 开始,如果其中一个输入为空几何体,则返回空值。例如:
SELECT ST_Distance(ST_Point(0.0,0.0), ST_Point(3.0,4.0))
ST_Distance(sphericalGeography, sphericalGeography)
以双精度形式返回两个球形地理点之间的大圆距离(以米为单位)。例如:
SELECT ST_Distance(to_spherical_geography(ST_Point(61.56, -86.67)),to_spherical_geography(ST_Point(61.56, -86.68)))
ST_EndPoint(geometry)
返回 line
几何体数据类型的最后一个点(类型为 point
)。例如:
SELECT ST_EndPoint(ST_Line('linestring(0 2, 2 2)'))
ST_Geometries(geometry)
返回指定集合中的几何体数组。如果指定的几何不是多几何体,则返回一个元素的数组。如果指定的几何体为空,将返回空值。
例如,假设 MultiLineString
对象,ST_Geometries
将创建一个 LineString
对象数组。假设 GeometryCollection
对象,ST_Geometries
将返回一个由其成分组成的未拼合数组。例如:
SELECT ST_Geometries(GEOMETRYCOLLECTION(MULTIPOINT(0 0, 1 1), GEOMETRYCOLLECTION(MULTILINESTRING((2 2, 3 3)))))
结果:
array[MULTIPOINT(0 0, 1 1),GEOMETRYCOLLECTION(MULTILINESTRING((2 2, 3 3)))]
ST_GeometryN(geometry, index)
作为几何数据类型返回指定整数索引处的几何体元素。索引从 1 开始。如果指定的几何体是几何体的集合(例如,GEOMETRYCOLLECTION
或者 MULTI*
对象),则返回位于指定索引处的几何体。如果指定的索引小于 1 或大于集合中元素的总数,则返回空值。要查找元素总数,请使用 ST_NumGeometries。奇异几何体(例如 POINT
、LINESTRING
或者 POLYGON
)将被视为一个元素的集合。空几何体被视为空集合。例如:
SELECT ST_GeometryN(ST_Point(-158.54, 61.56),1)
ST_GeometryType(geometry)
以 varchar 的形式返回几何体的类型。例如:
SELECT ST_GeometryType(ST_Point(-158.54, 61.56))
ST_InteriorRingN(geometry, index)
返回指定索引处的内部环形元素(指数从 1 开始)。如果给定索引小于 1 或大于指定几何中的内环总数,则返回空值。如果指定的几何体不是多边形,则会引发错误。要查找元素总数,请使用 ST_NumInteriorRing。例如:
SELECT ST_InteriorRingN(st_polygon('polygon ((0 0, 1 0, 1 1, 0 1, 0 0))'),1)
ST_InteriorRings(geometry)
返回指定几何体中找到的所有内环的几何体数组,如果多边形没有内环,则返回一个空数组。如果指定的几何体为空,将返回空值。如果指定的几何体不是多边形,则会引发错误。例如:
SELECT ST_InteriorRings(st_polygon('polygon ((0 0, 1 0, 1 1, 0 1, 0 0))'))
ST_IsClosed(geometry)
获取作为仅用于输入的 line
和 multiline
geometry 数据类型。当且仅当线条闭合时返回 TRUE
(类型 boolean
)。例如:
SELECT ST_IsClosed(ST_Line('linestring(0 2, 2 2)'))
ST_IsEmpty(geometry)
获取作为仅用于输入的 line
和 multiline
geometry 数据类型。当且仅当指定的几何体为空时,返回 TRUE
(类型 boolean
),换言之,在 line
开始值和结束值均位于内部时。例如:
SELECT ST_IsEmpty(ST_Point(1.5, 2.5))
ST_IsRing(geometry)
当且仅当 line
类型闭合且简单时返回 TRUE
(类型 boolean
)。例如:
SELECT ST_IsRing(ST_Line('linestring(0 2, 2 2)'))
ST_IsSimple(geometry)
如果指定的几何体没有异常几何点(例如,自相交或自相切),则返回 true。要确定几何体不是简单几何体的原因,请使用 geometry_invalid_reason()。例如:
SELECT ST_IsSimple(ST_LineString(array[ST_Point(1,2), ST_Point(3,4)]))
ST_IsValid(geometry)
当且仅当指定的几何体形态良好时返回 true。要确定几何体形态不佳的原因,请使用 geometry_invalid_reason()。例如:
SELECT ST_IsValid(ST_Point(61.56, -86.68))
ST_Length(geometry)
返回 line
的长度 (类型为 double
)。例如:
SELECT ST_Length(ST_Line('linestring(0 2, 2 2)'))
ST_NumGeometries(geometry)
以整数形式返回集合中的几何体数。如果几何体是几何体的集合(例如,GEOMETRYCOLLECTION
或者 MULTI*
对象),则返回几何体的数量。单个几何体返回 1;空几何体返回 0。GEOMETRYCOLLECTION
对象中的一个空的几何体计为一个几何体。例如,以下示例估算为 1:
ST_NumGeometries(ST_GeometryFromText('GEOMETRYCOLLECTION(MULTIPOINT EMPTY)'))
ST_NumInteriorRing(geometry)
返回 polygon
几何体中的内部环数 (类型为 bigint
)。例如:
SELECT ST_NumInteriorRing(ST_Polygon('polygon ((0 0, 8 0, 0 8, 0 0), (1 1, 1 5, 5 1, 1 1))'))
ST_NumPoints(geometry)
返回几何体中的点数 (类型为 bigint
)。例如:
SELECT ST_NumPoints(ST_Point(1.5, 2.5))
ST_PointN(lineString,
index)
以点几何体数据类型返回指定整数索引处指定线字符串的折点。索引从 1 开始。如果给定索引小于 1 或大于集合中元素的总数,则返回空值。要查找元素总数,请使用 ST_NumPoints。例如:
SELECT ST_PointN(ST_LineString(array[ST_Point(1,2), ST_Point(3,4)]),1)
ST_Points(geometry)
返回指定线字符串几何体对象中的点数组。例如:
SELECT ST_Points(ST_LineString(array[ST_Point(1,2), ST_Point(3,4)]))
ST_StartPoint(geometry)
返回 line
几何体数据类型的第一个点(类型为 point
)。例如:
SELECT ST_StartPoint(ST_Line('linestring(0 2, 2 2)'))
ST_X(point)
返回点的 X 坐标 (类型为 double
)。例如:
SELECT ST_X(ST_Point(1.5, 2.5))
ST_XMax(geometry)
返回几何体的最大 X 坐标 (类型为 double
)。例如:
SELECT ST_XMax(ST_Line('linestring(0 2, 2 2)'))
ST_XMin(geometry)
返回几何体的最小 X 坐标 (类型为 double
)。例如:
SELECT ST_XMin(ST_Line('linestring(0 2, 2 2)'))
ST_Y(point)
返回点的 Y 坐标 (类型为 double
)。例如:
SELECT ST_Y(ST_Point(1.5, 2.5))
ST_YMax(geometry)
返回几何体的最大 Y 坐标 (类型为 double
)。例如:
SELECT ST_YMax(ST_Line('linestring(0 2, 2 2)'))
ST_YMin(geometry)
返回几何体的最小 Y 坐标 (类型为 double
)。例如:
SELECT ST_YMin(ST_Line('linestring(0 2, 2 2)'))