Geo-Zaun: Finden Anzahl von Merkmalen (Punkte / Linien / Polygone) innerhalb eines Polygons mit Oracle räumlichen
-
26-09-2019 - |
Frage
Wie schreibe ich eine SQL-Abfrage (unter Verwendung von Oracle Spatial), um die Anzahl von Merkmalen innerhalb eines Polygons (Geofence) zur Verfügung zu finden;
Die Funktionen können entweder Punkte, Linien oder ein Polygon selbst sein.
Danke.
Lösung
Versuchen Sie diese Aussage:
select count(*) from geometry_table t where SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
/
Es ist mandetory dass der erste Parameter von SDO_RELATE
ist die Geometrie-Säule mit einem räumlichen Index.
Andere Tipps
Update: Ignorieren Sie diesen Vorschlag vollständig, Albert Godfrind sagte er wiederholt, was bereits intern getan. So ist es ineffizient und langsam:
zu Tims Antwort hinzuzufügen, ist es gute Praxis SDO_FILTER und SDO_RELATE aus Leistungsgründen zu kombinieren. SDO_FILTER ist schnell, aber kehrt zu viele Geometrien, wird es Ihnen alle Geometrien, deren Mindest geben umschließende Rechteck (MBR) schneidet Geometrie Ihres Zauns. SDO_RELATE ist genau aber langsam. Also beide kombinieren:
select count(*)
from geometry_table t
where SDO_FILTER(t.geom_column, geofence) = 'TRUE' and SDO_RELATE(t.geom_column, geofence, 'mask=INSIDE') = 'TRUE'
Viele Grüße, Chris