Das Ergebnis eines Prädikats ist manchmal nicht intuitiv. Aus diesem Grund sollten spezielle Fälle getestet werden, um sicherzustellen,
dass die gewünschten Ergebnisse geliefert werden. Beispiel: Damit eine Geometrie eine andere Geometrie enthält (a.ST_Contains(b)=1
) oder eine Geometrie sich innerhalb einer anderen Geometrie befindet (b.ST_Within(a)=1
), müssen sich die Innenbereiche von a und b schneiden und kein Teil von b darf den Außenbereich von a schneiden. Es gibt
jedoch bestimmte Fälle, in denen eine Geometrie als innerhalb einer anderen Geometrie betrachtet werden könnte, dies aber
nicht wird.
Folgende Anweisung gibt z. B. für a.ST_Contains(b)
und b.ST_Within(a)
0 (a ist rot) zurück:
Fall eins und zwei sind offensichtlich: Die lila Geometrien liegen nicht vollständig innerhalb der roten Quadrate. Fall drei und vier sind allerdings nicht so offensichtlich. In beiden Fällen liegen die lila Geometrien nur auf der Grenze der roten Quadrate. ST_Contains betrachtet die lila Geometrien als nicht innerhalb der roten Quadrate liegend, auch wenn sie es anscheinend tun.
ST_Covers und ST_CoveredBy sind Prädikate ähnlich ST_Contains und ST_Within. Der Unterschied liegt darin, dass ST_Covers und ST_CoveredBy nicht erfordern, dass das Innere der beiden Geometrien eine Schnittmenge aufweist. Außerdem haben ST_Covers und ST_CoveredBy häufig einfacher zu verstehende Ergebnisse als ST_Contains und ST_Within.
Wenn die Prädikattests nicht das erwartete Ergebnis liefern, sollten Sie die Methode ST_Relate verwenden, um die getestete Beziehung genau festzulegen.
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |