SDO几何.计算最短距离



我有存储为结构对象的地方坐标和存储为双精度的建筑物坐标。

select geo.id, geo.object_id, geo.object_type, geo.date_created, t.x as longitude, t.y as latitude from geolocation geo, table(sdo_util.getvertices(geo.location)) t; --I can fetch places coordinates.

选择经度、建筑物纬度 -- 获取建筑物位置。

我必须找到这个地方位于哪个建筑(到附近建筑的最短距离(。 即

Place: longitude = 41.1111111, langitude = 42.2222222
Building 1: longitude = 41.1111112, langitude = 42.42.2222223
Building 2: longitude = 50.1111111, langitude = 50.2222222
Building 3: longitude = 60.1111111, langitude = 60.2222222

(我故意夸大了价值(

结果应该是:建筑物 1(这是附近的建筑物(。

如何使用SDO_GEOM。SDO_DISTANCE ?

对不起。我对SDO_GEOM一无所知。但是我可以展示一些数学,如果有帮助的话:

定义点 1 的矢量地心。定义另一个具有地心和另一个点的向量。两个向量的点积为您提供了这两个向量之间角度的余弦。

具有最大点积的点是离点 1 最近的点。

有关具有球面坐标的点积,请参阅这篇文章。

您可以采用所有向量具有相同r的近似值。因为您对最大值(不是实际距离(感兴趣,所以可以使用r1 = r2 = 1
另外,在该帖子中φ = 90 - latitude.记住 sin(a( = cos(90-a(。
进行两次更正,您需要的最终公式是

d = cosφ1 cosφ2 cos(θ1−θ2) + sinφ1 sinφ2

φ= 纬度,θ= 经度

最新更新