在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)On:
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
甲骨文计算返回110.611186公里
您站点上的那个返回111.19公里,所以相差580米。这是因为您的在线计算器使用简单的数学方法假定球形地球,而Oracle使用正确的椭球体地球形状(WGS84椭球体)。
您可以在https://www.fai.org/page/world-distance-calculator上看到差异如果您选择WGS84地球模型(WGS84椭球体),则您将得到与Oracle(110.611186562098)相同的结果。如果将其更改为FAI球体,则得到111.19492643325476,与您的比较器相同。
正确距离为110.611公里。在离线580米的情况下计算它是否重要取决于您的应用程序。如果你测量短距离(如一公里或更短),误差可以忽略不计。但对于远距离而言,这一点可能意义重大。这里的意思是偏离目标1/2公里!
它确实显示了使用正确的地球模型进行这些计算的重要性。
编辑:Oracle表示(以及几乎所有的地理信息系统工具)是经度。如果你交换数字,那么你会得到非常不同的结果。
相关文章