Geo Proke: найдите количество функций (точек / линий / многоугольников) внутри многоугольника с использованием Oracle Spatial
-
26-09-2019 - |
Вопрос
Как писать запрос SQL (используя Oracle Spatial), чтобы найти количество функций, доступных внутри полигона (Geofence);
Особенности могут быть либо точки, строки, либо самими многоугольником.
Спасибо.
Решение
Попробуйте это утверждение:
select count(*) from geometry_table t where SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
/
Это должен, что первый параметр SDO_RELATE
это колонна геометрии с пространственным индексом.
Другие советы
Обновление: Не обращайте внимания на это предложение полностью, Альберт Боже, сказал, что это повторяется, что уже делается внутри. Так что это неэффективно и медленно:
Чтобы добавить в TIMS Ответить, хорошая практика для объединения SDO_Filter и SDO_RELATE для поведенческих причин. SDO_Filter - это быстро, но возвращает слишком много геометрии, он даст вам все геометрии, чья минимальный ограничивающий прямоугольник (MBR) пересекается с геометрией вашего забора. SDo_relate точно, но медленно. Так что объедините оба:
select count(*)
from geometry_table t
where SDO_FILTER(t.geom_column, geofence) = 'TRUE' and SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
С уважением, Крис