在Oracle中计算两个较长点之间距离

Calculate distance between two lat long points in Oracle(在Oracle中计算两个较长点之间距离)
本文介绍了在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中计算两个较长点之间距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

SQL to Generate Periodic Snapshots from Transactions Table(用于从事务表生成定期快照的SQL)
MyBatis support for multiple databases(MyBatis支持多个数据库)
Oracle 12c SQL: Missing column Headers in result(Oracle 12c SQL:结果中缺少列标题)
SQL query to find the number of customers who shopped for 3 consecutive days in month of January 2020(查询2020年1月连续购物3天的客户数量)
How to get top 10 data weekly (This week, Previous week, Last month, 2 months ago, 3 month ago)(如何每周获取前十大数据(本周、前一周、上个月、2个月前、3个月前))
Select the latest record for an Id per day - Oracle pl sql(选择每天ID的最新记录-Oracle pl SQL)