La plupart des autres réponses ont toutes été publiées lorsque ArcGIS 10.0 était le dernier logiciel. Dans ArcGIS 10.1, de nombreuses nouvelles fonctionnalités ArcPy sont devenues disponibles. Cette réponse tire parti de cette nouvelle fonctionnalité. Il ne conviendra pas à 10.0 mais offre des performances et des fonctionnalités accrues pour 10.1 et versions ultérieures.
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
Cet extrait de code utilise le wkid pour créer un objet de référence spatiale plutôt que de taper une représentation sous forme de chaîne, utilise les curseurs d'accès aux données plus modernes et projette les objets de géométrie individuels à l'aide de la méthode projectAs () .
Pour développer la suggestion de James, voici un exemple de code minimal utilisant Python / arcpy:
la source
Que vous l'appeliez projection ou non, je suis à peu près sûr que par définition, lorsque vous traduisez les valeurs de coordonnées d'un système de référence spatial à un autre, vous êtes en train de re / dé-projeter.
Je ne suis pas très familier avec ArcPy, mais dans arcgisscripting à 9.3, vous devrez projeter toute la classe d'entités.
Selon la complexité d'un algorithme de projection / transormation dont vous avez besoin, vous pouvez toujours rouler votre propre projection pour les coordonnées en mathématiques de base de python. Cela vous permettrait de coordonner la projection des valeurs au niveau de l'entité.
Si vous étiez ouvert à l'utilisation des liaisons Python OGR, vous pouvez projeter au niveau de la fonctionnalité dans quelque chose comme un «curseur de recherche».
la source
ArcPy 10.0 ne permet pas de projeter des géométries individuelles. Cependant, vous pouvez créer un ensemble d'entités (ou une classe d'entités en mémoire) et le projeter à la place d'une classe d'entités complète dans un espace de travail sur le disque ou dans une base de données quelque part.
la source
La principale raison pour laquelle je vois que je ne souhaite pas créer une classe d'entités est que l'arcpy.CreateFeatureclass_management peut être lent. Vous pouvez également utiliser arcpy.da.NumPyArrayTofeatureClass, qui est plus ou moins instantané pour les classes d'entités in_memory:
la source
la source