2017-04-03 3 views
0

Ich habe sehr wenig d3 Dokumentation über die Arbeit mit einer JSON-Datei für die Zuordnung und Beitritt einer CSV-Datei von Metriken mit einem gemeinsamen Schlüssel gefunden.Join einer CSV und eines TopoJSON zusammen mit d3.queue()

Ich würde gerne d3.queue() verwenden, wenn möglich. Bis zu diesem Punkt habe ich d3.map().set verwendet, aber ich finde, dass für Single-Key, Wert-Paare verwendet wird, und scheint nicht für> 1 Werte verwendbar. Wenn ich hier bin, korrigiere mich bitte.

Ich versuchte, eine doppelte for Schleife zu verwenden, die in this bl.ock gefunden wurde. Der Schöpfer hier verwendet zwei JSON-Dateien und ich hatte wenig Glück, es an meine Bedürfnisse anzupassen. Link zu seinen zwei JSON-Dateien sind unten, für was es wert ist.

tv.json

neilsontopo.json

Der Join-Schlüssel (ich spreche SQL viel besser als JS) verwendet werden soll counties.id aus dem JSON und den county_fips Wert in der CSV.

Ist es problematisch, dass die county_fips in der CSV mit den damit verbundenen Metriken abgeflacht ist? Die doppelte Schleife for in dem oben verlinkten Beispiel verwendet die Hierarchie eines JSON.

d3.queue() 
    .defer(d3.json, "https://d3js.org/us-10m.v1.json") 
    //.defer(d3.csv, "countymetrics_json.csv" , function(d) {metrics.set(d.county_fips, +d.actual_margin);}) 
    .defer(d3.csv, "https://raw.githubusercontent.com/MatthewSnellOKC/mapping/master/merge/countymetrics_json.csv", function(d) {metrics.set(d.county_fips, +d.actual_margin);}) 
    .await(ready); 

function ready (error, us) { 
    if (error) throw error; 
    var counties = us.objects.counties.geometries; 
} 

Antwort

0

Ich habe von der Verwendung d3.queue() und d3.map().set transitioned und konnte die CSV zu JSON mit einem Doppel for Schleife verbinden. Siehe unten für den Arbeitscode.

d3.json("https://d3js.org/us-10m.v1.json", function(error, us) { 
    if (error) throw error; 

    d3.csv("countymetrics_json.csv", function(error, csv) { 
     var counties = us.objects.counties.geometries; 

     csv.forEach(function(d, i) { 
      counties.forEach(function(e, j) { 
       if (d.county_fips == e.id) { 
        e.actual_margin = d.actual_margin; 
        e.state_code = d.state_code; 
        e.state_name = d.state_name; 
        e.county = d.county; 
        e.county_population = d.county_population; 
        e.business_population = d.business_population; 
        e.active_merchants = d.active_merchants; 
        e.actual_margin = d.actual_margin; 
       } 
      }) 
     }) 
    }) 
}); 
Verwandte Themen