Ein kostengünstiger Test, ob zwei Geometrien in einem angegebenen Abstand voneinander liegen.
geometry-expression.ST_WithinDistanceFilter(geo2,distance[, unit-name])
Name | Typ | Beschreibung |
---|---|---|
geo2 |
ST_Geometry |
Der andere Geometriewert, dessen Entfernung vom geometry-expression gemessen werden soll. |
distance |
DOUBLE |
Der maximale Abstand zwischen den beiden Geometrien. |
unit-name |
VARCHAR(128) |
Die Maßeinheit, in der der distance-Parameter angegeben wird. Dies ist standardmäßig die Einheit des räumlichen Bezugssystems. Der unit-name-Parameter muss mit der UNIT_NAME-Spalte einer Zeile in der ST_UNITS_OF_MEASURE-Ansicht übereinstimmen, wo UNIT_TYPE auf 'LINEAR' eingestellt ist. |
BIT Gibt 1 zurück, wenn geometry-expression und geo2 innerhalb des angegebenen Abstands voneinander liegen könnten, sonst 0.
Die ST_WithinDistanceFilter-Methode bietet einen effizienten Test, um zu ermitteln, ob zwei Geometrien in einem angegebenen Abstand voneinander liegen (wie von der ST_WithinDistance-Methode festgelegt). Gibt 1 zurück, wenn geometry-expression innerhalb des angegebenen Abstands von geo2 liegen könnte, sonst wird 0 zurückgegeben.
Dieser Test ist weniger kostenträchtig als ST_WithinDistance, kann aber in einigen Fällen, in denen der kleinste Abstand zwischen den beiden Geometrien größer als der angegebene Abstand ist, 1 zurückgeben. Aus diesem Grund kann diese Methode als Primärfilter nützlich sein, wenn die weitere Verarbeitung den wahren Abstand zwischen den Geometrien ermittelt.
Die Implementierung von ST_WithinDistanceFilter beruht auf Metadaten, die den gespeicherten Geometrien zugeordnet sind. Da sich die verfügbaren Metadaten je nachdem, wie Daten geladen werden oder wo ST_WithinDistanceFilter in einer Abfrage verwendet wird, von Serverversion zu Serverversion verändern können, kann der Ausdruck geometry-expression.ST_WithinDistanceFilter(geo2, distance [, unit_name ]) unterschiedliche Ergebnisse zurückgeben, wenn geometry-expression nicht innerhalb des angegebenen Abstands geo2 liegt. Wenn geometry-expression innerhalb des angegebenen Abstands von geo2 liegt, gibt ST_WithinDistanceFilter immer 1 zurück.
Standardmäßig verwendet ST_WithinDistanceFilter das Originalformat für eine Geometrie, wenn es verfügbar ist. Andernfalls wird das interne Format verwendet. Weitere Hinweise zu den internen Formaten und Originalformaten finden Sie unter STORAGE FORMAT-Klausel, CREATE SPATIAL REFERENCE SYSTEM-Anweisung.
SQL/MM (ISO/IEC 13249-3: 2006) Erweiterung des Herstellers
Im folgenden Beispiel wird eine geordnete Ergebnismenge mit einer Zeile für jede Form zurückgegeben, die innerhalb des Abstands von 1,4 des Punkts (2,3) liegt. Das Ergebnis enthält eine Form, die nicht innerhalb des angegebenen Abstands liegt.
SELECT ShapeID, ROUND( Shape.ST_Distance( NEW ST_Point( 2, 3 ) ), 2 ) AS dist FROM SpatialShapes WHERE ShapeID < 17 AND Shape.ST_WithinDistanceFilter( NEW ST_Point( 2, 3 ), 1.4 ) = 1 ORDER BY dist |
Die Abfrage erzeugt die folgende Ergebnismenge:
ShapeID | DIST |
---|---|
2 |
0.0 |
3 |
0.0 |
5 |
1.0 |
6 |
1.21 |
16 |
1.41 |
Im folgenden Beispiel werden Punkte erstellt, die Halifax, NS und Waterloo, ON, in Kanada darstellen. ST_WithinDistanceFilter wird verwendet, um zu zeigen, dass der Abstand zwischen zwei Punkten geringer als 850 Meilen sein könnte, aber sicher nicht geringer als 750 Meilen ist. In diesem Beispiel wird vorausgesetzt, dass die st_geometry_predefined_uom-Funktion von der sa_install_feature-Systemprozedur installiert wurde. Siehe sa_install_feature-Systemprozedur.
SELECT NEW ST_Point( -63.573566, 44.646244, 4326 ) .ST_WithinDistanceFilter( NEW ST_Point( -80.522372, 43.465187, 4326 ) , 850, 'Statute mile' ) within850, NEW ST_Point( -63.573566, 44.646244, 4326 ) .ST_WithinDistanceFilter( NEW ST_Point( -80.522372, 43.465187, 4326 ) , 750, 'Statute mile' ) within750 |
Die Abfrage erzeugt die folgende Ergebnismenge:
within850 | within750 |
---|---|
1 |
0 |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |