If you can't read please download the document
Upload
christiano-anderson
View
1.175
Download
1
Embed Size (px)
Citation preview
GeoDjango
Mapeando a Terra com
GeoDjango
Christiano Anderson Twitter: @dump
[email protected]
Sobre o palestrante
Trabalha com software livre desde 1995;
Trabalha com Python desde 2000;
Membro da Associao Python Brasil;
Responsvel tcnico do Cultura Educa;
J foi colaborador de diversos projetos de software livre;
Twitter: @dumpBlog: http://christiano.me
Agenda
Georreferenciamento;
Padres GIS;
Bases Geogrficas;
Tecnologias;
GeoDjango;
Admin;
OpenStreetMap;
MapBox;
OpenLayers;
Geographic Information System (GIS)
Padres, dados geogrficos, sistemas de coordenadas geogrficas;
Os mapas so planos, mas a Terra no ;
Projees
Representao plana da Terra;
Projees
Os padres GEO
OGC (Open Geospatial Consortium);
WKT (Well Known Text);
WKB (Well Know Binary);
GML (Geometry Markup Language);
KML (Keyhole Markup Language);
WMS (Web Mapping Service);
GeoJSON (Geometry JSON);
SRID (Spatial Reference Indentifier);
Principais objetos geogrficos
Point (ponto);
LineString (linha);
Polygon (Polgono);
MultiPoint (Mltiplos Pontos);
MultiPolygon (Mltiplos Polgonos);
Bibliotecas e ferramentas
GEOS (Geometry Engine Open Source);
GDAL (Geospatial Data Abstraction Library);
GeoIP (Biblioteca de localizao de IPs);
PROJ4 (Biblioteca de Projees Geogrficas);
Projetos
OpenStreetMap;
OpenLayers;
MapBox;
PostGIS;
Google Maps;
GeoDjango;
GeoDjango
Mdulo nativo do Django para criar aplicaes geogrficas;
J est presente na seo de contrib do Django, no necessrio instalar nada de fora;
Oferece toda facilidade do ORM do Django para aplicaes geogrficas;
Bastante completo e bem integrado com bancos geogrficos;
Banco de Dados Geogrfico
Permite armazenar objetos geogrficos em uma estrutura de banco de dados convencional;
Possui funes geogrficas, exemplo, com um select, possvel pegar todo o trajeto de um rio e identificar quais municpios ele cruza;
O GeoDjango integrou funes geogrficas ao seu ORM;
Comparativo bases geogrficas
Fonte: https://docs.djangoproject.com/en/1.5/ref/contrib/gis/db-api/
Instalao do PostGIS
A maioria das distribuies j possuem o pacote pronto do PostGIS;
Portanto, se deseja a verso 2, necessrio compilar na mo ou usar repositrio alternativo;
Configurao
DATABASES = {'default': {'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'culturaeduca','USER': 'nodeware','PASSWORD': '','HOST': '', 'PORT': '', }}
models.py
from django.contrib.gis.db import models
from django.contrib.gis import admin
models.py
class Municipio(models.Model):'''Municipios segundo o IBGE'''
cd_geocodm = models.IntegerField('Codigo IBGE', unique=True, primary_key=True)nome = models.CharField('Municipio', max_length=60)estado = models.ForeignKey(Uf, null=True, blank=True)area = models.MultiPolygonField()objects = models.GeoManager()
Exemplo no Admin do Django
ESRI Shapefiles
Formato de arquivos para informaes geogrficas e vetoriais;
Descreve geometrias, pontos e polgonos de reas geogrficas;
Arquivos Shape
shp -> shape, armazena a forma geogrfica do objeto;
shx -> ndices e informaes de busca sobre o shape;
dbf -> colunas e atributos existentes no shape;
Analisando Shapes
$ ogrinfo -so 43MUE250GC_SIR.shp 43MUE250GC_SIR
INFO: Open of `43MUE250GC_SIR.shp'using driver `ESRI Shapefile' successful.
Layer name: 43MUE250GC_SIRGeometry: PolygonFeature Count: 498Extent: (-57.643885, -33.752081) - (-49.691352, -27.082302)Layer SRS WKT:GEOGCS["SIRGAS 2000", DATUM["SIRGAS2000", SPHEROID["Geodetic_Reference_System_of_1980",6378137,298.2572221009113]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]] ID: Real (11.0) CD_GEOCODM: String (20.0) NM_MUNICIP: String (60.0)
Importando Shape com GeoDjango
import osfrom django.contrib.gis.utils import LayerMappingfrom models import Municipio
mun_mapping = { 'codigo_ibge': 'ID', 'cd_geocodm' : 'CD_GEOCODM', 'nome' : 'NM_MUNICIP', 'area' : 'MULTIPOLYGON',}
mun_shp = os.path.abspath(os.path.join(os.path.dirname(__file__), '43MUE250GC_SIR.shx'))
def run(verbose=True): lm = LayerMapping(Municipio, mun_shp, mun_mapping, transform=False, encoding='iso-8859-1')
lm.save(strict=True, verbose=verbose)
Consultando pontos no banco
Em qual Municpio est localizado o ponto abaixo?
Latitude: -23.5006659999999989Longitude: -46.6165799999999990
Consulta de ponto no banco
>>> from django.contrib.gis.geos import Point
>>> from ibge.models import Municipio
>>> ponto = Point(-46.6165799999999990, -23.5006659999999989)
>>> res = Municipio.objects.get(area__bbcontains=ponto)
>>> print res.nomeSO PAULO
Objeto geogrfico do registro
>>> res.area
Representa o contorno (polgono) do municpio.
possvel exportar o contorno em GeoJSON:
>> res.area.geojsonu'{ "type": "MultiPolygon", "coordinates": [ [ [ [ -46.575473, -23.374018 ], [ -46.57540883044129, -23.374040620923594 ], [ -46.575195, -23.374116 ], [ -46.574706, -23.374336 ], [ -46.574044, -23.37499 ], [ -46.57361, -23.375254 ], [ -46.573461199200892, -23.375336342015196 ], [ -46.573254, -23.375451 ], [ -46.572757, -23.375579 ], [ -46.572661701429197, -23.375598923531598 ], [ -46.572073, -23.375722 ], [ -46.571326, -23.375845 ], [ -46.570697, -23.376002 ], [ -46.570435846461493, -23.376064365024099 ], [ -46.570161, -23.37613 ], [ -46.56981, -23.376126 ], [ -46.569405, -23.376094 ], [ -46.568904, -23.375948 ], [ -46.56852, -23.375736 ], [ -46.568299, -23.375479 ], [ -46.568058, -23.374863 ], [ -46.567912, -23.374383 ], [ -46.567691, -23.374097 ], [ -46.567234, -23.373735 ] (continua)...
API de Mapa
O GeoDjango no faz plotagem automtica no mapa;
Por respeitar todos os padres Geo, voc escolhe a API de mapa que desejar.
possvel plotar pontos no Google Maps, OpenStreetMap, MapBox, Bing Maps e qualquer outro que possuir API padro Geo;
OpenStreetMap
tima alternativa ao Google Maps;
Funciona como um "wiki" de mapas;
Totalmente colaborativo;
API bastante completa;
Possibilidade de subir seu prprio servidor de mapas;
http://www.openstreetmap.org/
MapBox
Alternativa "freemium" ao Google Maps;
Utiliza estrutura do OpenStreetMap;
Possibilidade de estilizar os mapas;
Vrias ferramentas, como o TileMill, permite uma melhor customizao da aplicao de mapa;
mapbox.js uma API web bem simples e eficiente;
http://www.mapbox.com/
Leaflet
Biblioteca JavaScript para criar mapas mobile-friendly;
Baseado no OpenStreetMap e MapBox;
Permite uma melhor interatividade de mapas com dispositiveis mveis;
http://leafletjs.com/
OpenLayers
API JavaScript para criao de mapas dinmicos e multi camadas;
Permite escolher qual backend de mapas ser utilizado (Google Maps, OpenStreetMap, Bing Maps, entre outros);
Possui uma comunidade bastante atuante;
http://openlayers.org/
OBRIGADO!
Twitter: @dumpBlog: http://christiano.meE-mail: [email protected]