SlideShare une entreprise Scribd logo
1  sur  31
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

Contenu connexe

Similaire à 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 GeoDjangotdc-globalcode
 
Mapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangoMapeando a Terra com GeoDjango
Mapeando a Terra com GeoDjangotdc-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 ReportAmbiente 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çãoGeorge 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 geodatabasesResource 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
P1csmp
 
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 geolocalizadostdc-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áficospcollares
 
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 MaestroPedro Venancio
 
Pg sem3-1505102
Pg sem3-1505102Pg sem3-1505102
Pg sem3-1505102csmp
 
Pg sem3ex
Pg sem3exPg sem3ex
Pg sem3excsmp
 
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ânciaCaliel 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 mesmoCaio 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
 

Similaire à 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
 

Plus de 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 - FISL16Christiano 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 2014Christiano Anderson
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Christiano Anderson
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano 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 15Christiano 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 saberChristiano Anderson
 
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 inteligentesChristiano Anderson
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 

Plus 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
 

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/