适用于:
Databricks Runtime 18 LTS 及更高版本
Important
此功能目前以公共预览版提供。
返回一个保证位于输入 Geometry 值或内部的点。
有关相应的 Databricks SQL 函数,请参阅 st_pointonsurface 函数。
Syntax
from pyspark.databricks.sql import functions as dbf
dbf.st_pointonsurface(col=<col>)
Parameters
| 参数 | 类型 | 说明 |
|---|---|---|
col |
pyspark.sql.Column 或 str |
几何图形值。 |
Returns
pyspark.sql.Column:一列 2D 点 Geometry 值,每个列保证位于相应的输入几何图形上或内部。 更确切地说:
- 如果输入几何图形为空,则返回 2D 空点。
- 如果输入几何图形是非空点,则返回该点的 2D 投影。
- 如果输入几何图形为非空行字符串,则返回中间顶点。
- 如果输入几何图形是非空多边形,则尽可能返回多边形的内部点;否则,其边界上的点。
- 如果输入几何图形是多点,则返回离边界框中心最近的非空点。
- 如果输入几何图形是多行字符串,则返回具有最大长度的线字符串图面上的点。
- 如果输入几何图形是多多边形,则返回具有最大面积的多边形表面的点。
- 如果输入几何图形是几何图形集合,则返回集合的最大维元素之一的图面上的点。
返回的几何图形的 SRID 与输入几何图形的 SRID 相同。
如果输入为 None.,则函数返回 None 。
示例
# Returns a point inside a 2D polygon.
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([('POLYGON((0 0,10 0,10 10,0 10,0 0))',)], ['wkt'])
df.select(dbf.st_asewkt(dbf.st_pointonsurface(dbf.st_geomfromtext('wkt'))).alias('result')).collect()
[Row(result='POINT(5 5)')]
# For a polygon with a hole, the result lies in the donut region.
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([('POLYGON((0 0,30 0,30 30,0 30,0 0),(5 5,25 5,25 25,5 25,5 5))',)], ['wkt'])
df.select(dbf.st_asewkt(dbf.st_pointonsurface(dbf.st_geomfromtext('wkt'))).alias('result')).collect()
[Row(result='POINT(3.75 3.75)')]
# For a 3DZ linestring, the median vertex is returned and the Z coordinate is dropped.
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([('LINESTRING Z (1 2 -1,3 4 -2,5 6 -3)',)], ['wkt'])
df.select(dbf.st_asewkt(dbf.st_pointonsurface(dbf.st_geomfromtext('wkt'))).alias('result')).collect()
[Row(result='POINT(3 4)')]
# For a multipolygon, a point on the polygon with the largest area is returned.
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([('MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((100 100,101 100,101 101,100 101,100 100)))',)], ['wkt'])
df.select(dbf.st_asewkt(dbf.st_pointonsurface(dbf.st_geomfromtext('wkt'))).alias('result')).collect()
[Row(result='POINT(5 5)')]
# The SRID of the input geometry is preserved.
from pyspark.databricks.sql import functions as dbf
df = spark.createDataFrame([('POLYGON((0 0,10 0,10 10,0 10,0 0))',)], ['wkt'])
df.select(dbf.st_asewkt(dbf.st_pointonsurface(dbf.st_geomfromtext('wkt', 3857))).alias('result')).collect()
[Row(result='SRID=3857;POINT(5 5)')]