我試圖實現一個函數,該函數返回包含表示特定半徑(距離)內多邊形(描述區域)的表的所有條目。我發現功能SDO_GEOM.SDO_WITHIN_DISTANCE
並閱讀this post。Oracle Spatial(Locator) - 在距離/半徑內查找多邊形
由於這是一種理論方法,我沒有真正的數據 - 而且我不是母語的人,所以如果此功能能夠做到這一點,我不確定。
我試圖實現一個函數,該函數返回包含表示特定半徑(距離)內多邊形(描述區域)的表的所有條目。我發現功能SDO_GEOM.SDO_WITHIN_DISTANCE
並閱讀this post。Oracle Spatial(Locator) - 在距離/半徑內查找多邊形
由於這是一種理論方法,我沒有真正的數據 - 而且我不是母語的人,所以如果此功能能夠做到這一點,我不確定。
可以在WHERE
子句中使用SDO_GEOM.SDO_WITHIN_DISTANCE
來做你想做的事 - 即根據它們與原點形狀的距離來限制行。
首先,您需要使用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';