我正在尝试使用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):
知道我在查询中使用的是地理坐标系(4326),为什么距离计算仍然不正确?
您的问题在于交换经度和纬度
这里是计算中央公园和百老汇的距离的示例
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
您提到的elink提供(提供正确的输入)可比较的结果
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
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