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/
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
Me alegra.. éxitos
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
Que distribución y versión de linux utilizas????
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
Hay posibilidad, es mas fácil desde la codificación.
Esta herramienta utiliza OpenLayer, la que puede personalizarse y tener la capa de mapa que se desee.