ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI
1. Mapeando a Terra com
GeoDjango
Christiano Anderson
Twitter: @dump
chris@christiano.me
2. Sobre o palestrante
•
•
•
•
•
Trabalha com software livre desde 1995;
Trabalha com Python desde 2000;
Membro da Associação Python Brasil;
Responsável técnico do Cultura Educa;
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/