Benutzer- und Referenzhandbuch

Verschachtelung

Mehrere verschachtelte Geometriefunktionen können ein Problem darstellen, wenn die innere verschachtelte Funktion einen Geometrietyp zurückgibt, der von der äußeren aufrufenden Funktion nicht akzeptiert wird. Dieses Problem lässt sich beheben, wenn der Geometrietyp der inneren verschachtelten Funktion in einen Typ umgewandelt werden kann, der von der äußeren aufrufenden Funktion akzeptiert wird.

ST_Geometry in einen Subtyp umwandeln

Der Geometrietyp von Funktionen, die den übergeordneten Typ ST_Geometry zurückgeben, kann mit der Funktion Treat in einen Subtyp umgewandelt werden. ST_Geometry-Werte werden z. B. von der Funktion ST_Union zurückgegeben. Wenn ST_Union innerhalb der Funktion ST_PointOnSurface verschachtelt ist, gibt ST_PointOnSurface den folgenden Fehler zurück:

SQL00440N No function by the name "ST_POINTONSURFACE" 
having compatible arguments was found in the function 
path.    SQLSTATE=42884

Die Funktion ST_PointOnSurface akzeptiert die Geometrietypen ST_Polygon und ST_MultiPolygon, nicht jedoch den von ST_Union zurückgegebenen Typ ST_Geometry, und zwar auch dann nicht, wenn die Funktion ST_Union den Wert ST_MultiPolygon zurückgibt. In diesem Fall muss daher der Geometrietyp der Funktion ST_Union in ST_MultiPolygon umgewandelt werden.

Bei einer Selbstverknüpfung der Tabelle COUNTIES durch die Vereinigung ihrer Polygonspalte COUNTY müsste die Funktion Treat auf das Ergebnis der Funktion ST_Union angewandt werden, um den Typ ST_Geometry in den Typ ST_MultiPolygon umzuwandeln. Erst dann könnte die Funktion ST_PointOnSurface angewandt werden.

SELECT ST_Astext(ST_PointOnSurface(
          TREAT ( ST_Union(c1.county, c2.county) AS ST_MultiPolygon))) 
FROM counties AS c1, counties AS c2;
 

Wenn die Funktion ST_Union den Wert ST_MultiPolygon zurückgibt, wandelt die Funktion Treat diesen Wert in den Datentyp ST_MultiPolygon um. Wenn die Funktion ST_Union keinen ST_MultiPolygon-Wert zurückgibt, gibt die Funktion Treat einen Laufzeitfehler zurück.

Weitere Informationen über die Vorgehensweise bei Subtypen enthält das Handbuch SQL Reference.

Eine Gruppe in eine Basisgeometrie umwandeln

Mit der Funktion ST_GeometryN können Sie ein Element einer Geometriegruppe in eine Basisgeometrie umwandeln, die von der äußeren aufrufenden Funktion benötigt wird.

Der von der Funktion ST_Union zurückgegebene Wert z. B. ist immer eine als ST_Geometry zurückgegebene Geometriegruppe. Mit der Funktion Treat können Sie den Typ ST_Geometry in einen der folgenden Subtypen umwandeln: ST_MultiPoint, ST_MultiLineString, ST_MultiPolygon, ST_GeomCollection, ST_MultiCurve oder ST_MultiSurface. Durch Anwenden der Funktion ST_ GeometryN auf die Ausgabe der Funktion Treat wandeln Sie die Geometriegruppe in eine Basisgeometrie um.

Zur Anwendung der Funktion ST_ExteriorRing auf die Ergebnisse der Funktion ST_Union aus dem Beispiel im vorhergehenden Abschnitt z. B. extrahieren Sie zunächst anhand der Funktion ST_GeometryN ein Polygonelement.

SELECT ST_AsText(ST_ExteriorRing(ST_GeometryN(
          TREAT ( ST_Union(c1.county, c2.county) AS ST_MultiPolygon ), 1)))
FROM   counties AS c1, counties AS c2;

Der Umsetzungsausdruck ist nur beim Übergang von einem übergeordneten zu einem untergeordneten Typ der Hierarchie erforderlich. Weitere Informationen über die Vorgehensweise bei Subtypen enthält das Handbuch SQL Reference.


[ Seitenanfang | Vorherige Seite | Nächste Seite ]