Python Script ‐ CSV a KML (Deprecado) - TadeoRiganti/Alquilar-en-CABA GitHub Wiki

Convertir datasets a capas de mapa mediante un script de python

Este documento tambien esta disponible como Google Colab

Tabla de contenidos

  1. Sobre el metodo
  2. Resumen
  3. Estructura del código
  4. Uso
  5. Analisis del código

Sobre el metodo

  • Titulo: Script para convertir tablas de datos (CSV) a capas de mapa (KML) mediante un Script de Python.
  • Descripción general: Script de Python para convertir un documento formato .CSV que contiene datos geograficos con geometria WKT a un documento KML, para poder ser importado en Google Earth.
  • Autor: Shawn
  • Fecha de creación: 11/11/2022

Resumen

Objetivo

Transformar las tablas de datos de BA DATA almacenados en un formato tabular (CSV) a un formato visualizable en aplicaciones como Google Earth o My Maps (KML), de manera tal que se pueda graficar los datos como capas de mapa.

Ejemplos de uso

Convertir tablas de datos en capas de mapa para la aplicación My Maps o Google Earth.

  • Urbanismo: Comunas, Barrios, Campanas verdes, etc,
  • Movilidad: Terminales y estaciones de Ferrocarril, Metrobus y Subte. Paradas de colectivo y taxi. Estaciones de ecobici, etc.
  • Cultura y turismo: Espacios culturales, zonas comerciales, locales gastronomicos, locales bailables, alojamientos turisticos, etc.
  • Salud: Hospitales, Centros de vacunacion, etc.
  • Seguridad: Comisarias, Estadisticas de delito; Robo y hurto; total y automotor, etc.

Estructura del código

Descripción de modulos

Función principal

  • Propósito: Coordina la lectura del archivo CSV, la creación del GeoDataFrame y la exportación a KML.
  • Entradas: Ruta al archivo CSV, ruta al archivo KML de salida.
  • Salidas: No devuelve ningún valor, pero crea el archivo KML.
  • Lógica: Llama a las funciones auxiliares para realizar cada paso del proceso.

Función para leer el archivo CSV:

  • Propósito: Lee el archivo CSV y crea un DataFrame de Pandas.
  • Entradas: Ruta al archivo CSV.
  • Salidas: Un DataFrame de Pandas con los datos del CSV.
  • Lógica: Utiliza la biblioteca Pandas para leer el archivo CSV.

Uso

Requisitos previos

  • Sistema operativo: Todos (Linux, Windows, Apple, MacOS, etc).
  • Python: Versión 3.7 o superior.
  • Biblotecas:
    • Fiona: Utilizada para manipular archivos de formato GIS, como KML.
    • Pandas: Sirve para manipular y analizar datos en formato tabular. Proporciona estructuras de datos eficientes y herramientas de análisis de datos.
    • Geopandas: Extensión de pandas para trabajar con datos geográficos. Permite crear GeoDataFrames, realizar operaciones espaciales y trabajar con diferentes sistemas de referencia de coordenadas.
    • Shapely: Sirve para realizar operaciones geométricas en Python. Permite crear y manipular objetos geométricos como puntos, líneas y polígonos.
  • Entorno virtual: Opcional; aunque es recomendado para evitar dependencias.

Instalación

La siguiente guia se realizar desde la terminal nativa de tu sistema operativo (en este caso, como estoy usando Windows lo hare desde la terminal de comandos 'CMD') o también desde un editor de código especializado (como 'Vscode') que emule terminales.

0. Verificar que esta instalado Python:

python --version
  • agregar imagen comando

1. Crear el entorno

1.1. Dirigirse a la carpeta donde este instalado el repositorio (si lo estas haciendo desde un editor de código, podes saltarte este paso):

cd 'C:\Users\Tu-usuario\repos\Alquilar-en-CABA'
  • agregar imagen comando

1.2. Ejecutar el comando python -m venv seguido con el nombre que quieras darle al entorno virtual.

python -m venv 'script-csv-kml'
  • agregar imagen comando

Vas a notar que tarda un cachito, es normal. Cuando aparezca una nueva linea, el proceso habra terminado. Este es el resultado:

  • agregar imagen resultado

2. Activar el entorno

2.1. Dirigite al directorio Scripts dentro del nuevo entorno.

cd 'script-csv-kml\Scripts'
  • agregar imagen comando

2.2. Luego simplemente ejecuta el comando activate.

  • agregar imagen comando

Podés ver que esta activado porque en la linea de comando aparece el nombre del entorno entre parentesis:

  • agregar imagen resultado

Todas las librerias que se instalen mientras el entorno este activado, se almacenaran en este directorio.

3. Instalación de dependencias

3.0. Si existe en el repositorio el archivo requirements.txt, ejecutar el siguiente comando:

pip install -r requirements.txt
  • agregar imagen comando

Si existe, tras unos instantes iniciara un proceso de instalacion. Espera a que termine.

  • agregar imagen resultado

Si no hay errores, continua al paso 4.

Pero, en el caso de saliera un error al final (marcado en color rojo), significa que este archivo no existe.

  • agregar imagen resultado

De ser ese el caso continua con los pasos siguientes pasos:

3.1. Ejecutar el comando pip install pandas geopandas fiona shapely

  • agregar imagen comando

Unos instantes despues comenzara a descargar todas las librerias. Esperar a que termine:

  • agregar imagen resultado

3.2. Crear un documento que especifique las librerias requeridas del proyecto; el famoso requirements.txt***. Simplemente ejecuta el comando

pip freeze > requirements.txt
  • agregar imagen comando

Una vez ejecutado veras que ha aparecido el documento:

  • agregar imagen resultado

Si lo abres ahora, veras que esta en blanco; todavia no hemos instalado nada. Eso lo haremos en el siguiente paso.

4. Desactivar entorno

Una vez termine de descargar, desactiva el entorno escribiendo el comando deactivate.

  • agregar imagen comando

Notaras que esta desactivado porque en la nueva linea ya no aparece el nombre del entorno entre parentesis:

  • agregar imagen resultado

Notas:

*) Para más informacion o alternativas, consulta la documentacion oficial. **) Opcionalmente, podés realizar el tutorial oficial. ***) El archivo requirements.txt permite que tus colegas puedan realizar el siguiente paso de manera automatica, usando el comando pip install -r requirements.txt

Ejecución

Agregar notas y si se puede imagenes

Analisis del código

Script

import fiona
import pandas as pd
import geopandas as gpd
from shapely import wkt

# Enable KML support
fiona.supported_drivers['KML'] = 'rw'

df = pd.read_csv('./gp.csv')

# convert wkt to geometries
geoms = [wkt.loads(shape_text) for shape_text in df.geometry.tolist()]

gdf = gpd.GeoDataFrame(df['rtid_key'](/TadeoRiganti/Alquilar-en-CABA/wiki/'rtid_key'), geometry = gpd.GeoSeries(geoms, crs='EPSG:4326'))

gdf.to_file('kmlfile.kml', driver='KML')

Pasos

1) Importar biblotecas de Python:

import fiona
import pandas as pd
import geopandas as gpd
from shapely import wkt

Fiona; Biblioteca para leer y escribir archivos de formato GIS, como KML.

Pandas; Biblioteca para manipulación y análisis de datos, especialmente en formato tabular.

Geopandas; Extensión de pandas para trabajar con datos geográficos.

WKT de Shapely; Biblioteca para operaciones geométricas.

2) Configuración del controlador KML:

fiona.supported_drivers['KML'] = 'rw'

Se establece que fiona puede leer y escribir archivos KML.

3) Lectura del archivo CSV:

df = pd.read_csv('./gp.csv')

Se lee el archivo CSV "gp.csv" y se almacena en un DataFrame de pandas llamado df.

4) Conversión de WKT a geometrías:

geoms = [wkt.loads(shape_text) for shape_text in df.geometry.tolist()]
  • Se itera sobre la columna "geometry" del DataFrame df, que contiene las cadenas WKT de los polígonos.
  • Para cada cadena WKT, se utiliza la función wkt.loads() de shapely para convertirla en un objeto geométrico.
  • La lista de objetos geométricos se almacena en la variable geoms.

5) Creación de GeoDataFrame:

gdf = gpd.GeoDataFrame(df['rtid_key'](/TadeoRiganti/Alquilar-en-CABA/wiki/'rtid_key'), geometry = gpd.GeoSeries(geoms, crs='EPSG:4326'))
  • Se crea un nuevo GeoDataFrame llamado gdf a partir de la columna "rtid_key" del DataFrame original df.
  • Se agrega una nueva columna llamada "geometry" al GeoDataFrame, que contiene la lista de objetos geométricos geoms.
  • Se establece el sistema de referencia de coordenadas (CRS) del GeoDataFrame como "EPSG:4326", que es el CRS estándar para datos geográficos en latitud y longitud.

6) Exportación a KML:

gdf.to_file('kmlfile.kml', driver='KML')

Se exporta el GeoDataFrame gdf a un archivo KML llamado "kmlfile.kml" utilizando el controlador KML configurado previamente.