2013-06-25 122 views
1

我試圖實現一個函數,該函數返回包含表示特定半徑(距離)內多邊形(描述區域)的表的所有條目。我發現功能SDO_GEOM.SDO_WITHIN_DISTANCE並閱讀this postOracle Spatial(Locator) - 在距離/半徑內查找多邊形

由於這是一種理論方法,我沒有真正的數據 - 而且我不是母語的人,所以如果此功能能夠做到這一點,我不確定。

回答

0

可以在WHERE子句中使用SDO_GEOM.SDO_WITHIN_DISTANCE來做你想做的事 - 即根據它們與原點形狀的距離來限制行。

2

首先,您需要使用SDO_WITHIN_DISTANCE 操作,而不是SDO_GEOM.WITHIN_DISTANCE 功能。第一個將使用多邊形表上的空間索引執行搜索。第二個不會(也會很慢)。

然後SDO_WITHIN_DISTANCE可能會也可能不是您需要的,具體取決於您在「半徑內」定義的方式。如果您認爲多邊形的最接近的邊框必須在半徑範圍內,那麼SDO_WITHIN_DISTANCE就是您所需要的。

讓我們假設你有一個表區域(ID,幾何)和表位置(ID,幾何),你想找到點42的10公里範圍內的所有領域:

select a.id 
from areas a, locations l 
where l.id=42 
and sdo_within_distance (a.geometry, l.geometry, 'distance=10 unit=km') = 'TRUE'; 

在另一方面如果你想找到那些完全半徑內包含多邊形,然後你需要構建10公里的緩衝區,並使用它作爲一個搜索區域找到匹配的多邊形:

select a.id 
from areas a, locations l 
where l.id=42 
and sdo_inside (
    a.geometry, 
    sdo_geom.sdo_buffer ( 
    l.geometry, 
    10, 
    0.05, 
    'unit=km' 
) 
) = 'TRUE'; 
相關問題