SDO几何。计算最短距离

时间:2017-07-28 10:34:43

标签: oracle geometry coordinates distance

我有作为结构对象存储的地点坐标和存储为双打的建筑物的坐标。

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?

1 个答案:

答案 0 :(得分:0)

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

将矢量中心定义为point1。使用地心和另一个点定义另一个矢量。两个向量的点积给出了这两个向量之间角度的余弦。

最大点积的点是最接近point1的点。

对于带球面坐标的点积,请参阅this post。

您可以采用所有向量具有相同r的近似值。因为您对最大值(不是实际距离)感兴趣,所以可以使用r1 = r2 = 1
另外,在那篇文章中φ = 90 - latitude。记住罪(a)= cos(90-a)。
做两次修正你需要的最终公式是

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

φ =纬度和θ =经度