Un kmz2shp hecho en casa

11 de Febrero de 2013

Actualmente, tengo un colega que trabaja mucho con GoogleEarth donde digitaliza un montón de polígonos y me pide una vez por semana transformar sus archivos en formato shapefile y luego proyectarlos. Eso se hace al toque con OGR, ya lo enseñe en este blog aquí y aca.

Pero esa vez, no prestó mucha atención y guardó algunos de sus archivos (unos 60) en formato .kmz en vez de .kml. El formato .kmz es solamente un archivo .kml zipeado. Entonces para transformar un .kmz en .kml, hay que cambiar la extensión del archivo a .zip y luego descomprimirlo. Obtenemos un archivo .kml (que generalmente se llama "doc.kml").

Como el no quería hacer esas manipulaciones unas 60 veces (y yo tampoco...Laughing), decidí hacer un pequeño archivo bash (entonces que funciona en linux, ubuntu en mi caso) para automatizar el proceso. Ademas, solamente nos interesaba la geometria de nuestros objetos, los atributos no (en el caso contrario es mas complicado). A continuación, las etapas a realizar para cada archivo .kmz (todos se encuentran en la misma carpeta):

  1. Cambiar la extension .kmz en .zip
  2. Descomprimir el .zip para obtener el arhivo .kml
  3. Renombrar el archivo "doc.kml" con el nombre del archivo .kmz
  4. Suprimir el .zip
  5. Transformar el .kml en shapefile (con OGR)
  6. Proyectar este shape (que esta en WGS84) en UTM 18 Zona Norte, EPSG:32618 (son datos de Puerto Príncipe en Haiti) y ponerlo en una otra carpeta que llamo "proj" (con OGR)
  7. Suprimir el shape inicial (el que esta en WGS84)

Llame mi archivo kmz2shp.sh. Aca esta el código completo:

#!/bin/bash

for i in *.kmz
do
    mv $i ${i%%.kmz}.zip;
done

for i in *.zip
    do unzip $i;

    # Renombro el arhivo "doc.kml" con el nombre del archivo .kmz
    mv doc.kml ${i%%.zip}.kml;
    rm $i;
done

for i in *kml
    do ogr2ogr -f "ESRI Shapefile" ${i%%.kml}.shp $i;
    rm $i;
done

# Creo una carpeta "proj" donde pongo el shape proyectado
mkdir proj
for i in *.shp
    do ogr2ogr -s_srs EPSG:4326 -t_srs EPSG:32618 proj/$i $i;
    rm ${i%%.shp}.*;
done

Nada mas. Antes de poder usarlo, tiene que ser ejecutable:

$ chmod +x  kmz2shp.sh

Ahora me pongo en la carpeta donde tengo mis archivos .kmz y ejecuto mi archivo bash (en mi caso se encuentra justo en la carpeta anterior):

$ ../kmz2shp

Ahora mi carpeta contiene una sola carpeta "proj" que contiene unos 60 shapefiles proyectados.

Hecho! Tenemos nuestro kmz2shp "home made" que podemos volver a utilizar en otras ocasiones. Felices?

Twittear