2011-01-06 15 views

Antwort

2

diese Aussage Versuchen:

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 die Geometrie Spalte mit einem räumlichen Index ist.

+0

Dank Tim für die Antwort. Ich war eine ganze Weile von der Arbeit entfernt und konnte auf Ihre Antwort nicht antworten. Dies funktioniert perfekt. – Abdul

+0

Sie können die einfachere Syntax verwenden: SDO_INSIDE (t.geom_column, geofence) = 'TRUE'. Es hat genau den gleichen Effekt, ist aber einfacher zu schreiben. –

-1

Update: Ignorieren Sie diesen Vorschlag vollständig, Albert Godfrind sagte, es wiederholt, was bereits intern getan wird. So ist es ineffizient und langsam:

Um zu Tims Antwort hinzuzufügen, ist es gute Praxis, SDO_FILTER und SDO_RELATE aus Leistungsgründen zu kombinieren. SDO_FILTER ist schnell, gibt aber zu viele Geometrien zurück. Dadurch erhalten Sie alle Geometrien, deren minimales begrenzendes Rechteck (MBR) die Geometrie Ihres Zauns schneidet. SDO_RELATE ist genau aber langsam. So beides 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' 

Grüße, Chris

+1

Sorry, aber das ist * total falsch *. Wenn Sie das tun, was Sie vorschlagen, wird die Abfrage langsamer ausgeführt. Der SDO_RELATE-Operator wendet automatisch den "Primärfilter" an (d. H. Das Äquivalent des SDO_FILTER-Operators). –

+0

Hoppla, das wusste ich noch nicht, war es schon immer so? In diesem Fall entschuldige ich mich und bearbeite meinen Kommentar, sodass niemand meine ineffiziente Abfrage verwendet. – cmenke

Verwandte Themen