Geo Fence: найдите количество объектов (точек / линий / многоугольников) внутри многоугольника, используя пространственный оракул

Как написать SQL-запрос (с использованием Oracle Spatial), чтобы найти количество функций, доступных внутри многоугольника (геозона);

Объектами могут быть либо точки, линии или сам многоугольник.

Благодарю.

2 ответа

Решение

Попробуйте это утверждение:

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' 

С уважением, Крис

Другие вопросы по тегам