Calculate distance between two lat long points in 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中计算两个较长点之间距离的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在Oracle中计算两个较长点之间距离
基础教程推荐
- 使用pyodbc“不安全"的Python多处理和数据库访问? 2022-01-01
- SQL Server:只有 GROUP BY 中的最后一个条目 2021-01-01
- SQL Server 2016更改对象所有者 2022-01-01
- 无法在 ubuntu 中启动 mysql 服务器 2021-01-01
- Sql Server 字符串到日期的转换 2021-01-01
- SQL Server 中单行 MERGE/upsert 的语法 2021-01-01
- ERROR 2006 (HY000): MySQL 服务器已经消失 2021-01-01
- 在 VB.NET 中更新 SQL Server DateTime 列 2021-01-01
- 将数据从 MS SQL 迁移到 PostgreSQL? 2022-01-01
- 如何在 SQL Server 的嵌套过程中处理事务? 2021-01-01