我有作为结构对象存储的地点坐标和存储为双打的建筑物的坐标。
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?
答案 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
φ
=纬度和θ
=经度