¿Usando ogr2ogr para convertir todos los shapefiles en el directorio?

24

Tengo un directorio con varios shapefiles.

¿Cómo puedo 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 forma más fácil de convertir todos los archivos en un directorio (y subdirectorio).

    
pregunta Stefan 14.05.2012 - 11:00

8 respuestas

31

En Windows, para el actual y los subdirectorios debajo del actual, intente este comando:

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

Para explicar brevemente el truco de qué aquí , %~dpnf.tab usa la variable %f , con la que agrega la letra del río d , p nombre (es decir, carpeta o directorio), y extrae el archivo n ame (sin la extensión de archivo .shp ). Por último, .tab se agrega inmediatamente después de los modificadores de la variable compuesta para la nueva extensión.

Entonces, si está en el directorio C:\MyData y tiene datos en este directorio, y los subdirectorios C:\MyData\Region1 y C:\MyData\Region1\City1 , se procesará cualquier Shapefile (con la extensión .shp ), y un nombre similar El archivo con .tab se creará en el mismo directorio.

    
respondido por el Mike T 14.05.2012 - 12:08
11

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 o OS X), hay algunos scripts de shell por lotes que clhenrik Desarrollé aquí (en lo que se basa lo anterior).

Estoy trabajando en una bifurcación que hace que algunos de los scripts sean un poco más genéricos y proporcione un poco más de descripción sobre el uso.

respondido por el eltiar 06.11.2013 - 22:34
8

Como dijo Alex Markov , sería la mejor manera de usar OGR .

Necesitará hacer un script, pero uno muy simple. Básicamente, si está utilizando 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, todo se explica aquí:

enlace

    
respondido por el Alexandre Neto 16.05.2012 - 11:29
7

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'))

puede cambiar os.getcwd() a su ruta donde se encuentran sus archivos ...

espero que te ayude

    
respondido por el Aragon 14.05.2012 - 11:54
4

No necesita un bucle, simplemente puede nombrar un directorio como origen y destino y ogr2ogr convertirá cualquier archivo en el directorio de origen. Mira aquí: Conversión de TAB a MIF / MIF a TAB

    
respondido por el Torsten 14.05.2012 - 13:39
2
Parece que

necesita un bucle for: consulte enlace para obtener una explicación de cómo funcionan.

    
respondido por el Ian Turton 14.05.2012 - 11:05
0

Universal Translator en Mapinfo puede manejar múltiples archivos. Vaya a la carpeta de destino, seleccione todos los shapefiles, defina CRS para entrada y salida. Se debe hacer.

    
respondido por el Bharadwaj A K 13.11.2017 - 04:58
0

Esto es un refinamiento de la respuesta de Aragón arriba. Solo ejecutará ogr2ogr en archivos .TAB o .tab, e ignorará otros tipos de archivos en la carpeta.

#!/usr/bin/env python3

import os 

for a in os.listdir(os.getcwd()):
  fileName, ext = os.path.splitext(a)
  if ext.lower() == '.tab':
    print('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
    os.system('ogr2ogr -f "ESRI Shapefile" %s %s' % (a.replace(ext,
                           '.shp'), fileName + ext))
    
respondido por el Tybion 31.01.2018 - 02:31

Lea otras preguntas en las etiquetas