Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Aplicaciones geográficas con Django - No solo de Javascript viven los mapas

532 views

Published on

La 'ubicación' es una de las variables más importantes en cualquier problema, y es una de las más complicadas de manejar.

Django - sin ser un servidor geográfico de primera clase - proporciona una buena plataforma para incorporar el "dónde" en nuestras aplicaciones.

Presentaremos - de forma práctica - las capacidades geográficas de Django (acceso a BB.DD espaciales, consultas geográficas) y sus limitaciones

Published in: Technology
  • Be the first to comment

Aplicaciones geográficas con Django - No solo de Javascript viven los mapas

  1. 1. Aplicaciones Geográficas con Django “No sólo de Javascript viven los mapas”
  2. 2. Agenda × Geo (GIS) × Django × GeoDjango
  3. 3. GIS Geographic Information Systems
  4. 4. El mapa de John Snow
  5. 5. El mapa de John Snow https://carto.com/blog/game-of-thrones-basemap/ NOP!
  6. 6. El mapa de John Snow
  7. 7. El mapa John Snow
  8. 8. Características de los GIS
  9. 9. Geometrías Point Line Multipoint Multiline Polygon Multipolygon GeometryCollection
  10. 10. Formatos de entrada
  11. 11. Representación de los datos http://www.tysmagazine.com/los-sig-raster-herramienta-de-analisis-medioambiental-y-territorial/
  12. 12. Proyecciones y sistemas de coordenadas https://2012books.lardbucket.org/books/geographic-information-system-basics/s06-02-map-scale-coordinate-systems-a.html
  13. 13. Proyecciones y sistemas de coordenadas Mercator vs Peters https://en.wikipedia.org/wiki/List_of_map_projections
  14. 14. Django “The Web framework for perfectionists with deadlines”
  15. 15. “Django is a high-level Python Web framework that encourages rapid development and clean, pragmatic design
  16. 16. Urls Django Templates Views Models ORM
  17. 17. GeoDjango
  18. 18. “Intends to be a world-class geographic Web framework
  19. 19. GeoDjango Geodatabases Librerías geoespaciales
  20. 20. Integración con GeoDatabases
  21. 21. Geodatabases ¡1er Premio! ¡2o Premio!
  22. 22. Librerías Geoespaciales
  23. 23. ¿Por qué? × Aprovecha la fama de librerías open source ampliamente reconocidas × 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
  24. 24. Librerías geoespaciales × GEOS × GDAL × GeoIP (BSD-licensed)
  25. 25. GEOS Geometry Engine Open Source
  26. 26. GEOS × Biblioteca en C ++ para realizar operaciones geométricas × Es la representación de geometría interna por defecto utilizada por GeoDjango × Licencia de BSD para las rutinas de geometría de GEOS, implementada puramente en Python usando ctypes
  27. 27. GEOS >>> pnt = GEOSGeometry('POINT(5 23)') # WKT >>> pnt = GEOSGeometry('010100000000000000000014400000000000003740') # HEX >>> pnt = GEOSGeometry('{ "type": "Point", "coordinates": [ 5.000000, 23.000000 ] }') # GeoJSON × Creando geometrías >>> pnt = Point(5, 23) >>> ring = LinearRing((0, 0), (0, 50), (50, 50), (50, 0), (0, 0)) >>> poly = Polygon(ring) >>> print poly.contains(pnt) True
  28. 28. GEOS >>> pnt = Point(5, 23) >>> [coord for coord in pnt] [5.0, 23.0] × Las geometrías son Pythonicas >>> line = LineString((0, 0), (0, 50), (50, 50), (50, 0), (0, 0)) >>> line[-2] (50.0, 0.0)
  29. 29. GDAL Geospatial Data Abstraction Library
  30. 30. GDAL × La navaja suiza de los datos GIS × Utiliza la OGR Simple Features Library, especializada en la lectura y escritura de datos en variedad de formatos estándar × Muy potente en la transformación de coordenadas espaciales
  31. 31. GDAL >>> from django.contrib.gis.gdal import DataSource >>> ds = DataSource('/path/to/your/cities.shp')>>> ds.layer_count # This file only contains one layer 1 × Carga de ficheros de datos >>> from django.contrib.gis.gdal import GDALRaster >>> rst = GDALRaster('/path/to/your/raster.tif', write=False)>>> rst.width, rst.height # This file has 163 x 174 pixels (163, 174)
  32. 32. GDAL >>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, AUTHORITY["EPSG","4326"]]') >>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326 >>> print(srs['GEOGCS']) WGS 84 >>> print(srs['DATUM']) WGS_1984 >>> print(srs['AUTHORITY']) EPSG >>> ct = CoordTransform(SpatialReference('WGS84'), SpatialReference('NAD83')) >>> for feat in layer: ... geom = feat.geom # getting clone of feature geometry ... geom.transform(ct) # transforming × Sistemas de coordenadas
  33. 33. GeoIP
  34. 34. GeoIP × Biblioteca para trabajar con información geográfica y de red basada en direcciones IP × La geolocalización IP es inherentemente imprecisa. Las ubicaciones están a menudo cerca del centro de la población
  35. 35. GeoIP >>> from django.contrib.gis.geoip import GeoIP >>> g = GeoIP() >>> g.country('google.com') {'country_code': 'US', 'country_name': 'United States'} >>> g.city('72.14.207.99') {'area_code': 650, 'city': 'Mountain View', 'country_code': 'US', 'country_code3': 'USA', 'country_name': 'United States', 'dma_code': 807, 'latitude': 37.419200897216797, 'longitude': -122.05740356445312, 'postal_code': '94043', 'region': 'CA'}
  36. 36. GeoDjango en acción
  37. 37. Modelos from django.contrib.gis.db import models class Lakes(models.Model): name = models.CharField(max_length=100) rate = models.IntegerField() geom = models.MultiPolygonField() × models.py
  38. 38. LayerMapping import os from django.contrib.gis.utils import LayerMapping from land.models import Lakes lakes_mapping = { 'name' : 'name', 'rate' : 'rate', 'geom' : 'MULTIPOLYGON', } lake_shp = './data/lakes.shp')) def run(verbose=True): lm = LayerMapping(Lakes, lake_shp, lakes_mapping, transform=False, encoding='iso-8859-1') lm.save(strict=True, verbose=verbose)
  39. 39. ogrinspect >>> python manage.py ogrinspect land/data/lakes.shp Lakes --mapping -- multi × --mapping indica a ogrinspect que genere el diccionario de mapeo para el LayerMapping. × --multi habilita la opción de usar MultiPolygonField en lugar de PolygonField
  40. 40. ogrinspect # This is an auto-generated Django model module created by ogrinspect. import os from django.contrib.gis.utils import LayerMapping from land.models import Lakes # Auto-generated `LayerMapping` dictionary for Lakes model lakes_mapping = { 'name' : 'name', 'rate' : 'rate', 'geom' : 'MULTIPOLYGON', }
  41. 41. Administrador de Django from django.contrib.gis import admin from models import Lakes admin.site.register(Lakes, admin.GeoModelAdmin) × admin.py
  42. 42. Ejemplo Obtener países con área similar
  43. 43. ¡Gracias! ¡En StyleSage estamos contratando! alicia@stylesage.co

×