Я делаю картографическую карту, используя D3, и хочу использовать данные из CSV для заполнения карты.
Я использовал следующий код для определения и объединения данных. Когда я его консолью .log, я просто получаю пустые полигоны и вижу пустую карту вместо цветной в зависимости от значения (функция, которая делает это, находится в другом месте кода).
var promises = [];
promises.push(d3.csv("data/nyplData.csv"));
promises.push(d3.json("data/nycNTA.topojson"));
promises.push(d3.json("data/manhattan.topojson"));
Promise.all(promises).then(callback);
function callback(data){
//console.log(data);
csvData = data[0];
nyc = data[1];
manhattan = data[2];
//place graticule on the map
setGraticule(map, path);
//translate New York/Manhattan into TopoJSONs
var nycNeighborhoods = topojson.feature(nyc, nyc.objects["nyc-neighborhoods"]),
manhattanNeighborhoods = topojson.feature(manhattan, manhattan.objects.manhattan).features;
//add Europe countries to map
var nyc = map.append("path")
.datum(nycNeighborhoods)
.attr("class", "nyc")
.attr("d", path);
//join csv data to GeoJSON enumeration units
manhattan = joinData(manhattan, csvData);
//console.log(manhattan);
//create the color scale
var colorScale = makeColorScale(csvData);
//add enumeration units to the map
setEnumerationUnits(manhattanNeighborhoods, map, path, colorScale);
//add coordinated visualization to the map
setChart(csvData, colorScale);
//create dropdown for attribute selection
createDropdown(csvData);
};
}; //end of setMap()
.
,
.
function joinData(manhattan, csvData){
//loop through csv to assign each set of csv attribute values to geojson region
for (var i=0; i < csvData.length; i++){
var csvRegion = csvData[i]; //the current region
var csvKey = csvRegion.ntacode; //the CSV primary key
//loop through geojson regions to find correct region
for (var a=0; a < manhattan.length; a++){
//console.log(manhattan.length);
var geojsonProps = manhattan[a].properties; //the current region geojson properties
var geojsonKey = geojsonProps.ntacode; //the geojson primary key
//where primary keys match, transfer csv data to geojson properties object
if (geojsonKey == csvKey){
//assign all attributes and values
attrArray.forEach(function(attr){
var val = parseFloat(csvRegion[attr]); //get csv attribute value
geojsonProps[attr] = val; //assign attribute and value to geojson properties
});
};
};
};
return manhattan;
};
Я ожидаю, что эта функция объединит данные из CSV-файла в файл topoJSON на карте, основываясь на общем поле поля "ntacode", но я снова получаю карту, заполненную нулевыми значениями. Кто-нибудь может увидеть, где я иду не так?