29 votos

¿Definición de proyecciones para múltiples shapefiles en ArcMap?

Tengo más de 100 archivos de forma que no tienen archivo .prj y por lo tanto cuando los traigo a ArcMap 10 muestran el sistema de coordenadas como desconocido. Sé que el sistema de coordenadas de todos los archivos shape es GCS WGS 1984. También sé que puedo utilizar la herramienta Definir Proyección GP para asignar individualmente el sistema de coordenadas a cada archivo, pero eso tomará una eternidad.

Esperaba que hubiera una herramienta de GP para definirlas por lotes, pero no la veo. Luego pensé que tal vez podría usar python para hacer esto, así que busqué en el menú de ayuda y encontré un script, pero me da un error.

Aquí está el código python que probé (esto es para un solo archivo shp por lo que todavía tendría el dolor de escribir el nombre para cada archivo:

import arcpy
infc = r"C:\Documents and Settings\User\My Documents\ArcGIS\shpfiles\Site_2.shp"
prjfile = r"<install directory>\Coordinate Systems\Geographic Coordinate Systems\World\WGS 1984.prj"
arcpy.DefineProjection_management(infc, prjfile)

29voto

aditya Puntos 111

Creo que estáis pensando demasiado en esto...

  1. Haga clic con el botón derecho del ratón en la herramienta "Definir proyección" de la caja de herramientas,
  2. seleccione "Lote",
  3. arrastre y suelte sus capas en la columna "Conjunto de datos de entrada",
  4. Haga clic con el botón derecho del ratón en la primera casilla "Sistema de coordenadas" para rellenar la proyección correcta,
  5. luego haga clic con el botón derecho del ratón en la proyección que acaba de seleccionar y elija "Rellenar", lo que rellenará el resto de las proyecciones por usted.
  6. Pulsa "OK" y ya está.

alt text

13voto

jonesdavide Puntos 176

Si están en el mismo directorio, algo como esto funcionaría (sólo reemplazar sus rutas, tal vez añadir en algún manejo de excepción):

import os, shutil

wgs84prjpath='c:/Program Files/ArcGIS/Desktop10.0/Coordinate Systems/Geographic Coordinate Systems/World/WGS 1984.prj'

def definewgs84(shpfilepath):
    tgtpath = os.path.splitext(shpfilepath)[0] + '.prj'
    shutil.copyfile(wgs84prjpath,tgtpath)

yourshapefiledirectory='C:/temp/'
extension='shp'

shpfileslist = [file for file in os.listdir(yourshapefiledirectory) if file.lower().endswith(extension)]

for filename in shpfileslist:
    definewgs84(os.path.join(yourshapefiledirectory,filename))

9voto

Adam Puntos 343

Simplemente haga copias del .prj y cambie el nombre. Así, por ejemplo, si usted tiene 3 shapefiles:

  • uno.shp,
  • dos.shp,
  • tres.shp.

Defina la proyección para one.shp y tendrá one.prj en el directorio. Copie one.prj al directorio de two.shp y renómbrelo a two.prj, repita para todos los shapefiles. El .prj es sólo un archivo de texto. Siempre que haya un .prj en el mismo directorio que un .shp y con el mismo nombre, el software lo recogerá. Automatice con cualquier herramienta con la que esté familiarizado para copiar y renombrar archivos.

4voto

Niall C. Puntos 1234

Editar:

Probablemente el método más fácil sería. Traerlos todos y asignar los crs correctos al documento. Estarían "sin proyectar" pero en el lugar correcto. Luego sólo hay que exportar (múltiples) a una nueva ubicación.

Veo una herramienta GP para la proyección por lotes.

batch proj

Es posible que no se exponga en arcpy. ??

Creo que crearía una pgdb, (Archivo, personal o incluso sde) y luego crearía un fds (feature data set).

Asigna los crs adecuados a ese fds.

Importar los archivos de forma (múltiples). [todos los fc de un fds heredan los crs del fds].

A continuación, puede exportar a un archivo de forma (múltiple).

Esto sería en lugar de la proyección por lotes, y estoy seguro de que se podría programar.

4voto

Adam Ernst Puntos 6939

¿qué tal un simple script de shell y ogr2ogr? Ver http://www.gdal.org/ogr2ogr.html para conocer la sintaxis exacta.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X