Upgrade to Pro — share decks privately, control downloads, hide ads and more …

VIsualizações Geográficas com d3.js

VIsualizações Geográficas com d3.js

Apresentação de introdução a visualizações geográficas, feita no segundo encontro do Meetup D3.js e Visualização de Dados de Belo Horizonte (http://www.meetup.com/d3js-BH/).

Carolina Bigonha

October 15, 2013
Tweet

More Decks by Carolina Bigonha

Other Decks in Technology

Transcript

  1. AGENDA Um pouco de cartografia GeoJSON e TopoJSON Visualizando mapas

    com d3.js Onde encontrar mapas Algumas Referências 1 2 3 4 5
  2. Projeção cartográfica Representação da superfície esférica da Terra em um

    plano; necessária para criação de mapas. Toda projeção distorce a superfície terrestre de alguma maneira: área, forma, direção, distância, escala, ângulo. Não existe uma ideal para todo caso. Projeções equivalentes (áreas se preservam); Projeções conformes (ângulos se preservam); Projeções eqüidistantes (distâncias se preservam); Projeções azimutais (direções se preservam); Projeções afiláticas ou arbitrárias (tanto ângulo quanto área se deformam). cônica plana cilindrica
  3. Geo Projections, D3.js var projection = d3.geo.albersUsa() .translate([w/2, h/2]); var

    path = d3.geo.path().projection(projection); exemplo de definição de projeção no D3
  4. GeoJSON JSON Geometry and Feature Description Formato para codificação de

    estruturas de dados geográficas, no formato JSON. GeoJSON feature collection of features Point LineString Polygon MultiPoint MultiLineString MultiPolygon GeometryCollection geometry object + propriedades adicionais uma lista de features consiste em um único GeoJSON object geometry type crs, opcional bbox, opcional Coordinate Reference System object Bounding boxes padrão: longitude e latitude em graus decimais
  5. GeoJSON JSON Geometry and Feature Description geometry objects Point LineString

    Polygon GeometryCollection 'coordinates' contém uma única posição. 'coordinates' é um arranjo de duas ou mais posições. 'coordinates' é um arranjo de LineString fechados, com no mínimo 4 posições (1a = última). Se houver vários Polygons, o primeiro é o anel externo e os demais são furos ou anéis internos. Coleção de geometry objects, listados no membro "geometries".
  6. GeoJSON JSON Geometry and Feature Description geometry objects Point LineString

    Polygon GeometryCollection 'coordinates' contém uma única posição. 'coordinates' é um arranjo de duas ou mais posições. 'coordinates' é um arranjo de LineString fechados, com no mínimo 4 posições (1a = última). Se houver vários Polygons, o primeiro é o anel externo e os demais são furos ou anéis internos. Coleção de geometry objects, listados no membro "geometries". Geralmente são endereços, locais. Geralmente são ruas, avenidas, fronteiras. Geralmente são cidades, estados, pedaços de terra. Coleções dos demais tipos.
  7. GeoJSON JSON Geometry and Feature Description geometry objects Point LineString

    Polygon GeometryCollection 'coordinates' contém uma única posição. 'coordinates' é um arranjo de duas ou mais posições. 'coordinates' é um arranjo de LineString fechados, com no mínimo 4 posições (1a = última). Se houver vários Polygons, o primeiro é o anel externo e os demais são furos ou anéis internos. Coleção de geometry objects, listados no membro "geometries". MultiPoint MultiLineString MultiPolygon 'coordinates' é um arranjo de Point. 'coordinates' é um arranjo de LineString. 'coordinates' é um arranjo de Polygon.
  8. { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": {"type":

    "Point", "coordinates": [102.0, 0.5]}, "properties": {"prop0": "value0"} }, { "type": "Feature", "geometry": { "type": "LineString", "coordinates": [ [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0] ] }, "properties": { "prop0": "value0", "prop1": 0.0 } } ] } GeoJSON JSON Geometry and Feature Description exemplo de objeto GeoJSON lista de features Exemplo de feature com geometry do tipo LineString, com coordenadas em longitude e latitude e com propriedades especificadas. tipo FeatureCollection
  9. TopoJSON An extension of GeoJSON that encodes topology Formato criado

    por Michael Bostock, disponível no GitHub*. Topologia? Ramo da matemática que estuda espaços e formas. Topologia Geoespacial. Estudo das regras acerca das relações entre pontos, linhas e polígonos que representam regiões geográficas. Ex. Compartilhamento de fronteiras; simplificação de linhas*, distorção de formas*. Ao invés de representar geometrias de maneira discreta, como GeoJSON, TopoJSON une as geometrias a partir de segmentos de linha comuns, chamados de arcs. Elimina redundância: arquivos 80% menores. Ex. Fronteira entre MG e SP é representada apenas uma vez e referenciada pelos dois estados. * Links na seção de Referências.
  10. TopoJSON An extension of GeoJSON that encodes topology TopoJSON type

    transform objects arcs Novo tipo, indroduzido no TopoJSON, contém objetos GeoJSON. Topology Como converter as coordenadas inteiras delta-encoded para o formato original. Ex: latitude e longitude. scale/traslate Mapa que associa name - geometry obj. Os objetos são os de GeoJSON. Não armazena coord. individuais: em cada geometria, fica apenas uma referência para arcs. Cada arc é uma sequência de Points (similar à LineString). Arcs são combinados em geometrias. arranjo de arcs
  11. TopoJSON An extension of GeoJSON that encodes topology exemplo de

    objeto TopoJSON { "type": "Topology", "transform": { "scale": [0.036003600360036005, 0.017361589674592462], "translate": [-180, -89.99892578124998] }, "objects": { "aruba": { "type": "Polygon", "arcs": [[0]], "id": 533 } }, "arcs": [ [[3058, 5901], [0, -2], [-2, 1], [-1, 3], [-2, 3], [0, 3], [1, 1], [1, -3], [2, -5], [1, -1]] ] } Exemplo de object, nome 'aruba', do tipo Polygon, cujo parâmetro arcs se refere às coordenadas da posição 0 do arranjo principal de arcs. Ou seja, topology.arcs[0] tipo Topology lista de arcos e suas coordenadas
  12. TopoJSON An extension of GeoJSON that encodes topology exemplo de

    Polygon com 'furo no meio' em TopoJSON {"type": "Polygon", "arcs": [[42, 43], [44]]} Se topology.arcs[42] representa A -> B e topology.arcs[43] representa B -> C -> D a referência [42,43] representa A -> B -> C -> D parte externa, furo Os arcs [42, 43], [44] do polígono são referências para topology. arcs[42], topology.arcs[42] e topology.arcs[44].
  13. GeoJSON x TopoJSON Quando usar? "If you care about file

    size or topology, then use TopoJSON. If you don’t care about either, then use GeoJSON for simplicity’s sake." disse Michael Bostock no Stack Overflow *. Há duas vantagens no uso de TopoJSON: o tamanho do arquivo e o uso de topologia. No entanto, TopoJSON é um formato mais complexo que GeoJSON: Há necessidade de conversão para GeoJSON para usar d3.geo.path; seu formato simplificado de coordenadas pode indroduzir erros de arredondamento. Manipulação server-side, que não demanda aspectos topológicos: usar GeoJSON; Se há necessidade de utilizar topologia ou o arquivo será enviado para o cliente: TopoJSON. * Links na seção de Referências.
  14. Visualizando mapas com D3.js d3.json("br-states.json", function(error, br) { console.log(br); });

    Carregando o arquivo br-states.json, TopoJSON com os estados brasileiros. coordenadas objetos que representam os estados
  15. Visualizando mapas com D3.js var width = 600, height =

    600; var svg = d3.select("#br-choropleth").append("svg") .attr("width", width) .attr("height", height);
  16. Visualizando mapas com D3.js d3.json("br-states.json", function(error, br) { var projection

    = d3.geo.mercator() .scale(600) .translate([1.5*width, height/4]); var states = topojson.feature(br, br.objects.states); var path = d3.geo.path().projection(projection); svg.append("path") .datum(states) .attr("d",path); }); d3.geo.mercator seleciona a projeção Mercator.
  17. Visualizando mapas com D3.js d3.json("br-states.json", function(error, br) { var projection

    = d3.geo.mercator() .scale(600) .translate([1.5*width, height/4]); var states = topojson.feature(br, br.objects.states); var path = d3.geo.path().projection(projection); svg.append("path") .datum(states) .attr("d",path); }); d3.geo.path é um mecanismo para exibição de dados geográficos. Dado um objeto geometry ou feature, ele gera uma string de dados e associa ao atributo "d" de um path no SVG. atribui cada estado brasileiro a um path do SVG.
  18. Visualizando mapas com D3.js d3.json("br-states.json", function(error, br) { var projection

    = d3.geo.mercator() .scale(600) .translate([1.5*width, height/4]); var states = topojson.feature(br, br.objects.states); var path = d3.geo.path().projection(projection); svg.append("path") .datum(states) .attr("d",path); }); Resultado:
  19. Visualizando mapas com D3.js svg.selectAll(".state") .data(topojson.feature(br, br.objects.states).features) .enter() .append("path") .attr("class",

    function (d) { return "state state-" + d.id; }) .attr("d", path); Para cada path de um estado, associa as classes state e state-#, onde # é o id do estado no TopoJSON.
  20. Onde encontrar mapas? Natural Earth Data, Free vector and raster

    map data at 1:10m, 1:50m, and 1:110m scales http://www.naturalearthdata.com/ GeoCommons, Community site for open data and maps http://geocommons.com/ IBGE, Mapas http://mapas.ibge.gov.br/ Repositório GitHub mbostock: world-atlas, TopoJSON de mapas do mundo https://github.com/mbostock/world-atlas Repositório GitHub mbostock: us-atlas, TopoJSON de mapas dos EUA https://github.com/mbostock/us-atlas Repositório GitHub carolinabigonha: br-atlas, GeoJSON/TopoJSON de mapas Brasileiros https://github. com/carolinabigonha/br-atlas
  21. REFERÊNCIAS TopoJSON: https://github.com/mbostock/topojson GeoJSON: http://geojson.org Shawn Allen, Cartograms with d3

    & TopoJSON: http://prag.ma/code/d3-cartogram/#none/2010 Michael Bostock, Line Simplification: http://bost.ocks.org/mike/simplify/ Michael Bostock, Let's Make a Map: http://bost.ocks.org/mike/map/ Michael Bostock, Choropleth: http://bl.ocks.org/mbostock/4060606 Michael Bostock, How to Infer Topology? http://bost.ocks.org/mike/topology/ Michael Bostock, Projection Transitions: http://bl.ocks.org/mbostock/3711652 syntagmatic, Comparing Map Projections: http://bl.ocks.org/syntagmatic/3711245 xkcd, What your favorite Map Projection says about you? http://xkcd.com/977/
  22. REFERÊNCIAS Scott Murray, Interactive Data Visualizations for the Web, Chapter

    12 - Geomapping http://www.amazon.com/Interactive- Data-Visualization-Scott-Murray/dp/1449339735/ Nathan Yau, Visualize This, Chapter 8 - Visualizing Spacial Relationships http://www.amazon.com/Visualize-This- FlowingData-Visualization-Statistics/dp/0470944889 d3-geo-projection https://github.com/d3/d3-geo-projection/ Alan M. MacEachren, How Maps Work: Representation, Visualization, and Design http://www.amazon.com/How-Maps- Work-Representation-Visualization/dp/157230040X