Domanda

Sto cercando di convertire una shapefile di comuni messicani in un topojson e visualizzarlo usando d3.js usando questo tutorial http://bost.ocks.org/mike/map/#converting-data .Sono riuscito a convertirlo ma non riesco a visualizzarlo.Qualsiasi aiuto sarà molto apprezzato.

Questo è il mio flusso di lavoro finora:

1) Scarica e decomprimere la shapefile

wget http://mapserver.inegi.org.mx/MGN/mgm2010v5_0a.zip 
unzip mgm2010v5_0a.zip 
.

2) Conversione in JSON, Riproietti in Lat-Long e Subseting the ShapeFile

ogr2ogr  -f GeoJSON -t_srs EPSG:4326 -where "CVE_ENT IN ('09')" df.json Municipios_2010_5A.shp
.

3) Conversione in topojson

topojson --id-property OID -p name=OID -p name -o df2.json df.json 
.

4) e creazione del codice HTML

<!DOCTYPE html>
<meta charset="utf-8">
<style>

/* CSS goes here. */

</style>
<body>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://d3js.org/topojson.v1.min.js"></script>
<script>

var width = 960,
height = 1160;

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);

 d3.json("df2.json", function(error, df2) {
 svg.append("path")
  .datum(topojson.feature(df2, df2.objects.df))
  .attr("d", d3.geo.path().projection(d3.geo.mercator()));
 });

 </script>
.

Se eseguo l'html ho solo una pagina vuota.Qualche idea su ciò che potrei sbagliare?

È stato utile?

Soluzione

L'opzione più semplice, se non sei particolarmente in particolare alla proiezione, è semplicemente utilizzare la proiezione fornita dalla shapefile (Lambert Conic Conic). Usa topojson s - width e - bandiere della riga di comando -Height per liberare la shapefile proiettata a una dimensione ragionevole. Ad esempio, se vuoi qualcosa di largo 960px, potresti dire:

topojson --width=960 --margin 20 --simplify=.1 -o mx.json -- municipalities.shp
.

(questo semplifica anche anche nelle coordinate dello schermo, comodamente.)

Un esempio completo con un makefile è a b.ocks.org/9265467 : .

Messico

Se, d'altra parte, si desidera specificare la propria proiezione, quindi è ragionevole usare OGR2UR per annullare la proiezione, quindi definire una proiezione nel browser. Ma in tal caso, ti consigliamo di specificare i parametri di proiezione in modo appropriato. Ad esempio, per ricreare la stessa proiezione nel browser, puoi dire:

var projection = d3.geo.conicConformal()
    .rotate([102, 0])
    .center([0, 24])
    .parallels([17.5, 29.5])
    .scale(1850)
    .translate([width / 2, height / 2]);
.

(violino con il centro e scala come ti piace montare la viewport desiderata.) Questo approccio alternativo è dimostrato a Bl.ocks.org/9265674 :

Messico 2

Generalmente preferisco l'utilizzo delle coordinate proiettate (il primo approccio, sopra), poiché sono più veloci da rendering e la semplificazione è più efficiente. D'altra parte, se si desidera modificare la proiezione dinamicamente, probabilmente improbabilmente improbabile con un tasso di shapefile così complesso - quindi proiettare nel browser è il modo di andare. E proiettare nel browser è bello durante lo sviluppo perché è più facile cambiare i parametri e ricaricare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top