Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Geodjango y geoprocesamiento con Python

Geodjango y geoprocesamiento con Python

En esta charla veremos algunas operaciones habituales de obtención y tratamiento de datos geográficos con Python. Además, haremos una introducción a Geodjango, la extensión GIS del popular framework para aplicaciones web "Django", a través de un ejemplo práctico.

Alicia Pérez Jiménez

February 15, 2018
Tweet

More Decks by Alicia Pérez Jiménez

Other Decks in Technology

Transcript

  1. El GIS es “eso de los mapas” Un mapa es

    una representación gráfica y métrica de una porción de territorio [...] 5 Wikipedia
  2. Es difícil encontrar datos GIS • CNIG • Madrid •

    Esri OpenData • Carto Data Library 7
  3. Es difícil encontrar datos GIS 8 • CNIG • Madrid

    • Esri OpenData • Carto Data Library
  4. • Se pueden utilizar atributos espaciales en los modelos •

    Extiende el ORM de Django para consultar y manipular información espacial • Utilidades para la carga e inspección de datos del OGC • Edición de geometrías desde el admin 13 Django
  5. Librerías GIS • Las principales son: GDAL, GEOS y GeoIP

    • Utiliza SWIG y ctypes para aprovechar la funcionalidad en C de estas librerías • El uso de librerías en C permite un alto grado de compatibilidad multiplataforma 14
  6. 19 Advertencia Los datos han sido elegidos únicamente por el

    valor didáctico del geoprocesamiento Los resultados del análisis no tienen por qué ser fiables (y probablemente no lo sean)
  7. 20 from django.contrib.gis.gdal import DataSource ds = DataSource('madrid/data/DISTRITOS.shp') lyr =

    ds[0] dict(zip(lyr.fields, [fld.__name__ for fld in lyr.field_types])) >> {'CODDISTRIT': 'OFTString', 'NOMBRE': 'OFTString', 'SHAPE_area': 'OFTReal', 'SHAPE_len': 'OFTReal'} Enlace a los datos
  8. 21 import pandas as pd df = pd.read_csv('201711_detalle.csv', sep=";", encoding='iso-8859-1')

    df.columns >> Index(['CALIFICACION', 'LUGAR', 'MES', 'ANIO', 'HORA', 'IMP_BOL', 'DESCUENTO', 'PUNTOS', 'DENUNCIANTE', 'HECHO-BOL', 'VEL_LIMITE', 'VEL_CIRCULA', 'COORDENADA_X', 'COORDENADA_Y'], dtype='object') Enlace a los datos
  9. 22

  10. 23 len(df.index) >> 232274 len(df[df['COORDENADA_Y']==' ']) >> 175311 175311.0 /

    232274.0 >> 0.7547594651144769 # --->> 75% de las coordenadas vacías!! Enlace a los datos
  11. 25 • Esquinas ◦ FUENCARRAL-PALMA ◦ J.M.EMPECINADO-RAMIREZ PRADO • Abreviaturas

    ◦ PZ STO DOMINGO 7 ◦ CL GUSTAVO FDZ BALBUENA 27 • Carreteras y puntos kilométricos ◦ M-30 NC K 14,200 CR3 ◦ AUTOV M-30 EX 12100 • ¿? ◦ PO DIRECCION 283
  12. 26 [{ [...] 'formatted_address': 'Calle Juan Bravo, 23, 40001 Segovia,

    Spain', 'geometry': {'location': {'lat': 40.9483001, 'lng': -4.1212002}}, [...] { [...] 'formatted_address': 'Calle Juan Bravo, 23, 13500 Puertollano, Cdad. Real, Spain', 'geometry': {'location': {'lat': 38.6844721, 'lng': -4.1067683}} [...] { [...] 'formatted_address': 'Calle Juan Bravo, 23, 28934 Móstoles, Madrid, Spain', 'geometry': {'location': {'lat': 40.321078, 'lng': -3.871188}} [...] ] CL JUAN BRAVO 23
  13. ¿Qué es leaflet? 31 Leaflet es una librería open-source JavaScript

    que permite crear mapas interactivos para la web y para entorno móvil de manera fácil Imagen: leaflet
  14. django-leaflet 32 Instalación pip install django-leaflet Configuración en el settings.py

    LEAFLET_CONFIG = { 'SPATIAL_EXTENT': (5.0, 44.0, 7.5, 46) 'DEFAULT_CENTER': (6.0, 45.0), 'DEFAULT_ZOOM': 16, 'MIN_ZOOM': 3, 'MAX_ZOOM': 18, } En el template, añade tu mapa poniéndole un nombre ... <body> ... {% leaflet_map "yourmap" %} ... </body>
  15. 33 Leaflet en el admin de django from django.contrib import

    admin from leaflet.admin import LeafletGeoAdmin from .models import WeatherStation admin.site.register(WeatherStation, LeafletGeoAdmin)