Fence Geo: Encontre o número de recursos (pontos/linhas/polígonos) dentro de um polígono usando o Oracle Spatial
-
26-09-2019 - |
Pergunta
Como escrevo uma consulta SQL (usando o Oracle Spatial) para encontrar o número de recursos disponíveis dentro de um polígono (geofence);
Os recursos podem ser pontos, linhas ou um próprio polígono.
Obrigado.
Solução
Experimente essa afirmação:
select count(*) from geometry_table t where SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
/
É mandetório que o primeiro parâmetro de SDO_RELATE
é a coluna de geometria com um índice espacial.
Outras dicas
ATUALIZAÇÃO: Desconsidere completamente essa sugestão, Albert Godfrind disse que está repetindo o que já está sendo feito internamente. Portanto, é ineficiente e lento:
Para adicionar ao Tims Responder, é uma boa prática combinar SDO_Filter e SDO_Relate por razões de desempenho. O SDO_Filter é rápido, mas retorna muitas geometrias, ele fornecerá todas as geometrias cujo retângulo delimitado mínimo (MBR) se cruze com a geometria da sua cerca. Sdo_relate é exato, mas lento. Então, combine os dois:
select count(*)
from geometry_table t
where SDO_FILTER(t.geom_column, geofence) = 'TRUE' and SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
Atenciosamente, Chris