Essa palestra mostra todo o poder de georreferenciamento por trás do Django, será apresentado o caminho das pedras para quem quer criar mapas completos e complexos usando soluções livres. Além do Django e seu poderoso ORM, um pouco de PostGIS, OpenStreetMaps e OpenLayers será apresentado, são ferramentas que casam muito bem com o Django no desenvolvimento de soluções ricas.
2. Sobre o palestrante
• Sócio fundador da Propus Science;
• Trabalha com software livre desde 1995;
• Trabalha com Python desde 2000;
• Membro da Associação Python Brasil;
• Já foi colaborador de diversos projetos de
software livre;
Twitter: @dump
Blog: http://christiano.me
9. Bibliotecas e ferramentas
1. GEOS (Geometry Engine Open
Source);
2. GDAL (Geospatial Data Abstraction
Library);
3. GeoIP (Biblioteca de localização de
IPs);
4. PROJ4 (Biblioteca de Projeções
Geográficas);
11. GeoDjango
• Módulo nativo do Django para criar
aplicações geográficas;
• Já está presente na seção de contrib
do Django, não é necessário instalar
nada de fora;
• Oferece toda facilidade do ORM do
Django para aplicações geográficas;
• Bastante completo e bem integrado
com bancos geográficos;
12. Banco de Dados Geográfico
• Permite armazenar objetos
geográficos em uma estrutura de
banco de dados convencional;
• Possui funções geográficas, exemplo,
com um select, é possível pegar todo
o trajeto de um rio e identificar quais
municípios ele cruza;
• O GeoDjango integrou funções
geográficas ao seu ORM;
14. Instalação do PostGIS
A maioria das distribuições já possuem
o pacote pronto do PostGIS;
Portanto, se deseja a versão 2, é
necessário compilar na mão ou usar
repositório alternativo;
17. 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()
19. ESRI Shapefiles
• Formato de arquivos para
informações geográficas e vetoriais;
• Descreve geometrias, pontos e
polígonos de áreas geográficas;
20. Arquivos Shape
• shp -> shape, armazena a forma
geográfica do objeto;
• shx -> índices e informações de
busca sobre o shape;
• dbf -> colunas e atributos existentes
no shape;
22. Importando Shape com GeoDjango
import os
from django.contrib.gis.utils import LayerMapping
from 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)
23. Consultando pontos no banco
Em qual Município está localizado o
ponto abaixo?
Latitude: -23.5006659999999989
Longitude:
-46.6165799999999990
24. 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.nome
SÃO PAULO
26. API de Mapa
• O GeoDjango não faz plotagem
automática no mapa;
• Por respeitar todos os padrões Geo,
você escolhe a API de mapa que
desejar.
• É possível plotar pontos no Google
Maps, OpenStreetMap, MapBox,
Bing Maps e qualquer outro que
possuir API padrão Geo;
27. OpenStreetMap
• Ótima alternativa ao Google Maps;
• Funciona como um "wiki" de mapas;
• Totalmente colaborativo;
• API bastante completa;
• Possibilidade de subir seu próprio
servidor de mapas;
• http://www.openstreetmap.org/
28. MapBox
• Alternativa "freemium" ao Google
Maps;
• Utiliza estrutura do OpenStreetMap;
• Possibilidade de estilizar os mapas;
• Várias ferramentas, como o TileMill,
permite uma melhor customização da
aplicação de mapa;
• mapbox.js é uma API web bem
simples e eficiente;
• http://www.mapbox.com/
29. Leaflet
• Biblioteca JavaScript para criar
mapas mobile-friendly;
• Baseado no OpenStreetMap e
MapBox;
• Permite uma melhor interatividade
de mapas com dispositiveis móveis;
• http://leafletjs.com/
30. OpenLayers
• API JavaScript para criação de
mapas dinâmicos 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/