28 votos

¿Utilizar ogr2ogr para convertir todos los shapefiles del directorio?

Tengo un directorio con varios shapefiles.

¿Cómo se pueden convertir todos estos shapefiles a MapInfo con ogr2ogr?

Sé cómo puedo convertir un archivo. Y puedo hacer un script por lotes escribiendo una línea para cada archivo. Pero no hay una manera más fácil de convertir todos los archivos en un directorio (y subdirectorio).

0 votos

Depende del sistema operativo. Básicamente hacer un bucle "for", ver gis.stackexchange.com/questions/7803/

0 votos

El sistema operativo es Windows 7. Intento esto en el símbolo del sistema: for %f in *.shp; do ogr2ogr -f MapInfo File $f.tab. But that doesn't work. I get the error: 'Unable to open datasour '$ f.tab" con los siguientes conductores.....

0 votos

Así es como se hace la conversión de SHP a TAB: ogr2ogr -f "MapInfo File" %1.tab %1.shp. Pero a menos que OGR sea capaz de reconocer un archivo PRJ correctamente, es fácil que acabes con archivos TAB con coordsys erróneos incorporados. Recomiendo utilizar el Traductor Universal incorporado (FME a escala), que también puede procesar todos los archivos que seleccione. Te permite seleccionar las coordenadas correctas.

37voto

hernan43 Puntos 566

En Windows, para la corriente y los subdirectorios bajo la corriente, pruebe este comando:

for /R %f in (*.shp) do ogr2ogr -f "MapInfo File" "%~dpnf.tab" "%f"

Para explicar brevemente el engaño de lo que está sucediendo aquí , %~dpnf.tab utiliza la variable %f con el que añade el d carta del río, p ath (es decir, carpeta o directorio), y extrae el archivo n ame (sin el .shp extensión de archivo). Por último, .tab se añade inmediatamente después de los modificadores de variables compuestas para la nueva extensión.

Así que si estás en el directorio C:\MyData y tiene datos en este directorio, y subdirectorios C:\MyData\Region1 y C:\MyData\Region1\City1 cualquier Shapefile (con .shp ) será procesado, y un archivo de nombre similar con .tab se creará en el mismo directorio.

0 votos

¡Genial! ¡Esto funciona! Muchas gracias por la respuesta :) Una pregunta más: ¿Hay también una manera de hacer referencia a subdirectorio y convertir los archivos en otro subdirectorio. Tengo un que contiene varios directorios que contienen shapefiles. Por ejemplo: Países Bajos \shape\provinceX Países Bajos \shape\provinceY Países Bajos \shape\provinceZ Y me gustaría convertir esto en estas carpetas: Países Bajos \mapinfo\provinceX Países Bajos \mapinfo\provinceY Países Bajos \mapinfo\provinceZ Gracias :)

0 votos

He actualizado lo anterior para una búsqueda recursiva, sin embargo, no sé cómo hacer la lógica adicional para cambiar "forma" a "mapinfo"; tal vez encontrar / preguntar en superusuario.com

1 votos

Gracias de nuevo por su rápida respuesta. Ha sido de gran ayuda. Sólo tengo que copiar los archivos en el directorio correcto.

13voto

bhavani Puntos 31

Para unix bash:

#!/bin/bash

for FILE in *.mif # cycles through all files in directory (case-sensitive!)
do
    echo "converting file: $FILE..."
    FILENEW=`echo $FILE | sed "s/.mif/_new.shp/"` # replaces old filename
    ogr2ogr \
    -f "ESRI Shapefile" \
    "$FILENEW" "$FILE"
done
exit

Si está trabajando en un sistema operativo basado en *nix (es decir, Linux u OS X), hay algunos scripts de shell por lotes que clhenrik desarrollado aquí (en el que se basa lo anterior).

Estoy trabajando en un fork que hace algunos de los scripts un poco más genéricos y proporciona un poco más de descripción en el uso.


0 votos

Esto causará un error si el nombre del archivo contiene espacios.

0 votos

Creo que esta respuesta anterior funciona con espacios. lo más probable es que @JasonRDalton haya editado la versión antigua :)

8voto

sashkello Puntos 325

Como Alex Markov dijo, la mejor manera sería que usaras OGR .

Tendrás que hacer un guión, pero uno muy sencillo. Básicamente, si está usando Windows, todo lo que tiene que hacer es ejecutar el siguiente código en la línea de comandos (dentro de la carpeta deseada):

for %f in (*.tab) do ogr2ogr -f "KML" %~nf.kml %f

Consulte este sitio, aquí se explica todo:

http://www.processamentodigital.com.br/?p=2511

2 votos

Creo que también puedes hacer: ogr2ogr -f "KML" {carpeta de salida} {carpeta de entrada} Consejo tomado de underdark.wordpress.com/2012/05/09/batch-shapefile-clipping

0 votos

NB Esta respuesta proviene de una pregunta estrechamente relacionada que se refería a diferentes formatos de archivo.

0 votos

Hola, cuando pruebo este método en Ubuntu, por ejemplo, ogr2ogr -f "KML" {carpeta de salida} {carpeta de entrada} obtengo el error: 'ERROR 4: Failed to create KML file'. ¿Alguna idea de qué puede estar fallando aquí? He construido GDAL con soporte KML

8voto

texai Puntos 178

Con python:

import os 

for a in os.listdir(os.getcwd()):
   fileName, fileExtension = os.path.splitext(a)
   os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a, fileName + '.tab'))

puedes cambiar os.getcwd() a la ruta donde se encuentran sus archivos...

espero que te ayude

0 votos

for a in *.shp: es un error de sintaxis; está pensando from glob import glob; for a in glob('*.shp'):

0 votos

Oh, lo siento, lo he escrito en estilo equivocado. He actualizado. @ Mike Toews gracias.

6voto

Simon Nickerson Puntos 17147

¿Has probado OGR biblioteca y herramientas de línea de comandos?

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