geo django - fórum goiano de software livre - 10 fgsl e 1 eri

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

If you can't read please download the document

Upload: christiano-anderson

Post on 16-Apr-2017

1.175 views

Category:

Technology


1 download

TRANSCRIPT

GeoDjango

Mapeando a Terra com
GeoDjango

Christiano Anderson Twitter: @dump
[email protected]

Sobre o palestrante

Trabalha com software livre desde 1995;

Trabalha com Python desde 2000;

Membro da Associao Python Brasil;

Responsvel tcnico do Cultura Educa;

J foi colaborador de diversos projetos de software livre;

Twitter: @dumpBlog: http://christiano.me

Agenda

Georreferenciamento;

Padres GIS;

Bases Geogrficas;

Tecnologias;

GeoDjango;

Admin;

OpenStreetMap;

MapBox;

OpenLayers;

Geographic Information System (GIS)

Padres, dados geogrficos, sistemas de coordenadas geogrficas;

Os mapas so planos, mas a Terra no ;

Projees

Representao plana da Terra;

Projees

Os padres GEO

OGC (Open Geospatial Consortium);

WKT (Well Known Text);

WKB (Well Know Binary);

GML (Geometry Markup Language);

KML (Keyhole Markup Language);

WMS (Web Mapping Service);

GeoJSON (Geometry JSON);

SRID (Spatial Reference Indentifier);

Principais objetos geogrficos

Point (ponto);

LineString (linha);

Polygon (Polgono);

MultiPoint (Mltiplos Pontos);

MultiPolygon (Mltiplos Polgonos);

Bibliotecas e ferramentas

GEOS (Geometry Engine Open Source);

GDAL (Geospatial Data Abstraction Library);

GeoIP (Biblioteca de localizao de IPs);

PROJ4 (Biblioteca de Projees Geogrficas);

Projetos

OpenStreetMap;

OpenLayers;

MapBox;

PostGIS;

Google Maps;

GeoDjango;

GeoDjango

Mdulo nativo do Django para criar aplicaes geogrficas;

J est presente na seo de contrib do Django, no necessrio instalar nada de fora;

Oferece toda facilidade do ORM do Django para aplicaes geogrficas;

Bastante completo e bem integrado com bancos geogrficos;

Banco de Dados Geogrfico

Permite armazenar objetos geogrficos em uma estrutura de banco de dados convencional;

Possui funes geogrficas, exemplo, com um select, possvel pegar todo o trajeto de um rio e identificar quais municpios ele cruza;

O GeoDjango integrou funes geogrficas ao seu ORM;

Comparativo bases geogrficas

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

Instalao do PostGIS

A maioria das distribuies j possuem o pacote pronto do PostGIS;

Portanto, se deseja a verso 2, necessrio compilar na mo ou usar repositrio alternativo;

Configurao

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 informaes geogrficas e vetoriais;

Descreve geometrias, pontos e polgonos de reas geogrficas;

Arquivos Shape

shp -> shape, armazena a forma geogrfica do objeto;

shx -> ndices e informaes 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_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)

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)

Consultando pontos no banco

Em qual Municpio est localizado o ponto abaixo?

Latitude: -23.5006659999999989Longitude: -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.nomeSO PAULO

Objeto geogrfico do registro

>>> res.area

Representa o contorno (polgono) do municpio.

possvel 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)...

API de Mapa

O GeoDjango no faz plotagem automtica no mapa;

Por respeitar todos os padres Geo, voc escolhe a API de mapa que desejar.

possvel plotar pontos no Google Maps, OpenStreetMap, MapBox, Bing Maps e qualquer outro que possuir API padro Geo;

OpenStreetMap

tima alternativa ao Google Maps;

Funciona como um "wiki" de mapas;

Totalmente colaborativo;

API bastante completa;

Possibilidade de subir seu prprio servidor de mapas;

http://www.openstreetmap.org/

MapBox

Alternativa "freemium" ao Google Maps;

Utiliza estrutura do OpenStreetMap;

Possibilidade de estilizar os mapas;

Vrias ferramentas, como o TileMill, permite uma melhor customizao da aplicao 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 mveis;

http://leafletjs.com/

OpenLayers

API JavaScript para criao de mapas dinmicos 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: @dumpBlog: http://christiano.meE-mail: [email protected]