首页 > 解决方案 > 使用sql oracle计算地理点之间的距离

问题描述

谁知道并可以演示如何使用毕达哥拉斯定理(SQL oracle)计算距离。桌子:

station_id        station_geom
395               POINT(-121.906834244728 37.3608541552538)
378               POINT(-121.890799999237 37.3477445655325)
312               POINT(-121.901782 37.329732)

期望输出:

station_id_start  station_id_end    distance 
395               378               2,23682150368419

老实说,我所做的并不是很聪明:我将列station_geom分成两个单独的列,然后计算前站之间的距离。SELECT sqrt(power(37.3608541552538-37.3477445655325,2)+power(-121.890799999237-(-121.906834244728),2))*108 as P_Distance,我确实希望有一个简单的解决方案。谢谢

标签: sqloracle11ggeolocation

解决方案


正如评论中所指出的,如果条件是您必须使用毕达哥拉斯定理,您的答案已经完成。为什么你有这种情况我不知道,因为这意味着如果距离很长或者你不在赤道附近,你的答案将是一个近似值而不是一个很好的答案。

获得正确结果的简单解决方案是确保您的几何场具有正确的投影数据,然后使用内置的距离函数。 https://docs.oracle.com/database/121/SPATL/sdo_geom-sdo_distance.htm#SPATL1117

编辑:根据您的评论,我们可以忘记毕达哥拉斯并尝试使用内置的 Oracle 空间函数(假设它们已安装)。

您首先需要将众所周知的文本 WKT 数据(即看起来像您的点的数据的名称)转换为几何对象,并告诉 Oracle 数字是经纬度。您可以使用函数 SDO_GEOMETRY 执行此操作,如下所示:

SELECT station_id, SDO_GEOMETRY(station_geom,4326) as station_geom_oracle FROM your_table

我建议您在数据库中创建一个新表,这样您只需进行一次转换。然后,您可以根据需要使用 SDO_DISTANCE 函数计算这些几何图形之间的距离。


推荐阅读