ST_Transform

Definition

ST_Transform konvertiert zweidimensionale ST_Geometry-Daten in den durch die Raumbezugs-ID (SRID) gegebenen Raumbezug.

AchtungAchtung:

Wenn Sie die räumliche Spalte mit der Funktion "st_register_spatial_column" bei der PostgreSQL-Datenbank registriert haben, wird die SRID bei der Registrierung in die Tabelle "sde_geometry_columns" geschrieben. Wenn Sie einen räumlichen Index für die räumliche Tabelle in einer Oracle-Datenbank erstellt haben, wird die SRID zum Zeitpunkt der Erstellung des räumlichen Index in die Tabelle "st_geometry_columns" geschrieben. Wenn "ST_Transform" zum Ändern der SRID der ST_Geometry-Daten verwendet wird, wird die SRID in der Tabelle "sde_geometry_columns" bzw. "st_geometry_columns table" nicht aktualisiert.

Verwenden von "ST_Transform" mit PostgreSQL

In PostgreSQL muss der Raumbezug des Ziels, den Sie für die Transformation angeben, das gleiche geographische Koordinatensystem aufweisen wie der Raumbezug der Quelle in der Spalte "ST_Geometry".

Wenn die Daten in einer Datenbank (statt in einer Geodatabase) gespeichert sind, führen Sie die folgenden Schritte aus, um den Raumbezug der ST_Geometry-Daten zu ändern:

  1. Erstellen Sie eine Sicherungskopie der Tabelle.
  2. Erstellen Sie eine zweite (Ziel-) ST_Geometry-Spalte in der Tabelle.
  3. Registrieren Sie die Ziel-ST_Geometry-Spalte, indem Sie die neue SRID angeben.

    Hiermit wird der Raumbezug der Spalte angegeben, indem ein Datensatz in die Systemtabelle "sde_geometry_columns" eingefügt wird.

  4. Führen Sie "ST_Transform" aus. Legen Sie fest, dass die transformierten Daten in der Ziel-ST_Geometry-Spalte ausgegeben werden.
  5. Heben Sie die Registrierung der ersten (Quell-) ST_Geometry-Spalte auf.

Wenn die Daten in einer Geodatabase gespeichert sind, sollten Sie ArcGIS-Werkzeuge zum Neuprojizieren der Daten in eine neue Feature-Class verwenden. Durch die Ausführung von "ST_Transform" für eine Geodatabase-Feature-Class werden die Funktionen zum Aktualisieren von Geodatabase-Systemtabellen mit der neuen SRID umgangen.

Verwenden von "ST_Transform" mit Oracle

In Oracle können auch Raumbezüge mit verschiedenen geographischen Koordinatensystemen konvertiert werden. Wenn die geographischen Koordinatensysteme unterschiedlich sind, wird eine geographische Transformation ausgeführt. Eine geographische Transformation ist eine Methode zum Konvertieren von Daten zwischen zwei geographischen Koordinatensystemen. Eine geographische Transformation ist in einer bestimmten Richtung definiert, beispielsweise von NAD 1927 nach NAD 1983. Unabhängig davon, welches Koordinatensystem für Quelle und Ziel verwendet wird, wendet die Funktion ST_Transform die Transformation jedoch richtig an.

Geographische Transformationsmethoden lassen sich in zwei Typen einteilen: gleichungsbasierte und dateibasierte Transformationen. Gleichungsbasierte Methoden sind in sich geschlossen und erfordern keine externen Informationen. Bei dateibasierten Methoden werden auf dem Datenträger vorhandene Dateien zum Berechnen von Versatzwerten verwendet. Diese Methoden sind in der Regel genauer als gleichungsbasierte Methoden. Dateibasierte Methoden werden häufig in Australien, Kanada, Deutschland, Neuseeland, Spanien und den USA verwendet. Die Dateien (mit Ausnahme der kanadischen Dateien) können aus einer ArcGIS for Desktop-Installation oder direkt von den verschiedenen nationalen Kartografiebehörden bezogen werden.

Um dateibasierte Transformationen in Oracle zu unterstützen, müssen die Dateien auf dem Oracle-Server in der gleichen relativen Ordnerstruktur wie im pedata-Ordner im ArcGIS for Desktop-Installationsverzeichnis abgelegt werden

Das ArcGIS for Desktop-Installationsverzeichnis enthält beispielsweise einen Ordner namens pedata. Dieser Ordner enthält mehrere Unterordner, aber die drei Ordner, die unterstützte dateibasierte Methoden enthalten, sind harn, nadcon und ntv2. Kopieren Sie den Ordner "pedata" und dessen Inhalt im ArcGIS for Desktop-Installationsverzeichnis des Oracle-Servers, oder erstellen Sie ein Verzeichnis auf dem Oracle-Server, das die Unterverzeichnisse und Dateien der unterstützten dateibasierten Transformationsmethode enthält. Sobald sich die Dateien auf dem Oracle-Server befinden, legen Sie die Betriebssystem-Umgebungsvariable "PEDATAHOME" auf dem Server fest. Legen Sie die Variable "PEDATAHOME" auf den Speicherort des Verzeichnisses fest, das die Unterverzeichnisse und Dateien enthält. Wenn der Ordner "pedata" beispielsweise auf einem Microsoft Windows-Server nach "C:\pedata" kopiert wird, legen Sie die Umgebungsvariable "PEDATAHOME" auf C:\pedata fest.

Weitere Informationen zum Festlegen von Umgebungsvariablen finden Sie in der Dokumentation zu Ihrem Betriebssystem.

Nachdem Sie "PEDATAHOME" festgelegt haben, müssen Sie eine neue SQL-Sitzung starten, bevor Sie die Funktion "ST_Transform" verwenden können. Der Server muss jedoch nicht neu gestartet werden.

Wenn die Daten in einer Datenbank (statt in einer Geodatabase) gespeichert sind und kein räumlicher Index für die räumliche Spalte definiert wurde, können Sie eine zweite ST_Geometry-Spalte hinzufügen und die transformierten Daten in dieser Spalte ausgeben. Sie können die ursprüngliche (Quell-) ST_Geometry-Spalte und die Ziel-ST_Geometry-Spalte in der Tabelle beibehalten, obgleich Sie in ArcGIS jeweils nur eine Spalte anzeigen können, indem Sie eine Ansicht verwenden oder die Definition des Abfrage-Layers für die Tabelle ändern.

Wenn die Daten in einer Datenbank (statt in einer Geodatabase) gespeichert sind und ein räumlicher Index für die räumliche Spalte definiert wurde, können Sie die ursprüngliche ST_Geometry-Spalte nicht beibehalten. Nachdem ein räumlicher Index für eine ST_Geometry-Spalte definiert wurde, wird die SRID in die Metadatentabelle "st_geometry_columns" geschrieben. Diese Tabelle wird nicht mit ST_Transform aktualisiert.

  1. Erstellen Sie eine Sicherungskopie der Tabelle.
  2. Erstellen Sie eine zweite (Ziel-) ST_Geometry-Spalte in der Tabelle.
  3. Führen Sie "ST_Transform" aus. Legen Sie fest, dass die transformierten Daten in der Ziel-ST_Geometry-Spalte ausgegeben werden.
  4. Löschen Sie den räumlichen Indes der Quell-ST_Geometry-Spalte.
  5. Löschen Sie die Quell-ST_Geometry-Spalte.
  6. Erstellen Sie einen räumlichen Index für die Ziel-ST_Geometry-Spalte.

Wenn die Daten in einer Geodatabase gespeichert sind, sollten Sie ArcGIS-Werkzeuge zum Neuprojizieren der Daten in eine neue Feature-Class verwenden. Durch die Ausführung von "ST_Transform" für eine Geodatabase-Feature-Class werden die Funktionen zum Aktualisieren von Geodatabase-Systemtabellen mit der neuen SRID umgangen.

Verwenden von "ST_Transform" mit SQLite

In SQLite können auch Raumbezüge mit verschiedenen geographischen Koordinatensystemen konvertiert werden. Wenn die geographischen Koordinatensysteme unterschiedlich sind, wird eine geographische Transformation ausgeführt. Eine geographische Transformation ist eine Methode zum Konvertieren von Daten zwischen zwei geographischen Koordinatensystemen. Eine geographische Transformation ist in einer bestimmten Richtung definiert, beispielsweise von NAD 1927 nach NAD 1983. Unabhängig davon, welches Koordinatensystem für Quelle und Ziel verwendet wird, wendet die Funktion ST_Transform die Transformation jedoch richtig an.

Geographische Transformationsmethoden lassen sich in zwei Typen einteilen: gleichungsbasierte und dateibasierte Transformationen. Gleichungsbasierte Methoden sind in sich geschlossen und erfordern keine externen Informationen. Bei dateibasierten Methoden werden auf dem Datenträger vorhandene Dateien zum Berechnen von Versatzwerten verwendet. Diese Methoden sind in der Regel genauer als gleichungsbasierte Methoden. Dateibasierte Methoden werden häufig in Australien, Kanada, Deutschland, Neuseeland, Spanien und den USA verwendet. Die Dateien (mit Ausnahme der kanadischen Dateien) können aus einer ArcGIS for Desktop-Installation oder direkt von den verschiedenen nationalen Kartografiebehörden bezogen werden.

Syntax

Quell- und Zielraumbezüge weisen dasselbe geographische Koordinatensystem auf

Oracle und PostgreSQL

sde.st_transform (geometry1 sde.st_geometry, srid integer)

SQLite

st_transform (geometry1 geometryblob, srid in32)

Quell- und Zielraumbezüge weisen nicht dasselbe geographische Koordinatensystem auf

Oracle

sde.st_transform (g1 sde.st_geometry, srid integer, geogtrans_id integer)

SQLite

st_transform (geometry1 geometryblob, srid int32, geogtrans_id int32)

Rückgabetyp

Oracle und PostgreSQL

ST_Geometry

SQLite

Geometryblob

Beispiele

Datentransformation, wenn für Quell- und Zielraumbezüge dasselbe geographische Koordinatensystem verwendet wird.

Im folgenden Beispiel wird die Tabelle "transform_test" erstellt, die über die beiden Linestring-Spalten "ln1" und "ln2" verfügt. Eine Linie wird in die Spalte "In1" mit der SRID 4326 eingefügt. Anschließend wird die ST_Transform-Funktion in einer UPDATE-Anweisung verwendet, um den Linestring in Spalte "ln1" von dem der SRID 4326 zugeordneten Koordinatenbezug in den der SRID 3857 zugeordneten Koordinatenbezug zu konvertieren, und ihn in die Spalte "ln2" einzufügen.

HinweisHinweis:

Die SRIDs 4326 und 3857 haben das gleiche geographische Datum.

Oracle

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);

INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

PostgreSQL

CREATE TABLE transform_test (
 ln1 sde.st_geometry,
 ln2 sde.st_geometry);

INSERT INTO transform_test (ln1) VALUES (
 sde.st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln2 = sde.st_transform (ln1, 3857);

SQLite

CREATE TABLE transform_test (id integer);

SELECT AddGeometryColumn(
 NULL,
 'transform_test',
 'ln1',
 4326,
 'linestring',
 'xy',
 'null'
);

INSERT INTO transform_test (ln1) VALUES (
 st_geometry ('linestring (10.01 40.03, 92.32 29.39)', 4326)
);
UPDATE transform_test
 SET ln1 = st_transform (ln1, 3857);

Datentransformation, wenn für Quell- und Zielraumbezüge nicht das gleiche geographische Koordinatensystem verwendet wird (nur Oracle und SQLite)

Im folgenden Beispiel wird die Tabelle "n27" mit einer ID- und einer Geometriespalte erstellt. Ein Punkt-Wert wird in die Tabelle "n27" mit der SRID 4267 eingefügt. Die SRID 4267 verwendet das geographische Koordinatensystem "NAD 1927".

Als nächstes wird die Tabelle "n83" erstellt und mit der Funktion "ST_Transform" die Geometrie aus der Tabelle "n27" in die Tabelle "n83" eingefügt, allerdings mit der SRID 4269 und der geographischen Transformations-ID 1241. SRID 4269 verwendet das geographische Koordinatensystem "NAD 1983" und 1241 ist die Well-Known-ID für die Transformation "NAD_1927_To_NAD_1983_NADCON". Diese Transformation ist dateibasiert und kann für die 48 kontinentalen US-Bundesstaaten entwickelt verwendet werden.

TippTipp:

Eine Liste der geographischen Transformationen finden Sie im folgenden technischen Artikel und den zugehörigen Listen: http://support.esri.com/en/knowledgebase/techarticles/detail/21327.

Oracle

--Create table.
CREATE TABLE n27 (
 id integer,
 geometry sde.st_geometry
);

--Insert point with SRID 4267.
INSERT INTO N27 (id, geometry) VALUES (
 1, 
 sde.st_geometry ('point (-123.0 49.0)', 4267)
);

--Create the n83 table as the destination table of the transformation.
CREATE TABLE n83 (
 id integer,
 geometry sde.st_geometry
);

--Run the transformation.
INSERT INTO N83 (id, geometry) VALUES (
 1, 
 sde.st_transform (N27.geometry, 4269, 1241)
);

Wenn PEDATAHOME richtig definiert worden ist, hat die Ausführung einer SELECT-Anweisung mit der Tabelle "n83" folgendes Ergebnis:

SELECT id, sde.st_astext (geometry) description 
 FROM N83;

ID	DESCRIPTION
1 | POINT((-123.00130569 48.999828199))

SQLite

--Create source table.
CREATE TABLE n27 (id integer);

SELECT AddGeometryColumn(
 NULL,
 'n27',
 'geometry',
 4267,
 'point',
 'xy',
 'null'
);

--Insert point with SRID 4267.
INSERT INTO n27 (id, geometry) VALUES (
 1, 
 st_geometry ('point (-123.0 49.0)', 4267)
);

--Create the n83 table as the destination table of the transformation.
CREATE TABLE n83 (id integer);

SELECT AddGeometryColumn(
 NULL,
 'n83',
 'geometry',
 4269,
 'point',
 'xy',
 'null'
);

--Run the transformation.
INSERT INTO n83 (id, geometry) VALUES (
 1, 
 st_transform ((select geometry from n27 where id=1), 4269, 1241)
);

Verwandte Themen

5/10/2014