这可能是因为两者的EPSG(欧洲石油地理信息标准)编号不同导致的。ST_Buffer默认使用WGS84(EPSG:4326)坐标系,而ST_Distance默认使用平面坐标系(EPSG:3857)。如果两个空间对象在不同的坐标系中,那么它们的距离和缓冲结果将会有所不同。
以下是使用ST_Buffer和ST_Distance的示例代码:
ST_Buffer:
from pyspark.sql.functions import col
from sedona.register import SedonaRegistrator
from sedona.utils import SedonaKryoRegistrator
from sedona.core.enums import GridType
from sedona.core.SpatialRDD import PointRDD
from sedona.core.formatMapper.shapefileParser import ShapefileReader
from sedona.core.formatMapper import GeoJsonReader, WktReader, WkbReader
from sedona.sql.utils import SedonaSQLRegistrator
from sedona.core.spatialOperator import JoinQuery
from sedona.core.enums import JoinBuildSide, DistanceFunction
SedonaRegistrator.registerAll(spark)
SedonaSQLRegistrator.registerAll(spark)
input_location = "data/shapefiles/parks.shp"
shapefile_rdd = ShapefileReader.readToGeometryRDD(sc, input_location)
shapefile_rdd.analyze()
query_point = WktReader.read("POINT (-120.139, 38.788)")
result = JoinQuery.SpatialBufferQuery(
shapefile_rdd,
query_point,
False,
True
)
result.show()
ST_Distance:
from pyspark.sql.functions import col
from sedona.register import SedonaRegistrator
from sedona.utils import SedonaKryoRegistrator
from sedona.core.enums import GridType
from sedona.core.SpatialRDD import PointRDD
from sedona.core.formatMapper.shapefileParser import ShapefileReader
from sedona.core.formatMapper import GeoJsonReader, WktReader, WkbReader
from sedona.sql.utils import SedonaSQLRegistrator
from sedona.core.spatialOperator import JoinQuery
from sedona.core.enums import JoinBuildSide, DistanceFunction
SedonaRegistrator.registerAll(spark)
SedonaSQLRegistrator.registerAll(spark)
input_location = "data/shapefiles/parks.shp"
shapefile_rdd = ShapefileReader.readToGeometryRDD(sc, input_location)
shapefile_rdd.analyze()
query_point = WktReader.read("POINT (-120.139, 38.788)")
result = JoinQuery