Más

¿Cambiar la proyección del marco de datos de .MXD a la zona UTM que coincide con cada polígono en el cursor de ArcPy?

¿Cambiar la proyección del marco de datos de .MXD a la zona UTM que coincide con cada polígono en el cursor de ArcPy?


Tengo un shapefile de polígono.

Usé scripts de ArcPy para:

  • agregar un nuevo campo al shapefile
  • use Calcular zonas UTM en cada polígono.

Escupe información de proyección UTM en el campo que agregué.

Me gustaría usar un cursor para recorrer cada fila de la tabla de atributos del shapefile del polígono, usando este campo agregado.

Para cada fila del campo, el cursor:

  • Cambiar la proyección de todo el marco de datos en el .MXD a la proyección UTM en el campo UTM calculado para ese polígono <- La parte con la que necesito ayuda.
  • Zoom al polígono (con un margen de 1400%)
  • Exportar un PDF
  • (Seguir)
  • (al final): combine todos los archivos PDF en un libro y elimine los extras.

Todo lo que he podido encontrar hasta ahora son scripts que cambian a cosas en archivos de proyección, o a una proyección determinada. ¿Se pueden utilizar los cálculos de zona UTM de este comando de esta manera, para alterar la proyección? No estoy seguro de cómo hacerlo si es así.

-

Intenté hacer algo similar con las páginas controladas por datos, usando la zona UTM calculada como referencia espacial en la configuración de la página impulsada por datos, pero no está cambiando la proyección por alguna razón, que es el punto completo de este código, así que este es el alternativa que se me ocurrió.

=================

OP aquí de nuevo.

Probablemente debería señalar que soy un novato serio en Python.

He mirado el ejemplo del archivo .PRJ pero, sinceramente, no lo entiendo.

Intenté usar WKID, pero tampoco hicieron lo que yo quería; solo quiero usar la información que ya tengo, si puedo, de los UTM calculados. Sus datos se ven así para cada fila de la tabla:

PROJCS ["GCS WGS 1984 UTM Zone 57H (Calculated)", GEOGCS ["GCS_WGS_1984", DATUM ["D_WGS_1984", SPHEROID ["WGS_1984", 6378137.0,298.257223563]], PRIMEM ["Greenwich", 0.0], UNIT Grado ", 0.0174532925199433]], PROYECCIÓN [" Transverse_Mercator "], PARAMETER [" False_Easting ",

Tengo este código que estoy tratando de modificar para hacer lo que quiero y simplemente no funciona.

(unique_name se define como el shapefile UTM en otra parte del código)

fc = unique_name cursor = arcpy.da.UpdateCursor (fc, ["UTM_Zone"]) con arcpy.da.UpdateCursor (fc, ["UTM_Zone"]) como cursor: para la fila en el cursor: inData = fc coordenadaSystem = fila [0 ] arcpy.DefineProjection_management (inData, sistema de coordenadas)

Mi pensamiento fue, si inData es el shapefile, UTM_Zone es el campo que quiero usar, y las proyecciones están en cada fila del campo UTM_Zone, esto funcionaría.

Busqué en otro lugar cómo borrar la proyección para poder definirla con este código y obtuve esto, que no está fallando, pero tampoco sé si es el código adecuado para hacer esto.

try: newSpatialReference = arcpy.SpatialReference () newSpatialReference.loadFromString ('{B286C06B-0879-11D2-AACA-00C04FA33C20}') print "" print "* SUCCESS: Se borró la referencia espacial del mapa." excepto Excepción como ex: print ex.args [0]

¿Ayuda?


El código que creo que necesitas para dónde estás atascado es algo que acabo de tomar de uno de mis cursos de capacitación. Utiliza Zonas MGA en Australia, pero puede pensar que son las mismas que las Zonas UTM que está utilizando.

El truco consiste en hacer zoom a la extensión de cada polígono usando el cursor y mientras está en esa extensión determinar su punto medio en la dirección X y luego usar una fórmula para convertir eso en el número de zona relevante para cambiar la referencia espacial del marco de datos.

extStr = str (df.extent) xMin = extStr.split () [0] xMax = extStr.split () [2] xCen = (float (xMax) + float (xMin)) / 2 mgaZone = str (1 + int ((xCen + 180) / 6)) sr = arcpy.SpatialReference ("GDA 1994 MGA Zone {0}". formato (mgaZone)) df.spatialReference = sr

También te recomiendo que cambies:

  • Cambie la proyección de todo el marco de datos en .MXD a la proyección UTM en el campo UTM calculado para ese polígono <- La parte con la que necesito ayuda.
  • Zoom al polígono (con un margen de 1400%)

para:

  • Zoom al polígono (con un margen de 1400%)
  • Cambie la proyección de todo el marco de datos en .MXD a una Zona UTM calculada para ese polígono usando un código como el de esta respuesta <- La parte con la que necesito ayuda.

porque la determinación de la Zona UTM apropiada para un polígono es, creo, más fácil de hacer después de que su extensión haya cambiado a una centrada en ese polígono.


Ver el vídeo: Tema 8. Crea un polígono a partir de coordenadas UTM en ArcMap