Sebagian besar jawaban lain semuanya diposting ketika ArcGIS 10.0 adalah perangkat lunak terbaru. Di ArcGIS 10.1, banyak fungsionalitas ArcPy baru tersedia. Jawaban ini memanfaatkan fungsionalitas baru itu. Ini tidak akan cocok untuk 10.0 tetapi menawarkan peningkatan kinerja dan fungsionalitas untuk 10.1 dan yang lebih baru.
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
Cuplikan kode ini menggunakan wkid untuk membuat objek referensi spasial daripada mengetik representasi string, menggunakan kursor akses data yang lebih modern , dan memproyeksikan objek geometri individual menggunakan metode projectAs () .
Untuk menguraikan saran James, berikut adalah contoh kode minimal menggunakan Python / arcpy:
sumber
Apakah Anda menyebutnya proyeksi atau tidak, saya cukup yakin bahwa menurut definisi, ketika Anda menerjemahkan nilai koordinat dari satu sistem referensi spasial ke yang lain, Anda sedang kembali / tidak memproyeksikan.
Saya tidak begitu mengenal ArcPy, tetapi dalam arcgisscripting di 9.3, Anda harus memproyeksikan seluruh kelas fitur.
Bergantung pada seberapa rumitnya algoritma proyeksi / transormasi yang Anda butuhkan, Anda selalu dapat menggulirkan proyeksi Anda sendiri untuk koordinat dalam matematika python dasar. Ini akan memungkinkan Anda untuk mengoordinasikan proyeksi nilai di tingkat fitur.
Jika Anda terbuka untuk menggunakan binding python OGR, Anda dapat memproyeksikan pada tingkat fitur dalam sesuatu seperti 'kursor pencarian'.
sumber
Di ArcPy 10.0 tidak ada kemampuan untuk memproyeksikan geometri individu. Namun, Anda dapat membuat kumpulan fitur (atau kelas fitur di-memori) dan memproyeksikan bahwa alih-alih kelas fitur lengkap di ruang kerja pada disk atau di database di suatu tempat.
sumber
Alasan utama yang saya lihat tidak ingin membuat kelas fitur adalah karena arcpy.CreateFeatureclass_management bisa lambat. Anda juga dapat menggunakan arcpy.da.NumPyArrayTofeatureClass, yang lebih atau kurang instan untuk kelas fitur in_memory:
sumber
sumber