如何使用 ST_Distance 和 ST_Transform 计算以英里为单位的距离

kee*_*kee 2 postgis geospatial

我的表中有纬度/经度点,我想计算它们之间的距离(以英里为单位)。

显然,只是调用 ST_Distance (point1, point2) 会返回我不想要的东西(同样,point1 和 point2 位于经纬度)。我被建议使用 ST_Transform,它允许我进行坐标参考系统转换。但是我对这个领域很陌生,我迷路了。请赐教(希望有一些例子)

JGH*_*JGH 5

一种方法是选择适合您感兴趣区域的坐标系。其中一些以英尺为单位,另一些以米为单位。在这两种情况下,您都需要将找到的距离转换为英里。

示例,其中 xxxx 是使用米的坐标系,例如 UTM:

select 
  st_distance(
     st_transform(point1.geom, 4326, xxxx),
     st_transform(point2.geom, 4326, xxxx)
  ) *  0.000621371192  as dist_miles;
Run Code Online (Sandbox Code Playgroud)

由于您提到您是新手,因此选择合适的坐标系可能有些困难。然后更容易恢复使用geography数据类型计算距离,即测量圆形地球上的距离,而不是它的平面表示。结果也以米为单位,需要转换为英里。

select 
  st_distance(
     point1.geom::geography,
     point2.geom::geography
  ) *  0.000621371192  as dist_miles;
Run Code Online (Sandbox Code Playgroud)