Zusammenfassung
Konvertiert die Koordinaten von Eingabe-Features von einer Position in eine andere durch Skalieren, Verschieben und Drehen basierend auf den Transformations-Links zwischen bekannten entsprechenden Passpunkten.
Verwendung
-
Als Eingabe-Features können Punkte, Linien oder Polygone verwendet werden.
-
Eingabe-Link-Features sind Linien, die Transformations-Links zwischen bekannten entsprechenden Passpunkten darstellen. Der Startpunkt eines Links ist die Quellposition des Passpunktes und der Endpunkt des Links ist die entsprechende Zielposition des Passpunktes.
-
Die Transformation funktioniert in einem kartesischen oder planaren Koordinatensystem. Es wird dringend ein projiziertes Koordinatensystem empfohlen. Die Verwendung eines geographischen Koordinatensystems mit Breitengrad- und Längengradwerten kann zu unerwünschter Verzerrung oder zu Berechnungsfehlern führen.
-
Alle Eingabe-Features werden mit einer der drei Transformationsmethoden transformiert: affine, Ähnlichkeits- und projektive Transformation; jede Methode erfordert eine Mindestanzahl an Transformations-Links. Weitere Informationen einschließlich Transformationsformeln finden Sie unter Transformation für räumlichen Anpassung.
- AFFINE – Für die affine Transformation werden mindestens drei Transformations-Links benötigt.
- PROJECTIVE – Für die projektive Transformation sind mindestens vier Transformations-Links erforderlich.
- SIMILARITY – Für die Ähnlichkeitstransformation werden mindestens zwei Transformations-Links benötigt.
Das transformierte Ergebnis hängt von der Qualität der Eingabe-Links ab. Ein Link sollte von einer bekannten Quellposition starten und an der entsprechenden Zielposition enden, die auch als Passpunkte bezeichnet werden. Je besser die Passpunkte festgelegt sind, desto genauer fällt das transformierte Ergebnis aus. Die Koordinaten der Anfangs- und Zielpositionen der Links dienen zur Ableitung der Transformationsparameter, die den bestmöglichen Kompromiss zwischen den Quell- und Zielpasspunkten darstellen. Auch wenn Sie die Transformationsparameter verwenden, um die tatsächlichen Quellpasspunkte zu transformieren, stimmen die resultierenden Positionen nicht mit den Positionen der Zielpasspunkte überein. Dieser Fehler wird als Restklaffe bezeichnet und für jeden Transformations-Link erstellt. Die Restklaffe für Eingabe-Links kann als Option an eine Tabelle ausgegeben werden, die die folgenden Felder enthält:
- Orig_FID: Die ID des Eingabe-Link-Features
- X_Source: Die X-Koordinate der Quell- oder Von-Endposition des Links
- Y_Source: Die Y-Koordinate der Quell- oder Von-Endposition des Links
- X_Destination: Die X-Koordinate der Ziel- oder Bis-Endposition des Links
- Y_Destination: Die Y-Koordinate der Ziel- oder Bis-Endposition des Links
- Residual_Error: Die Restklaffe der transformierten Position
RMSE-Fehler (Root Mean Square Error), der auch als RMSD-Abweichung (root mean square deviation) bezeichnet wird, wird basierend auf der Restklaffe berechnet und gibt im Allgemeinen die Qualität der abgeleiteten Transformation an. Der RMSE-Wert wird an die Verarbeitungsmeldungen ausgegeben. Er ist auch ein abgeleiteter Ausgabeparameter, der in einem Skript oder Modell-Workflow verwendet werden kann.
Weitere Informationen zu den Berechnungen der Restklaffe und zu RMSE finden Sie im Abschnitt "Mathematischer Rest- und Durchschnittswert" unter Transformation für räumliche Anpassung. Sie müssen den zulässigen RMSE-Wert basierend auf Ihrem Wissen über die Positionsgenauigkeit der Eingabe-Features und der Passpunkte bestimmen. Wenn der RMSE-Wert zu hoch ist, müssen Sie die Restklaffe überprüfen und verwerfen oder die Links mit hoher Restklaffe ersetzen.
Syntax
TransformFeatures_edit (in_features, in_link_features, {method}, {out_link_table})
Parameter | Erläuterung | Datentyp |
in_features | Eingabe-Features, deren Koordinaten transformiert werden sollen. | Feature Layer |
in_link_features | Eingabe-Link-Features, die bekannte Passpunkte für die Transformation verknüpfen. | Feature Layer |
method (optional) | Transformationsmethode für die Konvertierung von Eingabe-Feature-Koordinaten.
| String |
out_link_table (optional) | Die Ausgabetabelle mit Eingabe-Links und der jeweils zugehörigen Restklaffe. | Table |
Codebeispiel
TransformFeatures – Beispiel 1 (Python-Fenster)
Das folgende Skript veranschaulicht, wie die Funktion "TransformFeatures" im Python-Fenster unmittelbar ausgeführt wird.
import arcpy
arcpy.env.workspace = "C:/data"
arcpy.TransformFeatures_edit("source_Roads.shp","control_Links.shp",
"AFFINE")
TransformFeatures – Beispiel 2 (eigenständiges Python-Skript)
Das folgende Python-Skript ist ein Beispiel für die Anwendung der Funktion "TransformFeatures" in einem eigenständigen Skript innerhalb einer Scripting-Umgebung.
import arcpy
import os
# Set geoprocessing environments
arcpy.env.overwriteOutput = True
# function to convert link info in a text file to a line feature class
def CreateLinkFeatures(in_text_file, in_data):
sr = arcpy.Describe(in_data).spatialReference
features = [] # a list to hold polyline geometry objects
f = open(in_text_file, "r")
for line in f.readlines():
# take start/end blank spaces off
# separate the start and end point coordinates
points = line.strip().split()
point1 = arcpy.Point(float(points[1]), float(points[2]))
point2 = arcpy.Point(float(points[3]), float(points[4]))
features.append(arcpy.Polyline(arcpy.Array([point1, point2]), sr))
f.close() # close the text file
# copy the geometry objects into a feature class named Links
result = arcpy.CopyFeatures_management(features, in_data + "_links")
return result.getOutput(0)
if __name__ == "__main__":
# Make a copy of the data because
# TransformFeatures tool modifies the input data
arcpy.CopyFeatures_management(r"C:\data\Tutorial.gdb\Parcels", r"C:\data\Tutorial.gdb\Parcels_copy")
links_file = r"C:\data\TF_links.txt"
tf_link_features = CreateLinkFeatures(links_file, r"C:\data\Tutorial.gdb\Parcels")
try:
arcpy.TransformFeatures_edit(r"C:\data\Tutorial.gdb\Parcels_copy", tf_link_features)
print(arcpy.GetMessages())
except arcpy.ExecuteError as aex:
print(arcpy.GetMessages(2))
except Exception as ex:
print(ex.args[0])