O documento apresenta informações sobre GeoDjango, um framework Django para aplicações geoespaciais. Aborda conceitos de GIS, projeções, padrões geoespaciais, objetos geográficos, bancos de dados geoespaciais e ferramentas como GeoDjango, PostGIS, shapefiles e bibliotecas de mapeamento. Também discute APIs de mapeamento como OpenStreetMap, MapBox e Leaflet.
2. Sobre o palestrante
● Sócio fundador da Nodeware;
● 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 Django para criar aplicações
geográficas;
● 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.0.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/