SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
El autor del presente documento lo ha publicado
 bajo las condiciones que especifica la licencia




               Creative Commons
  Attribution-NonCommercial-ShareAlike 3.0
     http://creativecommons.org/licenses/by-nc-sa/3.0/

           En caso de dudas escriba a:
              info@atmantree.com
Web Mapping con Django


                         Ing. Carlos Gustavo Ruiz
                         http://atmantree.com
                         Noviembre, 2012

       CC BY-NC-SA 3.0
Temas
●   ¿Qué es Geomática?          ●   GeoAdmin
●   ¿Qué es Web                 ●   Plantilla
    Mapping?                    ●   Vista
●   Paso a paso                 ●   OpenLayers
    ●   Instalación
                                ●   Nuestro Portal
    ●   Base de Datos
                            ●   Lo que sigue
    ●   Proyecto Django     ●   A modo de Conclusión
    ●   Modelo (Geo)
¿Qué es Geomática?




[Geo] + Infor[mática] = [Geomática]
¿Qué es Geomática?
Palabras clave:
●   Conjunto de ciencias
●   Integración
●   Medios para la captura
●   Tratamiento
●   Análisis
●   Interpretación
●   Difusión
●   Almacenamiento
●   Información Geográfica.
¿Qué es Geomática Libre?
Entendemos que la Geomática Libre es en cierto
modo un superconjunto del Software Libre pues
integra las 4 libertades de Uso, Introspección,
Mejora y Copias a aspectos como:
●   Software
●   Datos
●   Estándares
¿Qué es Web Mapping?
Es el proceso de diseñar, implementar, generar y despachar
mapas en la World Wide Web y sus productos.
Pueden ser:
●   Analíticos (generalmente producto de un GIS)
●   Animados (para mostrar eventos como cursos de agua,
    comunicaciones, flujos, estudios sociales)
●   Colaborativos (OSM, Google, Wikimapia)
●   Dinámicos (creados a demanda del usuario)
●   Atlas en línea
●   Mapas en Tiempo Real (mapas de clima, tráfico, tracking)
●   Mapas estáticos (generalmente imágenes y fotos)
                     http://en.wikipedia.org/wiki/Web_mapping
Vamos con el
Paso a Paso
Paso a Paso
●   Instalación
●   Base de Datos
●   Proyecto Django
●   Modelo (Geo)
●   GeoAdmin
●   Plantillas
●   Vista
●   OpenLayers
●   Portal
Paso a Paso
●   Instalación
    ●   En Debian y derivados
    $ su
    # aptitude install postgresql postgresql-client postgresql-server-dev-all
    # aptitude install postgresql-8.4-postgis postgis
    # aptitude install python-virtualenv virtualenvwrapper
    # exit
    $ mkdirvirtualenv gdj
    ......
    (gdj) $ pip install Django psycopg2
    ....
    (gdj) $


    ●   No cierre esta consola
Paso a Paso
●   Base de Datos
    ●   pg_hba.conf (en /etc/postgresql/8.4/main/)
        (solo para efectos del taller)

    # TYPE DATABASE        USER        CIDR-ADDRESS        METHOD

    # "local" is for Unix domain socket connections only
    local all        all                      trust
    # IPv4 local connections:
    host all         all    127.0.0.1/32      trust
    # IPv6 local connections:
    host all         all    ::1/128            md5



    ●   (Luego reiniciar PostgreSQL)
Paso a Paso
●   Base de Datos
    ●   Crear la base de datos e instalar esquema
        PostGIS
    $ su -
    # su posrgres
    # createdb -E utf-8 geodb
    # createlang plpgsql geodb
    # psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql geodb
    # psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql geodb
    # exit
    # exit
    $
Paso a Paso
●   Proyecto Django
    ●   En la consola inicial
    (gdj) $ django-admin.py startproject web_mapping
    (gdj) $ cd web_mapping/
    (gdj) $ ls
    manage.py web_mapping
    (gdj) $ nano web_mapping/settings.py       # ver siguiente lámina
Paso a Paso
●   Proyecto Django
    ●   En la consola inicial
    DATABASES = {
      'default': {
         'ENGINE': 'django.contrib.gis.db.backends.postgis',
         'NAME': 'geodb',
         'USER': 'postgres',                  #sólo a efectos del taller
         'PASSWORD': '',
         'HOST': '',
         'PORT': '',
      }
    }

    INSTALLED_APPS = (
      'django.contrib.auth',
      'django.contrib.contenttypes',
      'django.contrib.sessions',
      'django.contrib.sites',
      'django.contrib.messages',
      'django.contrib.staticfiles',
      'django.contrib.admin',
      'django.contrib.gis',
      'app1',
    )
Paso a Paso
●   Proyecto Django
    ●   En la consola inicial
    (gdj) $ django-admin.py startproject web_mapping
    (gdj) $ cd web_mapping/
    (gdj) $ ls
    manage.py web_mapping
    (gdj) $ nano web_mapping/settings.py       # ver siguiente lámina
    (gdj) $ python manage.py startapp app1
    (gdj) $ cd app1/
    __init__.py models.py tests.py views.py
    (gdj) $ nano models.py                     #ver siguiente lámina
    .....
Paso a Paso
●   Modelo (Geo)
     from django.contrib.gis.db import models

     # Este es un layer en su mapa para guardar los Puntos De Interes de su
     # Aplicacion.

     class PuntosDeInteres(models.Model):
        nombre = models.CharField(max_length=50)
        descripcion = models.TextField(blank=True, null=True)

       # Aqui es donde GeoDjango hace su magia negra
       pto = models.PointField()
       objects = models.GeoManager()

       def __unicode__(self):
         return self.nombre

       class Meta():
          verbose_name = "Punto de Interes"
          verbose_name_plural = "Puntos de Interes"
Paso a Paso
●   Modelo (Geo)
     (gdj) $ cd ..
     (gdj) $ python manage.py validate
     0 errors found
     (gdj) $ python manage.py syncdb
     Creating tables ...
     Creating table auth_permission
     Creating table auth_group_permissions
     Creating table auth_group
     Creating table auth_user_user_permissions
     Creating table auth_user_groups
     Creating table auth_user
     Creating table django_content_type
     Creating table django_session
     Creating table django_site
     Creating table django_admin_log
     Creating table app1_puntosdeinteres
Paso a Paso
●   Modelo (Geo)
     You just installed Django's auth system, which means you don't have any
     superusers defined.
     Would you like to create one now? (yes/no): yes
     Username (leave blank to use 'atmantree'): admin
     E-mail address: admin@adm.in
     Password:
     Password (again):
     Superuser created successfully.
     Installing custom SQL ...
     Installing indexes ...
     Installed 0 object(s) from 0 fixture(s)
     (gdj) $
Paso a Paso
●   Modelo (Geo)
     (gdj) $ python manage.py sql app1
     BEGIN;
     CREATE TABLE "app1_puntosdeinteres" (
       "id" serial NOT NULL PRIMARY KEY,
       "nombre" varchar(50) NOT NULL,
       "descripcion" text
     )
     ;
     COMMIT;
     (gdj) $ python manage.py dbshell
     psql (8.4.13)
     conexión SSL (cifrado: DHE-RSA-AES256-SHA, bits: 256)
     Digite «help» para obtener ayuda.

     geodb=# d app1_puntosdeinteres
Paso a Paso
      ●   Modelo (Geo)
                                     Tabla «public.app1_puntosdeinteres»
   Columna |             Tipo         |                           Modificadores
-------------+-----------------------+-----------------------------------------------------------------------------
 id               | integer             | not null valor por omisión nextval('app1_puntosdeinteres_id_seq'::regclass)
 nombre          | character varying(50) | not null
 descripcion | text                   |
 pto         | geometry              | not null
Índices:
    "app1_puntosdeinteres_pkey" PRIMARY KEY, btree (id)
    "app1_puntosdeinteres_pto_id" gist (pto)
Restricciones CHECK:
    "enforce_dims_pto" CHECK (st_ndims(pto) = 2)
    "enforce_geotype_pto" CHECK (geometrytype(pto) = 'POINT'::text OR pto IS NULL)
    "enforce_srid_pto" CHECK (st_srid(pto) = 4326)

geodb=#
Paso a Paso
●   Modelo (Geo)
     geodb=# q
     (gdj) $




    ●   y con esto ya tenemos nuestro modelo geográfico
        instalado en PostgreSQL. GeoDjango funciona con
        otros backends de base de datos, sin embargo
        PostGIS (PostgreSQL) es quien tiene mayor
        cantidad de funcionalidades implemementadas.
Paso a Paso
●   GeoAdmin
    (gdj) $ nano app1/admin.py
    ....
    from django.contrib.gis import admin
    from models import PuntosDeInteres

    admin.site.register(PuntosDeInteres, admin.OSMGeoAdmin)
    ....
    (gdj) $ nano web_mapping/urls.py
    ....
    from django.conf.urls import patterns, url, include
    from django.contrib.gis import admin

    admin.autodiscover()

    urlpatterns = patterns('',
         url(r'^admin/', include(admin.site.urls)),
    )
    ....
    (gdj) $ python manage.py runserver
Paso a Paso
●   GeoAdmin
Paso a Paso
●   GeoAdmin
Paso a Paso
●   GeoAdmin
Paso a Paso
●   GeoAdmin
Paso a Paso
●   Plantilla
     (gdj) $ mkdir templates
     (gdj) $ nano templates/PuntosKML.kml
     ....
     <?xml version="1.0" encoding="UTF-8"?>
     <kml xmlns="http://earth.google.com/kml/{% block kml_version %}2.1{%
     endblock %}">
     <Document>
     {% for punto in puntos %}<Placemark>
          <name>{{ punto.nombre }}</name>
          <description>{{ punto.descripcion }}</description>
          {{ punto.kml|safe }}
       </Placemark>{% endfor %}
     </Document>
     </kml>
     ....
     (gdj) $
Paso a Paso
●   Plantilla
     (gdj) $ nano web_mapping/settings.py
     ....
     TEMPLATE_DIRS = (
          "/home/(coloque la ruta de su pc)/web_mapping/templates",
     )
     ....
     (gdj) $
Paso a Paso
●   Vista
     (gdj) $ nano app1/views.py
     ....
     from django.contrib.gis.shortcuts import render_to_kml
     from models import PuntosDeInteres

     def kml(request):
          puntos = PuntosDeInteres.objects.kml()
          return render_to_kml("PuntosKML.kml",{"puntos":puntos})
     ....
     (gdj) $ nano web_mapping/urls.py
     ....
     from django.conf.urls import patterns, include, url
     from app1.views import kml
     from django.contrib.gis import admin
     admin.autodiscover()
     urlpatterns = patterns('',
          url(r'^admin/', include(admin.site.urls)),
          url(r'^kml/$', kml),
     )
     ....
Paso a Paso
●   Vista
     (gdj) $ python manage.py runserver




    ●   En su navegador visite http://localhost:8000/kml/
    ●   Vea el archivo generado
     <?xml version="1.0" encoding="UTF-8"?>
     <kml xmlns="http://earth.google.com/kml/2.1">
     <Document>
     <Placemark>
        <name>PyCon Venezuela 2012</name>
        <description>Día 2. Sesión de Web Mapping</description>
        <Point><coordinates>-66.97651862,10.46459402</coordinates></Point>
      </Placemark>
     </Document>
     </kml>
Paso a Paso
●   OpenLayers
Paso a Paso
●   OpenLayers
    ●   KISS: Keep It Simple S...
    ●   La mejor manera de aprender OpenLayers es
        comparando los ejemplos con lo que queremos
        hacer.
    ●   Entre a la página http://www.openlayers.org/ y
        revise los ejemplos para OpenStreetMap (OSM) y
        KML
    ●   En la carpeta de las plantillas escriba un archivo
        llamado inicio.html
Paso a Paso
   ●   OpenLayers
<html>
 <head> <title>Web Mapping con Django</title>
  <link rel="stylesheet"
    href="http://openlayers.org/dev/theme/default/style.cs"
    type="text/css">
  <script src="http://openlayers.org/dev/OpenLayers.js"></script>
  <script type="text/javascript">
       /* aquí va el script de OpenLayers */
  </script>
  <style>
    .map {border: 1px solid #ccc; width: 800px; height: 400px; }
  </style>
 </head>
 <body onload="init()">
  <h1>Web Mapping con Django</h1>
  <hr />
  <div id="map" class="map"></div>
 </body>
</html>
Paso a Paso
   ●   OpenLayers
var map, layer, kml;
function init(){
map = new OpenLayers.Map( 'map');
layer = new OpenLayers.Layer.OSM("OSM");
map.addLayer(layer);
kml = new OpenLayers.Layer.Vector("KML", {
  strategies: [new OpenLayers.Strategy.Fixed()],
  protocol: new OpenLayers.Protocol.HTTP({
  url: "kml/",
  format: new OpenLayers.Format.KML({
    extractStyles: true, extractAttributes: true, maxDepth: 2 })
  }) })
map.addLayer(kml);
map.setCenter(
  new OpenLayers.LonLat(-66.83, 10.45).transform(
  new OpenLayers.Projection("EPSG:4326"),
  map.getProjectionObject()), 8);
}
Paso a Paso
●   Portal
     (gdj) $ nano web_mapping/urls.py
     ....
     from django.conf.urls import patterns, include, url
     from django.views.generic.simple import direct_to_template
     from app1.views import kml

     from django.contrib.gis import admin
     admin.autodiscover()

     urlpatterns = patterns('',

       url(r'^admin/', include(admin.site.urls)),
       url(r'^kml/$', kml),
       url(r'^$', direct_to_template, {'template':'inicio.html'}),
     )
     ....
     (gdj) $
Paso a Paso
●   Portal
Lo que sigue
●   Agregar Controles al    ●   Mejorar el diseño de
    mapa                        la página
●   Hacer un Popup que      ●   Crear un método de
    muestre los datos del       captura sin el
    punto de interés            GeoAdmin
●   Agregar cambiar el      ●   Etc, etc, etc..
    símbolo del punto de
    interés
A modo de Conclusión
●   Hacer Web Mapping con Django es directo, sin
    embargo hay muchos temas intermedios que
    deberá comenzar a manejar, como:
    ●   Bases de datos espaciales
    ●   Librería OpenLayers o Equivalente
    ●   Fuentes de Datos (servicios WMS, WFS, Google
        Maps, etc)
    ●   Proyecciones de mapas
    ●   Análisis Espacial
A modo de Conclusión
●   Ya tiene unos primeros pasos adelantados,
    ahora aplique lo aquí visto en su caso de
    estudio.
●   Además de los ejemplos de OpenLayers puede
    usar el proyecto Geoportal como una referencia
    o una plantilla para su proyecto particular
    ●   https://bitbucket.org/atmantree/geoportal/
●   Prefiera fuentes y estándares libres.
●   Disfrute mapeando la red.
Gracias por su tiempo..




   Licencia del documento: CC BY-NC-SA 3.0
http://creativecommons.org/licenses/by-nc-sa/3.0/

Contenu connexe

Tendances

Android structure
Android structureAndroid structure
Android structureKumar
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScriptT11 Sessions
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Ryan Padilha
 
JavaScript - Chapter 8 - Objects
 JavaScript - Chapter 8 - Objects JavaScript - Chapter 8 - Objects
JavaScript - Chapter 8 - ObjectsWebStackAcademy
 
JavaScript - Chapter 11 - Events
 JavaScript - Chapter 11 - Events  JavaScript - Chapter 11 - Events
JavaScript - Chapter 11 - Events WebStackAcademy
 
JavaScript - Chapter 4 - Types and Statements
 JavaScript - Chapter 4 - Types and Statements JavaScript - Chapter 4 - Types and Statements
JavaScript - Chapter 4 - Types and StatementsWebStackAcademy
 

Tendances (9)

Android structure
Android structureAndroid structure
Android structure
 
Span and Div tags in HTML
Span and Div tags in HTMLSpan and Div tags in HTML
Span and Div tags in HTML
 
Introduction to web programming with JavaScript
Introduction to web programming with JavaScriptIntroduction to web programming with JavaScript
Introduction to web programming with JavaScript
 
JAVA - Orientação a Objetos
JAVA - Orientação a ObjetosJAVA - Orientação a Objetos
JAVA - Orientação a Objetos
 
Css position
Css positionCss position
Css position
 
Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)Orientação a Objetos no Delphi - Controle de Estoque (III)
Orientação a Objetos no Delphi - Controle de Estoque (III)
 
JavaScript - Chapter 8 - Objects
 JavaScript - Chapter 8 - Objects JavaScript - Chapter 8 - Objects
JavaScript - Chapter 8 - Objects
 
JavaScript - Chapter 11 - Events
 JavaScript - Chapter 11 - Events  JavaScript - Chapter 11 - Events
JavaScript - Chapter 11 - Events
 
JavaScript - Chapter 4 - Types and Statements
 JavaScript - Chapter 4 - Types and Statements JavaScript - Chapter 4 - Types and Statements
JavaScript - Chapter 4 - Types and Statements
 

Similaire à Web Mapping con Django

Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeersbetabeers
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterAdolfo Sanz De Diego
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoCongresoWeb
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"Alberto Ruibal
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidAlberto Ruibal
 
Django
DjangoDjango
Djangoykro
 
Trabajando con gdal, usando fwtools
Trabajando con gdal, usando fwtoolsTrabajando con gdal, usando fwtools
Trabajando con gdal, usando fwtoolsmanalva
 
ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo Washington Bastidas
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Fernando Petrola
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Pakman Lh
 
Android Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityAndroid Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityFe
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dslJorge Aguilera
 
Asciidoctor para Dev(Ops)
Asciidoctor para Dev(Ops)Asciidoctor para Dev(Ops)
Asciidoctor para Dev(Ops)Jorge Aguilera
 

Similaire à Web Mapping con Django (20)

Django
DjangoDjango
Django
 
Taller de Django betabeers
Taller de Django betabeersTaller de Django betabeers
Taller de Django betabeers
 
Codemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipsterCodemotion 2017 - Taller de JHipster
Codemotion 2017 - Taller de JHipster
 
Programación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge PintadoProgramación de Apps con Android – Avanzado por Jorge Pintado
Programación de Apps con Android – Avanzado por Jorge Pintado
 
Introducción a DJango
Introducción a DJangoIntroducción a DJango
Introducción a DJango
 
Grails
GrailsGrails
Grails
 
LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"LabAndroid: Taller "Mi Primera Aplicación Android"
LabAndroid: Taller "Mi Primera Aplicación Android"
 
MobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a AndroidMobileCONGalicia Introducción a Android
MobileCONGalicia Introducción a Android
 
NoSQL, Mongo DB & Google Maps
NoSQL, Mongo DB & Google MapsNoSQL, Mongo DB & Google Maps
NoSQL, Mongo DB & Google Maps
 
Django
DjangoDjango
Django
 
dajaxproject.com
dajaxproject.comdajaxproject.com
dajaxproject.com
 
Trabajando con gdal, usando fwtools
Trabajando con gdal, usando fwtoolsTrabajando con gdal, usando fwtools
Trabajando con gdal, usando fwtools
 
ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo ArcGIS 10 - Actualización y Respaldo
ArcGIS 10 - Actualización y Respaldo
 
Odd2015 scraping
Odd2015 scrapingOdd2015 scraping
Odd2015 scraping
 
Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014 Dragome en JavaConf Buenos Aires 2014
Dragome en JavaConf Buenos Aires 2014
 
Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8Twig y otros "themas" en Drupal 8
Twig y otros "themas" en Drupal 8
 
Android Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivityAndroid Tips & Tricks - Boosting your productivity
Android Tips & Tricks - Boosting your productivity
 
Tu api ha muerto larga vida a tu dsl
Tu api ha muerto  larga vida a tu dslTu api ha muerto  larga vida a tu dsl
Tu api ha muerto larga vida a tu dsl
 
Asciidoctor para Dev(Ops)
Asciidoctor para Dev(Ops)Asciidoctor para Dev(Ops)
Asciidoctor para Dev(Ops)
 
Computación distribuida usando Python
Computación distribuida usando PythonComputación distribuida usando Python
Computación distribuida usando Python
 

Plus de Carlos Gustavo Ruiz

Bases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de alturaBases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de alturaCarlos Gustavo Ruiz
 
Por qué hacemos persistencia de datos
Por qué hacemos persistencia de datosPor qué hacemos persistencia de datos
Por qué hacemos persistencia de datosCarlos Gustavo Ruiz
 
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)Carlos Gustavo Ruiz
 
mini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQLmini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQLCarlos Gustavo Ruiz
 
Integrando mis librerías C++ con Python
Integrando mis librerías C++ con PythonIntegrando mis librerías C++ con Python
Integrando mis librerías C++ con PythonCarlos Gustavo Ruiz
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLCarlos Gustavo Ruiz
 
Mejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de DatosMejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de DatosCarlos Gustavo Ruiz
 
Mapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMapMapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMapCarlos Gustavo Ruiz
 
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)Carlos Gustavo Ruiz
 

Plus de Carlos Gustavo Ruiz (13)

Vim python-mode
Vim python-modeVim python-mode
Vim python-mode
 
Bases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de alturaBases de Datos Libres desde 40.000 pies de altura
Bases de Datos Libres desde 40.000 pies de altura
 
Por qué hacemos persistencia de datos
Por qué hacemos persistencia de datosPor qué hacemos persistencia de datos
Por qué hacemos persistencia de datos
 
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
Geomática Libre en Venezuela - Presentación a José Sosa (CNTI)
 
mini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQLmini-taller de Base de Datos y PostgreSQL
mini-taller de Base de Datos y PostgreSQL
 
Integrando mis librerías C++ con Python
Integrando mis librerías C++ con PythonIntegrando mis librerías C++ con Python
Integrando mis librerías C++ con Python
 
Requerimientos de PostgreSQL
Requerimientos de PostgreSQLRequerimientos de PostgreSQL
Requerimientos de PostgreSQL
 
Alta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQLAlta Disponibilidad con PostgreSQL
Alta Disponibilidad con PostgreSQL
 
Guía de pgpool Paso a Paso
Guía de pgpool Paso a PasoGuía de pgpool Paso a Paso
Guía de pgpool Paso a Paso
 
Mejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de DatosMejores prácticas para migración de Bases de Datos
Mejores prácticas para migración de Bases de Datos
 
Mapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMapMapa Colaborativo con OpenStreetMap
Mapa Colaborativo con OpenStreetMap
 
Python vs El Mundo
Python vs El MundoPython vs El Mundo
Python vs El Mundo
 
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
GeoEtiquetas (2das Jornadas Latinoamérica y Caribe gvSIG)
 

Web Mapping con Django

  • 1. El autor del presente documento lo ha publicado bajo las condiciones que especifica la licencia Creative Commons Attribution-NonCommercial-ShareAlike 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/ En caso de dudas escriba a: info@atmantree.com
  • 2. Web Mapping con Django Ing. Carlos Gustavo Ruiz http://atmantree.com Noviembre, 2012 CC BY-NC-SA 3.0
  • 3. Temas ● ¿Qué es Geomática? ● GeoAdmin ● ¿Qué es Web ● Plantilla Mapping? ● Vista ● Paso a paso ● OpenLayers ● Instalación ● Nuestro Portal ● Base de Datos ● Lo que sigue ● Proyecto Django ● A modo de Conclusión ● Modelo (Geo)
  • 4. ¿Qué es Geomática? [Geo] + Infor[mática] = [Geomática]
  • 5. ¿Qué es Geomática? Palabras clave: ● Conjunto de ciencias ● Integración ● Medios para la captura ● Tratamiento ● Análisis ● Interpretación ● Difusión ● Almacenamiento ● Información Geográfica.
  • 6. ¿Qué es Geomática Libre? Entendemos que la Geomática Libre es en cierto modo un superconjunto del Software Libre pues integra las 4 libertades de Uso, Introspección, Mejora y Copias a aspectos como: ● Software ● Datos ● Estándares
  • 7. ¿Qué es Web Mapping? Es el proceso de diseñar, implementar, generar y despachar mapas en la World Wide Web y sus productos. Pueden ser: ● Analíticos (generalmente producto de un GIS) ● Animados (para mostrar eventos como cursos de agua, comunicaciones, flujos, estudios sociales) ● Colaborativos (OSM, Google, Wikimapia) ● Dinámicos (creados a demanda del usuario) ● Atlas en línea ● Mapas en Tiempo Real (mapas de clima, tráfico, tracking) ● Mapas estáticos (generalmente imágenes y fotos) http://en.wikipedia.org/wiki/Web_mapping
  • 8.
  • 9.
  • 10.
  • 11.
  • 13.
  • 14. Paso a Paso ● Instalación ● Base de Datos ● Proyecto Django ● Modelo (Geo) ● GeoAdmin ● Plantillas ● Vista ● OpenLayers ● Portal
  • 15. Paso a Paso ● Instalación ● En Debian y derivados $ su # aptitude install postgresql postgresql-client postgresql-server-dev-all # aptitude install postgresql-8.4-postgis postgis # aptitude install python-virtualenv virtualenvwrapper # exit $ mkdirvirtualenv gdj ...... (gdj) $ pip install Django psycopg2 .... (gdj) $ ● No cierre esta consola
  • 16. Paso a Paso ● Base de Datos ● pg_hba.conf (en /etc/postgresql/8.4/main/) (solo para efectos del taller) # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all trust # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 md5 ● (Luego reiniciar PostgreSQL)
  • 17. Paso a Paso ● Base de Datos ● Crear la base de datos e instalar esquema PostGIS $ su - # su posrgres # createdb -E utf-8 geodb # createlang plpgsql geodb # psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/postgis.sql geodb # psql -f /usr/share/postgresql/8.4/contrib/postgis-1.5/spatial_ref_sys.sql geodb # exit # exit $
  • 18. Paso a Paso ● Proyecto Django ● En la consola inicial (gdj) $ django-admin.py startproject web_mapping (gdj) $ cd web_mapping/ (gdj) $ ls manage.py web_mapping (gdj) $ nano web_mapping/settings.py # ver siguiente lámina
  • 19. Paso a Paso ● Proyecto Django ● En la consola inicial DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'geodb', 'USER': 'postgres', #sólo a efectos del taller 'PASSWORD': '', 'HOST': '', 'PORT': '', } } INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', 'django.contrib.admin', 'django.contrib.gis', 'app1', )
  • 20. Paso a Paso ● Proyecto Django ● En la consola inicial (gdj) $ django-admin.py startproject web_mapping (gdj) $ cd web_mapping/ (gdj) $ ls manage.py web_mapping (gdj) $ nano web_mapping/settings.py # ver siguiente lámina (gdj) $ python manage.py startapp app1 (gdj) $ cd app1/ __init__.py models.py tests.py views.py (gdj) $ nano models.py #ver siguiente lámina .....
  • 21. Paso a Paso ● Modelo (Geo) from django.contrib.gis.db import models # Este es un layer en su mapa para guardar los Puntos De Interes de su # Aplicacion. class PuntosDeInteres(models.Model): nombre = models.CharField(max_length=50) descripcion = models.TextField(blank=True, null=True) # Aqui es donde GeoDjango hace su magia negra pto = models.PointField() objects = models.GeoManager() def __unicode__(self): return self.nombre class Meta(): verbose_name = "Punto de Interes" verbose_name_plural = "Puntos de Interes"
  • 22. Paso a Paso ● Modelo (Geo) (gdj) $ cd .. (gdj) $ python manage.py validate 0 errors found (gdj) $ python manage.py syncdb Creating tables ... Creating table auth_permission Creating table auth_group_permissions Creating table auth_group Creating table auth_user_user_permissions Creating table auth_user_groups Creating table auth_user Creating table django_content_type Creating table django_session Creating table django_site Creating table django_admin_log Creating table app1_puntosdeinteres
  • 23. Paso a Paso ● Modelo (Geo) You just installed Django's auth system, which means you don't have any superusers defined. Would you like to create one now? (yes/no): yes Username (leave blank to use 'atmantree'): admin E-mail address: admin@adm.in Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s) (gdj) $
  • 24. Paso a Paso ● Modelo (Geo) (gdj) $ python manage.py sql app1 BEGIN; CREATE TABLE "app1_puntosdeinteres" ( "id" serial NOT NULL PRIMARY KEY, "nombre" varchar(50) NOT NULL, "descripcion" text ) ; COMMIT; (gdj) $ python manage.py dbshell psql (8.4.13) conexión SSL (cifrado: DHE-RSA-AES256-SHA, bits: 256) Digite «help» para obtener ayuda. geodb=# d app1_puntosdeinteres
  • 25. Paso a Paso ● Modelo (Geo) Tabla «public.app1_puntosdeinteres» Columna | Tipo | Modificadores -------------+-----------------------+----------------------------------------------------------------------------- id | integer | not null valor por omisión nextval('app1_puntosdeinteres_id_seq'::regclass) nombre | character varying(50) | not null descripcion | text | pto | geometry | not null Índices: "app1_puntosdeinteres_pkey" PRIMARY KEY, btree (id) "app1_puntosdeinteres_pto_id" gist (pto) Restricciones CHECK: "enforce_dims_pto" CHECK (st_ndims(pto) = 2) "enforce_geotype_pto" CHECK (geometrytype(pto) = 'POINT'::text OR pto IS NULL) "enforce_srid_pto" CHECK (st_srid(pto) = 4326) geodb=#
  • 26. Paso a Paso ● Modelo (Geo) geodb=# q (gdj) $ ● y con esto ya tenemos nuestro modelo geográfico instalado en PostgreSQL. GeoDjango funciona con otros backends de base de datos, sin embargo PostGIS (PostgreSQL) es quien tiene mayor cantidad de funcionalidades implemementadas.
  • 27. Paso a Paso ● GeoAdmin (gdj) $ nano app1/admin.py .... from django.contrib.gis import admin from models import PuntosDeInteres admin.site.register(PuntosDeInteres, admin.OSMGeoAdmin) .... (gdj) $ nano web_mapping/urls.py .... from django.conf.urls import patterns, url, include from django.contrib.gis import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), ) .... (gdj) $ python manage.py runserver
  • 28. Paso a Paso ● GeoAdmin
  • 29. Paso a Paso ● GeoAdmin
  • 30. Paso a Paso ● GeoAdmin
  • 31.
  • 32.
  • 33. Paso a Paso ● GeoAdmin
  • 34. Paso a Paso ● Plantilla (gdj) $ mkdir templates (gdj) $ nano templates/PuntosKML.kml .... <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/{% block kml_version %}2.1{% endblock %}"> <Document> {% for punto in puntos %}<Placemark> <name>{{ punto.nombre }}</name> <description>{{ punto.descripcion }}</description> {{ punto.kml|safe }} </Placemark>{% endfor %} </Document> </kml> .... (gdj) $
  • 35. Paso a Paso ● Plantilla (gdj) $ nano web_mapping/settings.py .... TEMPLATE_DIRS = ( "/home/(coloque la ruta de su pc)/web_mapping/templates", ) .... (gdj) $
  • 36. Paso a Paso ● Vista (gdj) $ nano app1/views.py .... from django.contrib.gis.shortcuts import render_to_kml from models import PuntosDeInteres def kml(request): puntos = PuntosDeInteres.objects.kml() return render_to_kml("PuntosKML.kml",{"puntos":puntos}) .... (gdj) $ nano web_mapping/urls.py .... from django.conf.urls import patterns, include, url from app1.views import kml from django.contrib.gis import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^kml/$', kml), ) ....
  • 37. Paso a Paso ● Vista (gdj) $ python manage.py runserver ● En su navegador visite http://localhost:8000/kml/ ● Vea el archivo generado <?xml version="1.0" encoding="UTF-8"?> <kml xmlns="http://earth.google.com/kml/2.1"> <Document> <Placemark> <name>PyCon Venezuela 2012</name> <description>Día 2. Sesión de Web Mapping</description> <Point><coordinates>-66.97651862,10.46459402</coordinates></Point> </Placemark> </Document> </kml>
  • 38. Paso a Paso ● OpenLayers
  • 39. Paso a Paso ● OpenLayers ● KISS: Keep It Simple S... ● La mejor manera de aprender OpenLayers es comparando los ejemplos con lo que queremos hacer. ● Entre a la página http://www.openlayers.org/ y revise los ejemplos para OpenStreetMap (OSM) y KML ● En la carpeta de las plantillas escriba un archivo llamado inicio.html
  • 40. Paso a Paso ● OpenLayers <html> <head> <title>Web Mapping con Django</title> <link rel="stylesheet" href="http://openlayers.org/dev/theme/default/style.cs" type="text/css"> <script src="http://openlayers.org/dev/OpenLayers.js"></script> <script type="text/javascript"> /* aquí va el script de OpenLayers */ </script> <style> .map {border: 1px solid #ccc; width: 800px; height: 400px; } </style> </head> <body onload="init()"> <h1>Web Mapping con Django</h1> <hr /> <div id="map" class="map"></div> </body> </html>
  • 41. Paso a Paso ● OpenLayers var map, layer, kml; function init(){ map = new OpenLayers.Map( 'map'); layer = new OpenLayers.Layer.OSM("OSM"); map.addLayer(layer); kml = new OpenLayers.Layer.Vector("KML", { strategies: [new OpenLayers.Strategy.Fixed()], protocol: new OpenLayers.Protocol.HTTP({ url: "kml/", format: new OpenLayers.Format.KML({ extractStyles: true, extractAttributes: true, maxDepth: 2 }) }) }) map.addLayer(kml); map.setCenter( new OpenLayers.LonLat(-66.83, 10.45).transform( new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject()), 8); }
  • 42. Paso a Paso ● Portal (gdj) $ nano web_mapping/urls.py .... from django.conf.urls import patterns, include, url from django.views.generic.simple import direct_to_template from app1.views import kml from django.contrib.gis import admin admin.autodiscover() urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^kml/$', kml), url(r'^$', direct_to_template, {'template':'inicio.html'}), ) .... (gdj) $
  • 43. Paso a Paso ● Portal
  • 44. Lo que sigue ● Agregar Controles al ● Mejorar el diseño de mapa la página ● Hacer un Popup que ● Crear un método de muestre los datos del captura sin el punto de interés GeoAdmin ● Agregar cambiar el ● Etc, etc, etc.. símbolo del punto de interés
  • 45. A modo de Conclusión ● Hacer Web Mapping con Django es directo, sin embargo hay muchos temas intermedios que deberá comenzar a manejar, como: ● Bases de datos espaciales ● Librería OpenLayers o Equivalente ● Fuentes de Datos (servicios WMS, WFS, Google Maps, etc) ● Proyecciones de mapas ● Análisis Espacial
  • 46. A modo de Conclusión ● Ya tiene unos primeros pasos adelantados, ahora aplique lo aquí visto en su caso de estudio. ● Además de los ejemplos de OpenLayers puede usar el proyecto Geoportal como una referencia o una plantilla para su proyecto particular ● https://bitbucket.org/atmantree/geoportal/ ● Prefiera fuentes y estándares libres. ● Disfrute mapeando la red.
  • 47. Gracias por su tiempo.. Licencia del documento: CC BY-NC-SA 3.0 http://creativecommons.org/licenses/by-nc-sa/3.0/