带有索引的表st_country_postal_code
中提供了空间数据。为了获得邮政编码之间的距离,我们使用了以下查询:
SELECT sdo_nn_distance (1) distance, z.*
FROM st_country_postal_code z
WHERE z.postal_code = UPPER ('V3G1M2')
AND z.country_id = '124'
AND 'TRUE' = sdo_nn (z.spatial_data, (SELECT spatial_data FROM st_country_postal_code WHERE country_id = '124' AND postal_code = UPPER ('V2R0N3')), 'sdo_num_res=999 unit=' || 'KM', 1 );
对于某些加拿大邮政编码,例如V2R0N3
,V3G1M2
,J8H2A7
,对于上述查询,我没有返回任何行。是否存在sdo_nn
函数的约束,让我不计算距离?
答案 0 :(得分:0)
如果您只想计算两个邮政编码之间的距离,那么您就是以非常复杂的方式进行计算。简单而正确的方法是:
select sdo_geom.sdo_distance (a.spatial_data, b.spatial_data, 0.05, 'unit=km')
from st_country_postal_code a, st_country_postal_code b
where a.country_id = '124'
and a.postal_code = UPPER ('V3G1M2')
and b.country_id = '124'
and b.postal_code = UPPER ('V2R0N3');
即。只需获取两个形状并计算它们之间的距离。
SDO_NN_DISTANCE()构造专门与SDO_NN运算符一起使用,其目标是将N个最接近的对象(此处为999最接近的邮政编码)返回给对象(邮政编码)。不是你想要的。
事实上,您没有看到所有邮政编码的可能原因正是因为您有效地搜索了999个最近的邮政编码到一个特定的邮政编码。我认为你看不到的那些不在那个集合中。