GeoDjango
Christiano Anderson
Twitter: @dump
anderson@propus.com.br
Sobre o palestrante
• Sócio fundador da Propus Science;
• Trabalha com software livre desde 1995;
• Trabalha com Python de...
Agenda
• Georreferenciamento;
• Padrões GIS;
• Bases Geográficas;
• Tecnologias;
• GeoDjango;
• Admin;
• OpenStreetMap;
• ...
Geographic Information
System (GIS)
• Padrões, dados geográficos, sistemas
de coordenadas geográficas;
• Os mapas são plan...
Projeções
• Representação plana da Terra;
Projeções
Os padrões GEO
1. OGC (Open Geospatial Consortium);
2. WKT (Well Known Text);
3. WKB (Well Know Binary);
4. GML (Geometry ...
Principais objetos geográficos
1. Point (ponto);
2. LineString (linha);
3. Polygon (Polígono);
4. MultiPoint (Múltiplos Po...
Bibliotecas e ferramentas
1. GEOS (Geometry Engine Open
Source);
2. GDAL (Geospatial Data Abstraction
Library);
3. GeoIP (...
Projetos
• OpenStreetMap;
• OpenLayers;
• MapBox;
• PostGIS;
• Google Maps;
• GeoDjango;
GeoDjango
• Módulo nativo do Django para criar
aplicações geográficas;
• Já está presente na seção de contrib
do Django, n...
Banco de Dados Geográfico
• Permite armazenar objetos
geográficos em uma estrutura de
banco de dados convencional;
• Possu...
Comparativo bases geográficas
Fonte: https://docs.djangoproject.com/en/1.5/ref/contrib/gis/db-api/
Instalação do PostGIS
A maioria das distribuições já possuem
o pacote pronto do PostGIS;
Portanto, se deseja a versão 2, é...
Configuração
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'culturaeduca',
'USER'...
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', u...
Exemplo no Admin do Django
ESRI Shapefiles
• Formato de arquivos para
informações geográficas e vetoriais;
• Descreve geometrias, pontos e
polígonos ...
Arquivos Shape
• shp -> shape, armazena a forma
geográfica do objeto;
• shx -> índices e informações de
busca sobre o shap...
Analisando Shapes
$ ogrinfo -so 43MUE250GC_SIR.shp 43MUE250GC_SIR
INFO: Open of `43MUE250GC_SIR.shp'
using driver `ESRI Sh...
Importando Shape com GeoDjango
import os
from django.contrib.gis.utils import LayerMapping
from models import Municipio
mu...
Consultando pontos no banco
Em qual Município está localizado o
ponto abaixo?
Latitude: -23.5006659999999989
Longitude:
-4...
Consulta de ponto no banco
>>> from django.contrib.gis.geos import Point
>>> from ibge.models import Municipio
>>> ponto =...
Objeto geográfico do registro
>>> res.area
<MultiPolygon object at 0x10e40f0a0>
Representa o contorno (polígono) do municí...
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...
OpenStreetMap
• Ótima alternativa ao Google Maps;
• Funciona como um "wiki" de mapas;
• Totalmente colaborativo;
• API bas...
MapBox
• Alternativa "freemium" ao Google
Maps;
• Utiliza estrutura do OpenStreetMap;
• Possibilidade de estilizar os mapa...
Leaflet
• Biblioteca JavaScript para criar
mapas mobile-friendly;
• Baseado no OpenStreetMap e
MapBox;
• Permite uma melho...
OpenLayers
• API JavaScript para criação de
mapas dinâmicos e multi camadas;
• Permite escolher qual backend de
mapas será...
OBRIGADO!
Twitter: @dump
Blog: http://christiano.me
E-mail: anderson@propus.com.br
Próximos SlideShares
Carregando em…5
×

Mapeando a Terra com soluções livres e GeoDjango

456 visualizações

Publicada em

Palestra apresentada no 16 Fórum Internacional de Software Livre - FISL16 sobre GeoDjango, mapeamento livre, OpenStreetMaps, Openlayers, GIS e GEO. Uma rápida introdução a essas tecnologias.

Publicada em: Tecnologia
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
456
No SlideShare
0
A partir de incorporações
0
Número de incorporações
87
Ações
Compartilhamentos
0
Downloads
6
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Mapeando a Terra com soluções livres e GeoDjango

  1. 1. GeoDjango Christiano Anderson Twitter: @dump anderson@propus.com.br
  2. 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
  3. 3. Agenda • Georreferenciamento; • Padrões GIS; • Bases Geográficas; • Tecnologias; • GeoDjango; • Admin; • OpenStreetMap; • MapBox; • OpenLayers;
  4. 4. Geographic Information System (GIS) • Padrões, dados geográficos, sistemas de coordenadas geográficas; • Os mapas são planos, mas a Terra não é;
  5. 5. Projeções • Representação plana da Terra;
  6. 6. Projeções
  7. 7. Os padrões GEO 1. OGC (Open Geospatial Consortium); 2. WKT (Well Known Text); 3. WKB (Well Know Binary); 4. GML (Geometry Markup Language); 5. KML (Keyhole Markup Language); 6. WMS (Web Mapping Service); 7. GeoJSON (Geometry JSON); 8. SRID (Spatial Reference Indentifier);
  8. 8. Principais objetos geográficos 1. Point (ponto); 2. LineString (linha); 3. Polygon (Polígono); 4. MultiPoint (Múltiplos Pontos); 5. MultiPolygon (Múltiplos Polígonos);
  9. 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);
  10. 10. Projetos • OpenStreetMap; • OpenLayers; • MapBox; • PostGIS; • Google Maps; • GeoDjango;
  11. 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. 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;
  13. 13. Comparativo bases geográficas Fonte: https://docs.djangoproject.com/en/1.5/ref/contrib/gis/db-api/
  14. 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;
  15. 15. Configuração DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'culturaeduca', 'USER': 'anderson', 'PASSWORD': '', 'HOST': '', 'PORT': '', } }
  16. 16. models.py from django.contrib.gis.db import models from django.contrib.gis import admin
  17. 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()
  18. 18. Exemplo no Admin do Django
  19. 19. ESRI Shapefiles • Formato de arquivos para informações geográficas e vetoriais; • Descreve geometrias, pontos e polígonos de áreas geográficas;
  20. 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;
  21. 21. Analisando Shapes $ ogrinfo -so 43MUE250GC_SIR.shp 43MUE250GC_SIR INFO: Open of `43MUE250GC_SIR.shp' using driver `ESRI Shapefile' successful. Layer name: 43MUE250GC_SIR Geometry: Polygon Feature Count: 498 Extent: (-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)
  22. 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. 23. Consultando pontos no banco Em qual Município está localizado o ponto abaixo? Latitude: -23.5006659999999989 Longitude: -46.6165799999999990
  24. 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
  25. 25. Objeto geográfico do registro >>> res.area <MultiPolygon object at 0x10e40f0a0> Representa o contorno (polígono) do município. É possível exportar o contorno em GeoJSON: >> res.area.geojson u'{ "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)...
  26. 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. 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. 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. 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. 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/
  31. 31. OBRIGADO! Twitter: @dump Blog: http://christiano.me E-mail: anderson@propus.com.br

×