Search code examples
apache-spark-sqlgeospark

use geospark sql to calculate the distance between two points


I use geospark sql to calculate the distance between two points

like this:

sql("""
 SELECT ST_Distance(ST_Transform(ST_GeomFromText('Point (102.756444 25.038064 )'),"epsg:4236","epsg:3857"),ST_Transform(ST_GeomFromText('Point (102.745025 25.040838 )'),"epsg:4236","epsg:3857"))
""").show(false)

the result is 1316m

but I use postgresql get a different result

select ST_Distance(ST_GeographyFromText('POINT (102.756444 25.038064)
'),ST_GeographyFromText('Point (102.745025 25.040838)')) 

the result is 1192m

Which one is right? how to use geospark sql to get a correct result?


Solution

  • For geometry types returns the minimum 2D Cartesian (planar) distance between two geometries, in projected units (spatial ref units).postgis is geography , need use corrected by cos(lat) to account for distortion like this

    sql("""
     SELECT ST_Distance(ST_Transform(ST_GeomFromText('Point (102.756444 25.038064 )'),"epsg:4236","epsg:3857"),ST_Transform(ST_GeomFromText('Point (102.745025 25.040838 )'),"epsg:4236","epsg:3857"))*cos(25.038064*3.1415926/180)
    """).show(false)