Definition
ST_Transform verwendet zweidimensionale ST_Geometry-Daten als Eingabe und gibt Werte zurück, die in den durch die Raumbezugs-ID (SRID) angegebenen Raumbezug konvertiert werden.
Wenn die geographischen Koordinatensysteme unterschiedlich sind, führt ST_Transform eine geographische Transformation aus. 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 Desktop-Installation oder direkt von den verschiedenen nationalen Kartografiebehörden bezogen werden.
Um dateibasierte Transformationen zu unterstützen, müssen die Dateien auf dem Datenbankserver in der gleichen relativen Ordnerstruktur wie im pedata-Ordner im ArcGIS Desktop- oder ArcGIS Pro-Installationsverzeichnis abgelegt werden.
Beispielsweise gibt es im ArcMap-Installationsverzeichnis und im pedata-Ordner des ArcGIS Pro-Installationsverzeichnisses einen Ordner mit der Bezeichnung Resources. Der Ordner pedata 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 aus dem ArcGIS-Installationsverzeichnis auf den Datenbankserver, oder erstellen Sie ein Verzeichnis auf dem Datenbankserver, das die Unterverzeichnisse und Dateien der unterstützten dateibasierten Transformationsmethode enthält. Sobald sich die Dateien auf dem Datenbankserver befinden, legen Sie die Betriebssystem-Umgebungsvariable "PEDATAHOME" auf dem gleichen 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.
Verwenden von "ST_Transform" mit PostgreSQL
In PostgreSQL können auch Raumbezüge mit verschiedenen geographischen Koordinatensystemen konvertiert werden.
Wenn die geographischen Koordinatensysteme gleich sind und 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:
- Erstellen Sie eine Sicherungskopie der Tabelle.
- Erstellen Sie eine zweite (Ziel-) ST_Geometry-Spalte in der Tabelle.
- 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.
- Führen Sie "ST_Transform" aus. Legen Sie fest, dass die transformierten Daten in der Ziel-ST_Geometry-Spalte ausgegeben werden.
- 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 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 Spalte, die 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. Verwenden Sie dazu eine Ansicht, oder ändern Sie die Definition des Abfrage-Layers für die Tabelle.
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.
- Erstellen Sie eine Sicherungskopie der Tabelle.
- Erstellen Sie eine zweite (Ziel-) ST_Geometry-Spalte in der Tabelle.
- Führen Sie "ST_Transform" aus. Legen Sie fest, dass die transformierten Daten in der Ziel-ST_Geometry-Spalte ausgegeben werden.
- Löschen Sie den räumlichen Index der Quell-ST_Geometry-Spalte.
- Löschen Sie die Quell-ST_Geometry-Spalte.
- 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.
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)
PostgreSQL
Option 1: sde.st_transform (g1 sde.st_geometry, srid int)
Option 2: sde.st_transform (g1 sde.st_geometry, srid int, [geogtrans_id int])
Option 3: sde.st_transform (g1 sde.st_geometry, srid int, [extent double] [prime meridian double] [unit conversion factor double])
In Option 3 haben Sie die Möglichkeit, die Ausdehnung als kommagetrennte Liste mit Koordinaten in der folgenden Reihenfolge anzugeben: X-Koordinate unten links, Y-Koordinate unten links, X-Koordinate oben rechts, Y-Koordinate oben rechts. Wird keine Ausdehnung angegeben, verwendet ST_Transform eine größere, allgemeinere Ausdehnung.
Bei der Angabe einer Ausdehnung können Informationen zum Nullmeridian sowie zu Einheitenumrechnungsfaktoren optional weggelassen werden. Diese Informationen werden nur dann benötigt, wenn die angegebenen Werte für die Ausdehnung weder den Nullmeridian von Greenwich noch Dezimalgradangaben verwenden.
In der EPSG Geodetic Parameter Registry sind weitere vordefinierte Nullmeridiane aufgeführt.
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 Funktion "ST_Transform" 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.
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.
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. Für SRID 4267 wird das geographische Koordinatensystems NAD 1927 verwendet.
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. Für SRID 4269 wird das geographische Koordinatensystems NAD 1983 verwendet, und 1241 ist eine bekannte 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.
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)(
select c.id, sde.st_transform (c.geometry, 4269, 1241)
from N27 c
);
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))
PostgreSQL
--Option 1
--Gets geographic transformation from ST_Geometry libraries.
--Does not require you to provide a GTid.
--Performs an equation-based transformation between two geographic coordinate systems
--with different datums. (SRID 4267/DATUM NAD27 to SRID 4269/DATUM NAD 83)
--Provide point to transform.
SELECT sde.ST_AsText(sde.ST_Transform(
sde.ST_Geometry('point (-155.7029 63.6096)',4267), 4269));
--Returns output in SRID 4269.
"POINT ( -155.70290000 63.60960000)"
--Option 2
--Example uses input point in SRID 3857(DATUM: WGS 1984)
--and geographic transformation ID (GTid) 1251.
--Transforms point to SRID 102008 (DATUM: NAD 83)
--Provide point to transform.
SELECT sde.ST_AsText(sde.ST_Transform(
sde.ST_Geometry('point (-13244252.9404 4224702.5198)', 3857), 102008, 1251));
--Returns output in SRID 102008.
"POINT (-1957193.14740000 -297059.19680000)"
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)
);