在Oracle中获取定向点的定向度数

sd2nnvve  于 2022-11-03  发布在  Oracle
关注(0)|答案(2)|浏览(104)

在我的数据库中,我有一些定向点类型的几何图形。
例如:
{3001,4326,null,{1,1,1,4,1,0},{32.4302549,37.5066298,0,0.16,-0.92,0}}
如果我没猜错我的GPS坐标是

纬度:32.4302549,经度:37.5066298美元

并且确定方向的虚拟点是点(0.16 - 0.920)
我想使用查询获得以度或弧度为单位的方向。
到目前为止我可以提取出定向点:

SELECT SDO_UTIL.GET_COORDINATE(MY_GEOMETRY_COLUMN, 2) as orientation_vector 
FROM GCOL;

但不知道如何得到orientation.我知道它可以计算vie arctan 2函数,但不知道正确的oracle语法。

uqcuzwp8

uqcuzwp81#

您需要使用ATAN2来获得具有正确象限的弧度。

WITH X AS (
  SELECT
     SDO_GEOMETRY(3001,4326,NULL,
       SDO_ELEM_INFO_ARRAY(1, 1, 1, 4, 1,0),
       SDO_ORDINATE_ARRAY(32.4302549, 37.5066298, 0, 0.16, - 0.92,0)) AS G
    FROM DUAL
)
SELECT
  ATAN2(
   SDO_UTIL.GET_COORDINATE(G, 2).SDO_POINT.Y , 
   SDO_UTIL.GET_COORDINATE(G, 2).SDO_POINT.X) 
FROM X;

若要转换为度,请参阅SDO_UTIL.CONVERT_UNIT。

vmdwslir

vmdwslir2#

根据@大卫Lapp的回答,我将发布一个适合我的解决方案。在我的应用程序中,我需要0度来指向上方。ATAN 2()函数的正确参数顺序是先X,然后Y。
我将结果转换为度,并四舍五入到小数点后两位。

WITH X AS (
    SELECT MY_GEOMETRY_COLUMN as G
    from MY_GEOMETRY_TABLE
)
SELECT ROUND(SDO_UTIL.CONVERT_UNIT(
                     ATAN2(
                             SDO_UTIL.GET_COORDINATE(G, 2).SDO_POINT.X,
                             SDO_UTIL.GET_COORDINATE(G, 2).SDO_POINT.Y),
            'Radian', 'Degree'),
        2) as orientation;

相关问题