Il us.json
caricato, ma quando provo ad aggiungere il nome dell'etichetta non riesco a farlo funzionare. Non vedo la proprietà name nel file .json
, quindi come posso aggiungere il nome di ogni stato? Sono davvero nuovo in questa struttura.Come aggiungere un'etichetta a ciascuno stato in d3.js (albersUsa)?
Provo diversi tutorial su Google e StackOverflow, ma nessuno di loro funziona per me. Ecco il link per un paio di tutorial che ho provato, che penso sia degno.
Le preoccupazioni che ho:
- penso che mi manca proprietà name nel file di us.json. (se questo è il problema, c'è qualche altro file .json che include il nome dello stato? E come usare il nome dello stato con quel file?)
- Il nome dello stato degli Stati Uniti è incluso in
http://d3js.org/topojson.v1.min.js
?
.html
File (quadro Loaded)
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
<script src="http://d3js.org/topojson.v1.min.js"></script>
.js
File:
var width = 1500,
height = 1100,
centered;
var usData = ["json/us.json"];
var usDataText = ["json/us-states.json"];
var projection = d3.geo.albersUsa()
.scale(2000)
.translate([760, height/2]);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.style("width", "100%")
.style("height", "100%");
svg.append("rect")
.attr("class", "background")
.attr("width", width)
.attr("height", height)
.on("click", clicked);
var g = svg.append("g");
d3.json(usData, function(unitedState) {
g.append("g")
.attr("class", "states-bundle")
.selectAll("path")
.data(topojson.feature(unitedState, unitedState.objects.states).features)
.enter()
.append("path")
.attr("d", path)
.attr("class", "states")
.on("click", clicked);
});
Grazie a tutti in anticipo. Apprezzo anche se mi dici dove hai imparato d3.js.
Grazie mille, Questo funziona perfettamente e mi permette di capirlo chiaramente. Ora è il momento di inserire l'API di Google, Cheers! – Xrait
Questa risposta ha funzionato principalmente, ma a partire da settembre 2017 il campo 'id' nel TopoJSON è una stringa di lunghezza pari a zero (" 01 "," 05 ", ..." 21 "...) e l'ID 'campo nei nomi TSV è una stringa di lunghezza variabile che non è riempita a zero. Ciò ha causato un problema per alcuni stati. Per aggiustarlo aggiungi zero padding. 'tsv.forEach (funzione (d, i) {var key = d.id.length> 1? d.id: '0' + d.id; nomi [chiave] = d.name; });' –