Das Herz von dc.js und crossfilter ist eine Art Map und Reduce, wo für jeden Wert Bins gefunden werden, und dann werden die Zeilen, die in jedem Bin landen, aggregiert.
Aber es klingt wie Sie versuchen, Ihre Daten in der Broschüre Karte ohne Aggregation direkt anzuzeigen. Wenn Sie aggregieren möchten, müssen Sie entscheiden, wie Sie aggregieren items
(Sie haben Ihre Daten nicht gezeigt, so dass ich nicht weiß, was es ist), und wahrscheinlich müssen Sie die name
verlassen, weil Namen in der Regel nicht Aggregat.
Also würde ich vorschlagen, Crossfilter zu bin nach Namen (vorausgesetzt, das ist einzigartig) statt Ort, und halten Sie dann auf den Standort und die Elemente, sowie eine Zählung. Leider ist dies etwas aneinander vorbei zu crossfilter Kern Zweck, so ist der Code ein wenig umständlich:
var facilities = xf.dimension(function(d) { return d.name; });
var facilitiesGroup = facilities.group().reduce(
function(p, v) { // add
p.items = v.items;
p.geo = v.geo;
++p.count;
return p;
},
function(p, v) { // remove
--p.count;
return p;
},
function() { // init
return {count: 0};
}
);
Wir stehen noch unter der Annahme, dass die Namen eindeutig sind und die Felder aus dem ersten Datensatz greifen wir sehen. Jetzt wird die crossfilter Gruppe eine Reihe von Schlüssel-Wert-Paare zurückgeben, wobei Name der key
sein wird und die {count, items, geo}
wird der Wert sein, so können wir dc-Faltblatt sagen, wie diese zu lesen:
dc.leafletMarkerChart("#test .map",groupname)
// ...
.valueAccessor(function(kv) {
return kv.value.count;
})
.locationAccessor(function(kv) {
return kv.value.geo;
})
.popup(function(kv) {
return kv.key + " : " + kv.value.items;
})
kv
ist ein Konvention möchte ich mich daran erinnern, dass die Daten d
fast immer ein Schlüssel-Wert-Paar sein wird. (In einigen DC-Diagrammen wird es ein Objekt sein, das ein data
Mitglied enthält, welches das Schlüssel/Wert-Paar ist.)
Beachten Sie, dass sich dies vom Standardverhalten der dc-Broschüre unterscheidet, um nach Standort zu aggregieren und den Wert Ort als Schlüssel. Wenn Ihre Standorte garantiert einzigartig sind, könnten Sie dies auch tun, aber es scheint mir riskant (Daten könnten verloren gehen). Ich denke, es ist besser, einen wirklich eindeutigen Schlüssel zu verwenden, wenn Sie die Originaldaten ohne Aggregation anzeigen möchten.
Was ist eine Funktion? Und was sind 'feature.name' und' feature.items'? Sind sie in Ihren Daten, die Sie an Crossfilter übergeben haben? – Gordon
Entschuldigung, das kommt von vorherigem Code. Ich habe das gleiche mit 'd.name' und' d.items' versucht. "Name" und "Elemente" sind weitere Spalten in der gleichen CSV-Datei, die die Geodaten enthält. – zanmatt