SlideShare uma empresa Scribd logo
Mapeando a Terra com
GeoDjango
Christiano Anderson
Twitter: @dump
chris@christiano.me
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
Agenda

•
•
•
•
•
•
•
•
•

Georreferenciamento;
Padrões GIS;
Bases Geográficas;
Tecnologias;
GeoDjango;
Admin;
OpenStreetMap;
MapBox;
OpenLayers;
Geographic Information System
(GIS)

•

Padrões, dados geográficos, sistemas de
coordenadas geográficas;

•

Os mapas são planos, mas a Terra não é;
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 Markup Language);
5. KML (Keyhole Markup Language);
6. WMS (Web Mapping Service);
7. GeoJSON (Geometry JSON);
8. SRID (Spatial Reference Indentifier);
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);
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);
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ã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;
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;
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, é necessário
compilar na mão ou usar repositório
alternativo;
Configuração
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 informações
geográficas e vetoriais;

•

Descreve geometrias, pontos e polígonos de
áreas geográficas;
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;
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)
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)
Consultando pontos no banco
Em qual Município está localizado o ponto
abaixo?

Latitude: -23.5006659999999989
Longitude: -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.nome
SÃO PAULO
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)...
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;
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/
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/
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/
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/
OBRIGADO!

Twitter: @dump
Blog: http://christiano.me
E-mail: chris@christiano.me

Mais conteúdo relacionado

ODP
Mapeando a Terra com soluções livres e GeoDjango
PDF
PPTX
Localizando uma Agulha: usando MongoDB para dados Geolocalizados
PPT
Geo-Django Python
PDF
GeoDjango & HTML5 Geolocation
PDF
Team up Django and Web mapping - DjangoCon Europe 2014
PDF
Introduction to GeoDjango
ODP
Geodjango and HTML 5
Mapeando a Terra com soluções livres e GeoDjango
Localizando uma Agulha: usando MongoDB para dados Geolocalizados
Geo-Django Python
GeoDjango & HTML5 Geolocation
Team up Django and Web mapping - DjangoCon Europe 2014
Introduction to GeoDjango
Geodjango and HTML 5

Semelhante a Geo Django - Fórum Goiano de Software Livre - 10 FGSL e 1 ERI (20)

ODP
Mapeando a Terra com GeoDjango
ODP
Mapeando a Terra com GeoDjango
KEY
Geo on Rails - Um guia para manter o seu cabelo.
PDF
Explorando o HTML5 para visualização de dados geográficos
ODP
As geotecnologias mais populares do mercado
PPT
GIS em 3 horas
PDF
Como criar um mapa temático interativo com dados abertos e D3.js
ODP
Semana de geomática UFSM 2016
PDF
GEOPROCESSAMENTO - MODELAGEM DOS DADOS.pdf
PPT
Desenvolvendo aplicações geográficas com Software Livre
PPTX
Desenvolvimento de aplicações geográficas utilizando Django/Geodjango
PDF
Oficina de Mapas
ODP
Open layers pt_br
PPTX
WEBGIS - Moçambique
PDF
Ciclo de Palestras do SINDPD-RJ - Apresentando o OpenStreetMap
PPTX
2016 - Uso de software livre como ferramentas de suporte a estudos de traçado...
PDF
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
PDF
TDC 2019: transformando 
dados
públicos
em mapas interativos
PPTX
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
ODP
Webinar i3geo julho_2013
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
Geo on Rails - Um guia para manter o seu cabelo.
Explorando o HTML5 para visualização de dados geográficos
As geotecnologias mais populares do mercado
GIS em 3 horas
Como criar um mapa temático interativo com dados abertos e D3.js
Semana de geomática UFSM 2016
GEOPROCESSAMENTO - MODELAGEM DOS DADOS.pdf
Desenvolvendo aplicações geográficas com Software Livre
Desenvolvimento de aplicações geográficas utilizando Django/Geodjango
Oficina de Mapas
Open layers pt_br
WEBGIS - Moçambique
Ciclo de Palestras do SINDPD-RJ - Apresentando o OpenStreetMap
2016 - Uso de software livre como ferramentas de suporte a estudos de traçado...
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
TDC 2019: transformando 
dados
públicos
em mapas interativos
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
Webinar i3geo julho_2013
Anúncio

Mais de Christiano Anderson (19)

PDF
Meetup MUG-RS KingHost
PDF
certificadoTDC2016Floripa
ODP
MongoDB - Tudo o que você precisa saber - FISL16
ODP
MongoDB - Tudo que você precisa saber - FGSL 2014
ODP
Grafos - Uma abordagem divertida - Latinoware 2014
ODP
MongoDB Schema Design - Latinoware 2014
ODP
Big Data Latinoware 2014
ODP
Big Data - Conceitos Básicos
ODP
Persistência Poliglota, Big Data e NoSQL FISL 15
ODP
MongoDB - Tudo o que você precisa saber
ODP
Django - Muito além do básico
PDF
Palestra nosql
KEY
Utilizando NoSQL no desenvolvimento de soluções inteligentes
KEY
MongoDB na Campus Party
KEY
Django e MongoDB - Python Brasil 7
KEY
Python MongoDB no MongoSP
KEY
Python e MongoDB - Ensol
ODP
Python and MongoDB
Meetup MUG-RS KingHost
certificadoTDC2016Floripa
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo que você precisa saber - FGSL 2014
Grafos - Uma abordagem divertida - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
Big Data Latinoware 2014
Big Data - Conceitos Básicos
Persistência Poliglota, Big Data e NoSQL FISL 15
MongoDB - Tudo o que você precisa saber
Django - Muito além do básico
Palestra nosql
Utilizando NoSQL no desenvolvimento de soluções inteligentes
MongoDB na Campus Party
Django e MongoDB - Python Brasil 7
Python MongoDB no MongoSP
Python e MongoDB - Ensol
Python and MongoDB
Anúncio

Último (16)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
COBITxITIL-Entenda as diferença em uso governança TI
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Arquitetura de computadores - Memórias Secundárias
Processos na gestão de transportes, TM100 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e liquidação no SAP Transportation Management, TM130 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...

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
  • 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 é;
  • 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. 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. 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;
  • 13. Comparativo bases geográficas Fonte: https://docs.djangoproject.com/en/1.5/ref/contrib/gis/db-api/
  • 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. Configuração DATABASES = { 'default': { 'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'culturaeduca', 'USER': 'nodeware', 'PASSWORD': '', 'HOST': '', 'PORT': '', } }
  • 16. models.py from django.contrib.gis.db import models from django.contrib.gis import admin
  • 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. Exemplo no Admin do Django
  • 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;
  • 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. 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
  • 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. 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/