Geodjango – Primeros Pasos – PyTatuy 10:2012

Charla dada en Mérida en el marco de PyTatuy 10:2012

Es este artículo explicaré la forma de administrar puntos de interés en una capa de OSM con GeoDjango de una manera sencilla desde el admin de Django.

Instalación de Geodjango

Paso 1

Instalar postgreSQL, GIS y algunos programas básicos necesarios necesarios

sudo apt-get install binutils gdal-bin postgresql-9.1-postgis postgresql-server-dev-9.1 python-psycopg2 python-setuptools
sudo apt-get install python-virtualenv
sudo apt-get install python-dev

Paso 2

Generar la plantilla (template) geo-espacial para postgreSQL

POSTGIS_SQL_PATH=`pg_config --sharedir`/contrib/postgis-1.5
# Crear la planilla (template) geoespacial para postgreSQL ).
sudo -u postgres createdb -E UTF8 template_postgis
sudo -u postgres createlang -d template_postgis plpgsql # Adding PLPGSQL language support.
# Permitir que cualquier usuario pueda usar la planilla
sudo -u postgres psql -d postgres -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
# Cargamos la data necesaria para la planilla
sudo -u postgres psql -d template_postgis -f $POSTGIS_SQL_PATH/postgis.sql
sudo -u postgres psql -d template_postgis -f $POSTGIS_SQL_PATH/spatial_ref_sys.sql
# Habilitamos la planilla a todos los usuarios
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
sudo -u postgres psql -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"

Paso 3

Crear un usuario y una base de datos geoespacial postgreSQL

# Responder no a todas las preguntas
sudo -u postgres createuser --createdb testgis_user
sudo -u postgres createdb -T template_postgis -O testgis_user testgis_db
sudo -u postgres psql testgis_db -c "ALTER USER testgis_user with password '1234'";

Paso 4
Montamos Django en un ambiente virtual. ( para saber mas de virtuaenv: http://pypi.python.org/pypi/virtualenv.)

virtualenv --no-site-packages testgis
cd testgis
. ./bin/activate
pip install django psycopg2

# Otros paquetes no obligatorios que podrían resultar utiles 
pip install django-extensions 
easy_install vectorformats # Para el manejo de capas vectoriales

Paso 5

Mostar una capa de OSM con posibilidad de editar data en el SIG

Crearemos un directorio para trabajar con los proyectos de GeoDjango

django-admin.py startproject PyTatuyGeodjango # creamos el proyecto
cd PyTatuyGeodjango
python ./manage.py startapp base # para mostar una capa base

Editamos settins.py

vi PyTatuyGeodjango/settings.py # para editar la configuración del sitio

Modificamos las siguientes lineas

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'testgis_db',
        'USER': 'testgis_user',
        'PASSWORD': '1234',
        'HOST': 'localhost', 
        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
    }
}

TIME_ZONE = 'America/Caracas'

LANGUAGE_CODE = 'es-ve'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    'django.contrib.gis',
    'base'
)

Editamos urls.py

vi PyTatuyGeodjango/urls.py # para editar la configuración del sitio

Descomentar las lineas 4, 5 y 17

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    #url(r'^', include('base.urls')),
    # Examples:
    # url(r'^$', 'PyTatuyGeodjango.views.home', name='home'),
    # url(r'^PyTatuyGeodjango/', include('PyTatuyGeodjango.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
)

Generar el modelo base/models.py

from django.contrib.gis.db import models

class Base(models.Model):
    def __unicode__(self):
        return self.name
    name = models.CharField(max_length=100)
    geom = models.PointField()
    objects = models.GeoManager()

Este modelo es para la DB base con opción para manejar nombre y el punto de referencia

Generar el archivo base/admin.py

from django.contrib.gis import admin
from models import Base

admin.site.register(Base, admin.OSMGeoAdmin)

Por ultimo sincronizamos la base de datos y corremos el servidor

python ./manage.py syncdb
python manage.py runserver
Validating models...

0 errors found
Django version 1.4.2, using settings 'PyTatuyGeodjango.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Referencias:
http://www.chicagodjango.com/blog/geo-django-quickstart/
http://docs.dotcloud.com/0.4/tutorials/python/geodjango/
https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/
http://code.google.com/p/geodjango-basic-apps/
https://github.com/crschmidt/olhttp
https://docs.djangoproject.com/en/dev/ref/contrib/gis/geos/
https://bitbucket.org/ikks/django-cms-osm/src/a57658254a2b?at=default
http://invisibleroads.com/tutorials/geodjango-googlemaps-build.html
https://docs.djangoproject.com/en/dev/ref/contrib/gis/tutorial/

6 Comments

  1. Quería Agradecer a Usted por su Tutorial que me a sido de gran ayuda, estoy realizando mi tesis en un sistema de información geográfica y de verdad que me a ayudado mucho.

    Saludos

  2. buenas tardes disculpe tengo un problema q cuando por consola ejecuto este comando apt-get install libgd2-xpm-dev
    sale esto:Leyendo lista de paquetes… Hecho
    Creando árbol de dependencias
    Leyendo la información de estado… Hecho
    E: No se ha podido localizar el paquete libgd2-xpm-dev
    que puedo hacer porque tambien me ocurre con otra libreria

  3. Muchas gracias por el posts, está muy bueno, una pregunta, haz usado Google Maps API 3 con geodjango? Tienes alguna información para compartir sobre eso?

    Saludos

Leave a Comment.