oracle - oracle DB中具有纬度和经度的两点之间的距离

标签 oracle geometry oracle-spatial

我需要通过 Pl SQL Query 计算两个位置之间的距离。我试过一些 Qry 但没有得到它。
为此,我们在 SQL 中使用 Query 如下

SELECT ROUND(geography::Point(cast('19.2806118' as float),cast('72.8757395' as float) , 
4326).STDistance(geography::Point(cast('19.4482006' as float),
cast('72.7912511' as float), 4326))/1000,1) DIST
结果:20.6
为了在 ORACLE Db 中计算相同的值,我在互联网上找到了一个解决方案,如下所示
select sdo_geom.sdo_distance(sdo_geometry(2001,4326,null,sdo_elem_info_array(1, 1, 1),
sdo_ordinate_array( 19.2806118,72.8757395)),sdo_geometry(2001,4326, null,sdo_elem_info_array(1, 1, 
1),sdo_ordinate_array( 19.4482006,72.7912511)),1,'unit=KM') distance_km from dual
结果:10.9271..
请建议在我获得 MS SQL 时会给我结果的方法

最佳答案

Please suggest the method which will give me result in KM as I am getting MS SQL


交换参数顺序19.2806118,72.875739572.8757395,19.2806118
select sdo_geom.sdo_distance(
   sdo_geometry(2001,4326,null,sdo_elem_info_array(1, 1, 1),
                 sdo_ordinate_array(72.8757395,19.2806118)),
   sdo_geometry(2001,4326, null,sdo_elem_info_array(1, 1,1),
                 sdo_ordinate_array(72.7912511,19.4482006))
   ,1
   ,'unit=KM') distance_km 
from dual;
产生与 SQL Server 完全相同的结果:20.5657053685075
db<>fiddle demo Oracle
db<>fiddle demo SQL Server
或者通过使用 sdo_point :
SELECT sdo_geom.sdo_distance(
         sdo_geometry(2001, 4326,
                sdo_point_type(72.8757395, 19.2806118, NULL), NULL, NULL),
          sdo_geometry(2001, 4326,
               sdo_point_type(72.7912511, 19.4482006, NULL), NULL, NULL),
               1, 'unit=KM') distance_in_m
from DUAL;

SQL 服务器:geography::Point ( Lat, Long, SRID )

关于oracle - oracle DB中具有纬度和经度的两点之间的距离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65124304/

相关文章:

geometry - 在 2D 平面上定位随机点

java - 如何访问 JPA 转换器中的 jdbc 连接?

c# - 当只知道三个不共线的点时,如何确定圆的半径和圆心?

SQL 在顶部有一个特定记录,所有其他记录在下面

sql - 2 列在一张表中有 2 个不同的条件

c++ - 使用边缘检测计算三角几何中的顶点法线

java - Oracle 中 SDO_POINT 的使用

MySQL数据字段转oracle

database - Oracle 10g 周数

c# - 算法 - 找到圆弧的中点