Cómo convertir datos GIS con Python: KML To Layer

1_toolboxes_ convertir información GIS con Python

Dentro de nuestros trabajos GIS a menudo encontramos la necesidad de transformar la información de partida o de entrega al formato de trabajo requerido: de CAD a Shapefile, de Shapefile a Kml, de Geodatabase a Shapefile, GPX a Feature, etc.

En ArcGIS, todas las opciones de transformación de información GIS están recogidas en las Tools denominadas Conversion Tools.

Cuando el volumen de la información a manejar es importante lo recomendable es programar la tarea de modo que, toda la información del tipo señalado que esté ubicada en un directorio específico se transforme al formato requerido.

Con ArcPy podemos utilizar cualquiera de las herramientas que vemos en las ToolBoxes en modo de código Python, que además podremos enriquecer con bucles, condiciones, parámetros etc.

En este caso práctico vamos a hacer un script para convertir datos GIS con Python y la ArcPy, que cree una geodatabase y un layer file (.lyr) por cada uno de  los archivos tipo kml que se ubique en un directorio específico.

Para llevarlo sólo necesitamos saber:

  • La sintáxis de la herramienta kml to layer : Arcpy
  • Crear un listado de todos los archivos tipo kml de un directorio: ArcPy o Python
  • Hacer un bucle tipo FOR que recorra ese listado y ejecute la herramienta: Python

Unos apuntes sobre ArcPy

En nuestro artículo Qué es ArcPy te explicamos esta librería. A modo de resumen debes saber que ArcPy es una biblioteca de Python creada específicamente por ESRI para programar y automatizar procesos GIS. Contiene Clases, Funciones, etc. específicas de ESRI, las cuales se pueden combinar con las funcionalidades propias de Python así como con otras bibliotecas bajo este lenguaje.

Cómo obtener el código

Tenemos varias opciones para obtener el código que necesitamos. Para empezar, todas las herramientas de las ToolBoxes de ArcGIS vienen acompañadas de su correspondiente Ayuda, a la que podemos acceder bien a través del botón derecho sobre la herramienta, o bien en botón de ayuda del cuadro de diálogo de esa herramienta. 

2_convertir información GIS con Python ayuda_toolboxes

Además contamos con la opción vía Web, tanto en foros específicos, por ejemplo: https://geonet.esri.com/community/developers/gis-developers/python, como en el buscador del ArcGIS for Desktop: http://desktop.arcgis.com/en/

Por suerte la documentación que nos ofrece ESRI es muy sencilla, clara y estructurada. Además siempre se acompaña de un ejemplo práctico que podemos reutilizar y adaptar a nuestras necesidades, aunque evidentemente un mayor grado de conocimientos y de destreza con la programación nos permitirá sacarle más ventaja a la ArcPy.

En el artículo 8 trucos para comenzar a trabajar con python sobre ArcGIS puedes ver nuestras recomendaciones para iniciarse con ArcPy.

1º La sintáxis de la herramienta kml to layer

Buscamos la herramienta y accedemos a su ayuda tal y como vemos en la imagen anterior. Se abrirá una página de ayuda con diferentes apartados: Sumary, Usage, Syntax, Code Sample… Para nosotros estos dos últimos son los más importantes, con ellos podemos ver cómo se traduce la herramienta a código Python y un ejemplo aplicado.

3_convertir información GIS con Python ayuda_herramienta

Como vemos en la ayuda, la sentencia que necesitamos es:

3_convertir información GIS con Python sintaxis KMLToLayer

Las sentencias para ejecutar herramientas GIS siempre mantienen la misma estructura:

arcpy + punto + módulo específico (si tiene) + nombre de la herramienta + _apellido de la herramienta (si tiene)+ (parámetros entre paréntesis separados por comas, {parámetros opcionales})

En nuestro caso, vamos a prescindir de los parámetros opcionales, así que nuestra sentencia será:

arcpy.KMLToLayer_conversion (in_kml_file, output_folder)

El valor del parámetro in_kml_file se lo asignaremos a través del listado de archivos kml que generemos.

El valor de output_folder lo podemos asignar como una variable al inicio del script.

2.- Crear un listado de todos los archivos tipo kml de un directorio.

Para este punto utilizaremos el buscador web de ESRI.

En el siguiente enlace: https://pro.arcgis.com/es/pro-app/arcpy/get-started/listing-data.htm vemos las diferentes posibilidades de listados de datos que podemos generar a través de Arcpy.  Dado que un archivo tipo kml no es una tipología específica de ESRI, dentro de las posibles herramientas parece que la más adecuada será la de ListFiles, utilizando el filtro de la extensión del archivo. (*.kmz para nuestro ejemplo)

Accedemos a la ayuda específica de esta herramienta para ver su sintaxis y reutilizar su código:

5_convertir información GIS con Python listar_archivos

La sintaxis que vamos a necesitar es sencilla:

arcpy.ListFiles('*.kmz')

Tal y como se explica en su ayuda es requisito imprescindible que previa a su ejecución se haya establecido como workspace el directorio del que se quiere obtener el listado. Como vemos en el ejemplo esto se hace con la siguiente sentencia:

arcpy.env.workspace = 'D:/temp/archivos_kml'

Esta sentencia se podría haber hecho a través del módulo os de Python, sin utilizar ArcPy.

Con el código que vemos en el ejemplo de la herramienta podemos abordar nuestro tercer objetivo.

3.- Hacer un bucle tipo FOR que recorra ese listado y ejecute la herramienta

Las creaciones de listados suelen ir acompañadas de estructuras de tipo FOR, que recorren el listado con el objeto de operar con sus elementos.

En el ejemplo que vemos en la ayuda de la herramienta ListFiles se aplica el bucle FOR para crear un archivo tipo dbf a partir de cada uno de los archivos tipo csv listados.

Copiaremos este ejemplo y sustituiremos estos pasos por nuestra herramienta de conversión. La sintaxis del bucle sería:

for in_kml_file in arcpy.ListFiles("*.kmz"):

Transcribiendo y ordenando el código: Creamos del script

OK! Tenemos el código, ahora sólo tenemos que ordenarlo

Podemos escribir nuestro código en un IDE  (Integrated Development Environment), lo que nos facilita la trascripción, depuración y ejecución. Nuestra recomendación es utilizar PyScriter.

Ahora, vayamos por orden, y acompañemos cada paso de un comentario (en Python los comentarios se preceden de un símbolo #), de modo que quede clara la intención de cada sentencia:

#importamos arcpy para poder trabajar con esta biblioteca

import arcpy

#variables de trabajo: directorio de entrada y de salida

in_folder = 'D:/temp/archivos_kml'

output_folder = 'D:/temp/archivos_gdb'

#establecemos el workspace, que es el mismo que el directorio de entrada

arcpy.env.workspace = in_folder

#bucle FOR y listado de archivos tipo kmz

for in_kml_file in arcpy.ListFiles("*.kmz"):

   #herramienta de conversion de kml a capa

   arcpy.KMLToLayer_conversion (in_kml_file, output_folder)

   print in_kml_file + " a capa...."

print "SCRIPT EJECUTADO CORRECTAMENTE"

Manos a la obra: Ejecutamos el script

Aunque tenemos varias opciones para ejecutar nuestro código, lo recomendable en un script de este tipo, compuesto por varias líneas de código, es utilizar el propio editor: PyScripter.

6_convertir información GIS con Python ejecutar_script

En la imagen podemos ver el script ejecutado y los mensajes devueltos en la Ventana Intérprete del programa. Por lo que vemos se ha ejecutado correctamente, y así lo podemos comprobar en los contenidos de la carpeta.

7_convertir información GIS con Python archivos_gdb

Posibles mejoras y reutilización del código

Esta ejecución nos ha resultado muy útil. Sin necesidad de abrir ArcGIS hemos transformado a layer  archivos tipo kmz de modo masivo. De la misma manera, cambiando la herramienta, podremos hacer otro tipo de conversiones de datos:

  • FeatureClassToShapefile_conversion
  • FeaturesToJSON_conversion
  • GPXToFeatures_conversion,
  • etc.

Las posibilidades son tantas como las opciones que nos ofrece ArcGIS, con la ventaja de poder ejecutarlo para un número elevado de archivos y fuera del entorno de ESRI. Sólo debes tener en cuenta dos cosas:

  • El tipo de herramienta para realizar el listado: dependerá si los archivos son capas de ESRI u otros formatos.
  • Los parámetros que cada una de las herramientas de conversión considere obligatorios.

Además el programa se puede mejorar combinando este código con otras acciones como extraer estadísticas, hacer una serie de mapas con la información importada, generar un informe, programar la tarea, etc… las posibilidades son ilimitadas.

Aprende ArcPy en nuestro curso online de Python para ArcGIS.

2 comentarios en «Cómo convertir datos GIS con Python: KML To Layer»

Los comentarios están cerrados.