在 Oracle 中计算两个经纬度点之间的距离



我正在尝试使用SDO_GEOM包计算Oracle中两个经度点之间的距离。 我在互联网上阅读的大多数解决方案都建议以下查询:

select sdo_geom.sdo_distance(
sdo_geometry(2001, 4326, sdo_point_type(40.0, 10.0, null), null, null),
sdo_geometry(2001, 4326, sdo_point_type(40.0, 11.0, null), null, null),
0.01,
'unit=KM'
) as distance
from dual;

但是,当我使用在线工具来验证结果时,它似乎是不正确的:

尝试 (40,10(, (40,11(:

http://www.meridianoutpost.com/resources/etools/calculators/calculator-latitude-longitude-distance.php

知道为什么即使我在查询中使用地理坐标系 (4326( 距离计算也不正确吗?

select sdo_geom.sdo_distance(
sdo_geometry(2001, 4326, sdo_point_type(40.0, 10.0, null), null, null),
sdo_geometry(2001, 4326, sdo_point_type(40.0, 11.0, null), null, null),
0.01,
'unit=KM'
) as distance
from dual;
DISTANCE
----------
110.611186

Oracle 计算返回110.611186 公里

您网站上的一个返回111.19 公里,因此相差580 米。这种差异是因为您的在线计算器使用简单的数学假设地球球,而 Oracle 使用地球的正确椭圆体形状(WGS84 椭球体(。

您可以在 https://www.fai.org/page/world-distance-calculator 上看到差异 如果选择 WGS84 地球模型(WGS84椭球体(,则得到与 Oracle (110.611186562098( 相同的结果。如果将其更改为FAI Sphere,则得到 111.19492643325476,与您的比较器相同。

正确的距离是 110.611 公里。在 580 m 关闭的情况下计算它是否重要取决于您的应用程序。如果您测量短距离(如一公里或更短的距离(,则误差可以忽略不计。但对于长距离来说,这可能很重要。在这里,这意味着错过目标 1/2 公里!

它确实显示了使用正确的地球模型进行这些计算的重要性。

编辑:甲骨文表示(以及几乎所有的GIS工具(是经度,纬度。如果你交换数字,那么你会得到非常不同的结果。

您的问题是交换经度和纬度

这是计算中央公园和百老汇距离的示例

select sdo_geom.sdo_distance(         --  longitude,  Latitude 
sdo_geometry(2001, 4326, sdo_point_type(-73.968285, 40.785091, null), null, null),
sdo_geometry(2001, 4326, sdo_point_type(-73.974709, 40.790886, null), null, null),
0.01,
'unit=KM'
) as distance
from dual;

返回

0,841504644128136

您提到的链接给出了(提供正确的输入(可比较的结果

From: (40°47'6.3276000000001"N -73°58'5.826"E) To: (40°47'27.1896"N -73°58'28.9524"E)
0.52 miles / 0.84 kilometers / 0.45 nautical miles

最新更新