在Oracle中计算两个较长点之间距离 [英] Calculate distance between two lat long points in Oracle

查看:219
本文介绍了在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表示(以及几乎所有的地理信息系统工具)是经度。如果你交换数字,那么你会得到非常不同的结果。

这篇关于在Oracle中计算两个较长点之间距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆