La mayoría de las otras respuestas se publicaron cuando ArcGIS 10.0 era el último software. En ArcGIS 10.1, mucha nueva funcionalidad de ArcPy estuvo disponible. Esta respuesta aprovecha esa nueva funcionalidad. No será adecuado para 10.0, pero ofrece un mayor rendimiento y funcionalidad para 10.1 y posteriores.
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
Este fragmento de código usa el wkid para crear un objeto de referencia espacial en lugar de escribir una representación de cadena, usa los cursores de acceso a datos más modernos y proyecta los objetos de geometría individuales usando el método projectAs () .
Para ampliar la sugerencia de James, aquí hay un ejemplo de código mínimo usando Python / arcpy:
fuente
Ya sea que lo llames proyección o no, estoy bastante seguro de que, por definición, cuando estás traduciendo los valores de coordenadas de un sistema de referencia espacial a otro, estás re-proyectando.
No estoy tan familiarizado con ArcPy, pero en arcgisscripting en 9.3, tendría que proyectar toda la clase de entidad.
Dependiendo de qué tan complejo sea el algoritmo de proyección / transformación que necesite, siempre puede obtener su propia proyección para las coordenadas en matemáticas básicas de Python. Esto le permitiría coordinar la proyección del valor a nivel de entidad.
Si estaba abierto a usar los enlaces de Python de OGR, puede proyectar en el nivel de característica dentro de algo como un 'cursor de búsqueda'.
fuente
En ArcPy 10.0 no hay capacidad de proyectar geometrías individuales. Sin embargo, puede crear un conjunto de características (o una clase de entidad en memoria) y proyectarlo en lugar de una clase de entidad completa en un espacio de trabajo en el disco o en una base de datos en algún lugar.
fuente
La razón principal por la que puedo ver que no quiero crear una clase de entidad es porque arcpy.CreateFeatureclass_management puede ser lento. También puede usar arcpy.da.NumPyArrayTofeatureClass, que es más o menos instantáneo para las clases de entidad in_memory:
fuente
fuente