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

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

Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
tdc-globalcode
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
tdc-globalcode
 
Suporte a Geo-Mapping no Pentaho Report
Suporte a Geo-Mapping no Pentaho ReportSuporte a Geo-Mapping no Pentaho Report
Suporte a Geo-Mapping no Pentaho Report
Ambiente Livre
 
2016 - O uso do DSGTools na produção de geoinformação
2016 - O uso do DSGTools na produção de geoinformação2016 - O uso do DSGTools na produção de geoinformação
2016 - O uso do DSGTools na produção de geoinformação
George Porto Ferreira
 
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
Narcélio de Sá
 
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
Dextra Sistemas / Etec Itu
 
Sql4 devs geodatabases
Sql4 devs geodatabasesSql4 devs geodatabases
Sql4 devs geodatabases
Resource IT
 
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
George Porto Ferreira
 
P1
P1P1
P1
csmp
 
Usando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizadosUsando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizados
tdc-globalcode
 
Utilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados GeográficosUtilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados Geográficos
pcollares
 
WebSIG Out-of-the-Box com MapGuide Open Source e MapGuide Maestro
WebSIG Out-of-the-Box com MapGuide Open Source e MapGuide MaestroWebSIG Out-of-the-Box com MapGuide Open Source e MapGuide Maestro
WebSIG Out-of-the-Box com MapGuide Open Source e MapGuide Maestro
Pedro Venancio
 
Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102
csmp
 
Pg sem3ex
Pg sem3exPg sem3ex
Pg sem3ex
csmp
 
Introdução ao PostGIS
Introdução ao PostGISIntrodução ao PostGIS
Introdução ao PostGIS
Fernando Quadro
 
Garinpando no MongoDB sem picareta e com elegância
Garinpando no MongoDB sem picareta e com elegânciaGarinpando no MongoDB sem picareta e com elegância
Garinpando no MongoDB sem picareta e com elegância
Caliel Costa
 
HTML5 - Seu navegador não é mais o mesmo
HTML5 - Seu navegador não é mais o mesmoHTML5 - Seu navegador não é mais o mesmo
HTML5 - Seu navegador não é mais o mesmo
Caio Gondim
 
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Dextra Sistemas / Etec Itu
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
Rodrigo Branas
 
Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
Sérgio Souza Costa
 

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

Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjango
 
Suporte a Geo-Mapping no Pentaho Report
Suporte a Geo-Mapping no Pentaho ReportSuporte a Geo-Mapping no Pentaho Report
Suporte a Geo-Mapping no Pentaho Report
 
2016 - O uso do DSGTools na produção de geoinformação
2016 - O uso do DSGTools na produção de geoinformação2016 - O uso do DSGTools na produção de geoinformação
2016 - O uso do DSGTools na produção de geoinformação
 
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
Utilização do PostGIS para aplicações de inteligência espacial no setor de Sa...
 
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
Tdc - Criando uma Minimal API para serviços de Geolocalização com SQL + C#
 
Sql4 devs geodatabases
Sql4 devs geodatabasesSql4 devs geodatabases
Sql4 devs geodatabases
 
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
2018 - Ferramentas Livres para Produção e Disseminação de Dados Geoespaciais ...
 
P1
P1P1
P1
 
Usando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizadosUsando mongo db com o aggregation Framework para dados geolocalizados
Usando mongo db com o aggregation Framework para dados geolocalizados
 
Utilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados GeográficosUtilizando GeoTools para Manipulação de Dados Geográficos
Utilizando GeoTools para Manipulação de Dados Geográficos
 
WebSIG Out-of-the-Box com MapGuide Open Source e MapGuide Maestro
WebSIG Out-of-the-Box com MapGuide Open Source e MapGuide MaestroWebSIG Out-of-the-Box com MapGuide Open Source e MapGuide Maestro
WebSIG Out-of-the-Box com MapGuide Open Source e MapGuide Maestro
 
Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102
 
Pg sem3ex
Pg sem3exPg sem3ex
Pg sem3ex
 
Introdução ao PostGIS
Introdução ao PostGISIntrodução ao PostGIS
Introdução ao PostGIS
 
Garinpando no MongoDB sem picareta e com elegância
Garinpando no MongoDB sem picareta e com elegânciaGarinpando no MongoDB sem picareta e com elegância
Garinpando no MongoDB sem picareta e com elegância
 
HTML5 - Seu navegador não é mais o mesmo
HTML5 - Seu navegador não é mais o mesmoHTML5 - Seu navegador não é mais o mesmo
HTML5 - Seu navegador não é mais o mesmo
 
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
Mvp conf 2021 - Criando uma Minimal API para serviços de Geolocalização com S...
 
Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)Técnicas de Refactorización (EN ESPANOL)
Técnicas de Refactorización (EN ESPANOL)
 
Google apps script - Parte - 1
Google apps script - Parte - 1Google apps script - Parte - 1
Google apps script - Parte - 1
 

Mais de Christiano Anderson

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
Christiano Anderson
 
certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
Christiano Anderson
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
Christiano Anderson
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
Christiano Anderson
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
Christiano Anderson
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
Christiano Anderson
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
Christiano Anderson
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
Christiano Anderson
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
Christiano Anderson
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
Christiano Anderson
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
Christiano Anderson
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
Christiano Anderson
 
Scrum
ScrumScrum
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Christiano Anderson
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
Christiano Anderson
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
Christiano Anderson
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
Christiano Anderson
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
Christiano Anderson
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
Christiano Anderson
 

Mais de Christiano Anderson (19)

Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
certificadoTDC2016Floripa
certificadoTDC2016FloripacertificadoTDC2016Floripa
certificadoTDC2016Floripa
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Big Data Latinoware 2014
Big Data Latinoware 2014Big Data Latinoware 2014
Big Data Latinoware 2014
 
Big Data - Conceitos Básicos
Big Data - Conceitos BásicosBig Data - Conceitos Básicos
Big Data - Conceitos Básicos
 
Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Django - Muito além do básico
Django - Muito além do básicoDjango - Muito além do básico
Django - Muito além do básico
 
Palestra nosql
Palestra nosqlPalestra nosql
Palestra nosql
 
Scrum
ScrumScrum
Scrum
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Python MongoDB no MongoSP
Python MongoDB no MongoSPPython MongoDB no MongoSP
Python MongoDB no MongoSP
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Python and MongoDB
Python and MongoDBPython and MongoDB
Python and MongoDB
 

Último

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
WELITONNOGUEIRA3
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
Momento da Informática
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
joaovmp3
 

Último (8)

História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 
Manual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdfManual-de-Credenciamento ANATER 2023.pdf
Manual-de-Credenciamento ANATER 2023.pdf
 
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdfDESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
DESENVOLVIMENTO DE SOFTWARE I_aula1-2.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Certificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdfCertificado Jornada Python Da Hashtag.pdf
Certificado Jornada Python Da Hashtag.pdf
 

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/