【发布时间】:2015-03-13 11:23:03
【问题描述】:
我正在使用 Oracle Spatial (SDO) 在给定的经度、纬度上沿给定的方位投影给定距离的点。我正在寻找经度,纬度的结果。当我向北投影时,这似乎按预期工作。但不是在正东投影时。
正北投影就像人们想象的那样工作。如果结果正好等于开始的经度,则为经度。
Projecting East 无法按预期工作。如果结果不等于开始的纬度,则为纬度。我不知道为什么会这样。
这是一个例子。
我将从按预期工作的案例开始。我正在处理由我的 Java 代码记录的输出。
googlefiber3log4j:05:18:02.117 userObject.placement.OrthoRectangleSettings$CompleteRectOnServer - [调试] x: -117.499208 y: 43.808064441203=addVertex(num{0},rect{polygon:[[x: -117.499208 y: 37.220449]]}, stmt{Stmt(SQL{SELECT SDO_UTIL.POINT_AT_BEARING(?point?,?radians?,?距离?)点 FROM DUAL}) 属性:距离=731519.9982059655,点=x: -117.499208 y: 37.220449, 弧度=6.283185307179586>})
以粗体字的顺序显示计算结果、距离、我们投影的点、投影的角度。
在sqlDev中执行为:
SELECT SDO_UTIL.POINT_AT_BEARING(sdo_geom.sdo_geometry(2001, 8192,
sdo_geom.sdo_point_type(-117.499208, 37.220449, NULL), NULL, NULL), 6.283185307179586,731519.9982059655) 点数;
对于 Oracle,零角是北。 6.28…角度基本上为零,基于 2 PI 弧度。
您可以看到生成的经度 -117.499208 在输入和输出上都符合预期。为了让它变得如此干净,我不得不怀疑 Oracle 并没有真正使用 trig 来执行此操作,而是将零弧度视为一种特殊情况。
现在进行下一个我看到问题的计算。这将向东而不是向北投影。投影的点是上述计算的输出。
googlefiber3log4j:05:18:29.474 userObject.placement.OrthoRectangleSettings$CompleteRectOnServer - [调试] x:-101.232232142637 y:42.6357376524045= addVertex(num{1},rect{polygon:[[x: -117.499208 y: 37.220449, x: -117.499208 y: 43.808064441203]]}, stmt{Stmt(SQL{SELECT SDO_UTIL.POINT_AT_BEARING(?point?,?radians?,?distance?) point FROM DUAL}) 属性:距离=1325879.999986927,点=x:-117.499208 y: 43.808064441203, 弧度= 1.5707963267948966>})
在sqlDev中执行为:
选择 SDO_UTIL.POINT_AT_BEARING(sdo_geom.sdo_geometry(2001, 8192, sdo_geom.sdo_point_type(-117.499208, 43.808064441203, NULL), NULL, 空值), 1.5707963267948966,1325879.999986927) 点数;
在这种情况下,弧度为 90.0 度/东。所以我希望结果的纬度(42.6357376524045)等于开始的纬度(43.808064441203)。但它实际上离那有点远。
为什么在尝试向正东投影时,纬度会发生变化?
【问题讨论】:
标签: java oracle geospatial