Die meisten anderen Antworten wurden veröffentlicht, als ArcGIS 10.0 die neueste Software war. Ab ArcGIS 10.1 sind viele neue ArcPy-Funktionen verfügbar. Diese Antwort nutzt diese neue Funktionalität. Es ist nicht für 10.0 geeignet, bietet jedoch eine höhere Leistung und Funktionalität für 10.1 und höher.
import arcpy
input_feature_class = 'C:\your_feature_class.shp'
wkid = 4326 # wkid code for wgs84
spatial_reference = arcpy.SpatialReference(wkid)
fields_to_work_with = ['SHAPE@']
with arcpy.da.SearchCursor(input_feature_class,
fields_to_work_with) as s_cur:
for row in s_cur:
point_in_wgs84 = row[0].projectAs(spatial_reference)
print point_in_wgs84.firstPoint.X, point_in_wgs84.firstPoint.Y
Dieser Code - Schnipsel , die verwendet wkid um ein räumliches Referenzobjekt zu erstellen , anstatt die Eingabe aus einer String - Darstellung, verwendet die modernere Datenzugriff Cursor und Projekte der einzelnen Geometrieobjekte mit Hilfe der projectAs () -Methode .
Um auf James 'Vorschlag näher einzugehen, hier ein minimales Codebeispiel mit Python / arcpy:
quelle
Ganz gleich, ob Sie es Projektion nennen oder nicht, ich bin mir ziemlich sicher, dass Sie per Definition beim Übersetzen der Koordinatenwerte von einem Raumbezugssystem in ein anderes eine Neu- / Neuprojektion durchführen.
Ich bin nicht so vertraut mit ArcPy, aber in ArcGisscripting in Version 9.3 müssten Sie die gesamte Feature-Class projizieren.
Je nachdem, wie komplex ein Projektions- / Transformationsalgorithmus ist, können Sie in der einfachen Python-Mathematik jederzeit eine eigene Projektion für die Koordinaten ausführen. Auf diese Weise können Sie die Wertprojektion auf Feature-Ebene koordinieren.
Wenn Sie offen für die Verwendung der OGR-Python-Bindungen waren, können Sie auf Feature-Ebene in so etwas wie einem "Suchcursor" projizieren.
quelle
In ArcPy 10.0 können keine einzelnen Geometrien projiziert werden. Sie können jedoch ein Feature-Set (oder eine speicherinterne Feature-Class) erstellen und dieses anstelle einer vollständigen Feature-Class in einem Arbeitsbereich auf der Festplatte oder in einer Datenbank irgendwo projizieren.
quelle
Der Hauptgrund, warum ich sehe, dass ich keine Feature-Class erstellen möchte, ist, dass arcpy.CreateFeatureclass_management langsam sein kann. Sie können auch arcpy.da.NumPyArrayTofeatureClass verwenden, was für in_memory-Feature-Classes mehr oder weniger augenblicklich ist:
quelle
quelle