31
GeoDjango Christiano Anderson Twitter: @dump [email protected]

GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Embed Size (px)

Citation preview

Page 1: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

GeoDjangoChristiano Anderson

Twitter: @[email protected]

Page 2: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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

Page 3: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Agenda

• Georreferenciamento;

• Padrões GIS;

• Bases Geográficas;

• Tecnologias;

• GeoDjango;

• Admin;

• OpenStreetMap;

• MapBox;

• OpenLayers;

Page 4: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Geographic Information System (GIS)

• Padrões, dados geográficos, sistemas

de coordenadas geográficas;

• Os mapas são planos, mas a Terra

não é;

Page 5: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Projeções

• Representação plana da Terra;

Page 6: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Projeções

Page 7: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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);

Page 8: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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);

Page 9: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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);

Page 10: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Projetos

• OpenStreetMap;

• OpenLayers;

• MapBox;

• PostGIS;

• Google Maps;

• GeoDjango;

Page 11: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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;

Page 12: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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;

Page 13: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Comparativo bases geográficas

Fonte: https://docs.djangoproject.com/en/1.5/ref/contrib/gis/db-api/

Page 14: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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;

Page 15: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Configuração

DATABASES = {'default': {

'ENGINE': 'django.contrib.gis.db.backends.postgis', 'NAME': 'culturaeduca','USER': 'anderson','PASSWORD': '','HOST': '', 'PORT': '', }

}

Page 16: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

models.py

from django.contrib.gis.db import models

from django.contrib.gis import admin

Page 17: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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()

Page 18: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Exemplo no Admin do Django

Page 19: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

ESRI Shapefiles

• Formato de arquivos para

informações geográficas e vetoriais;

• Descreve geometrias, pontos e

polígonos de áreas geográficas;

Page 20: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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;

Page 21: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Analisando Shapes$ ogrinfo -so 43MUE250GC_SIR.shp 43MUE250GC_SIR

INFO: Open of `43MUE250GC_SIR.shp'using driver `ESRI Shapefile' successful.

Layer name: 43MUE250GC_SIRGeometry: PolygonFeature Count: 498Extent: (-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)

Page 22: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Importando Shape com GeoDjango

import osfrom django.contrib.gis.utils import LayerMappingfrom 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)

Page 23: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

Consultando pontos no banco

Em qual Município está localizado o ponto abaixo?

Latitude: -23.5006659999999989Longitude: -46.6165799999999990

Page 24: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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.nomeSÃO PAULO

Page 25: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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.geojsonu'{ "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)...

Page 26: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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;

Page 27: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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/

Page 28: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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/

Page 29: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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/

Page 30: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

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/

Page 31: GeoDjango - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra... · Importando Shape com GeoDjango import os from django.contrib.gis.utils import

OBRIGADO!

Twitter: @dump

Blog: http://christiano.me

E-mail: [email protected]