Я работал над отдельными файлами, чтобы составить карту Шотландии. Тогда, Чтение файла csv, который указывает сторону, которая является большинством сообщений msps, принадлежит. На основе партии регион будет окрашен. После прочтения файла csv я попытался выбрать области, чтобы изменить их цвета, но это не сработает. Вот код:Применить изменения к выбранным элементам внутри элемента svg?
<script>
var dataset =[]
var width = 960,
height = 1160;
var projection = d3.geo.albers()
.center([0, 55.4])
.rotate([4.4, 0])
.parallels([50, 60])
.scale(10000)
.translate([width/2, height/2]);
var path = d3.geo.path()
.projection(projection);
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
var gssCode = [{gss:"S12000005", reg:"central"},
{gss:"S12000014", reg:"central"},
{gss:"S12000030", reg:"central"},
{gss:"S12000006", reg:"dg"},
{gss:"S12000008", reg:"strathclyde"},
{gss:"S12000011", reg:"strathclyde"},
{gss:"S12000018", reg:"strathclyde"},
{gss:"S12000021", reg:"strathclyde"},
{gss:"S12000028", reg:"strathclyde"},
{gss:"S12000029", reg:"strathclyde"},
{gss:"S12000035", reg:"strathclyde"},
{gss:"S12000038", reg:"strathclyde"},
{gss:"S12000039", reg:"strathclyde"},
{gss:"S12000044", reg:"strathclyde"},
{gss:"S12000045", reg:"strathclyde"},
{gss:"S12000046", reg:"strathclyde"},
{gss:"S12000010", reg:"lothian"},
{gss:"S12000019", reg:"lothian"},
{gss:"S12000026", reg:"lothian"},
{gss:"S12000036", reg:"lothian"},
{gss:"S12000040", reg:"lothian"},
{gss:"S12000013", reg:"highland"},
{gss:"S12000017", reg:"highland"},
{gss:"S12000023", reg:"highland"},
{gss:"S12000027", reg:"highland"},
{gss:"S12000015", reg:"fife"},
{gss:"S12000020", reg:"grampian"},
{gss:"S12000033", reg:"grampian"},
{gss:"S12000034", reg:"grampian"},
{gss:"S12000024", reg:"tayside"},
{gss:"S12000041", reg:"tayside"},
{gss:"S12000042", reg:"tayside"}
];
var color = {
"Scottish Conservative and Unionist Party" : "#5ABFF4",
"Scottish Labour" : "#846DD4",
"Scottish Liberal Democrats" : "#FA6485",
"Scottish National Party" : "#F6DC60",
"Scottish Green Party" : "#31C48E",
"Independent" : "#986561",
"No Party Affiliation" : "#475070"
};
d3.csv("map_data.csv",function(error,dataset){
var region = {};
dataset.forEach(function(d){
region[d.region]=d.party;
});
gssCode.forEach(function(d){
d3.json(d.gss + "_topo.json", function(error, councilArea) {
var mesh = topojson.mesh(councilArea, councilArea.objects[d.gss + "_geo"], function(a, b) {return a==b;});
svg.append("path")
.datum(mesh)
.attr("class", d.reg)
.attr("id", d.gss)
.attr("d", path)
.style("fill",color[region[d.reg]]);
});
});
});
</script>
Существует так много, что вы можете сделать, чтобы улучшить этот код, трудно понять, с чего начать. Самое фундаментальное замечание состоит в том, что вы не используете данные в массивах, и в этом есть сила D3. Если вы можете настроить массив идентификаторов регионов и имен, а также одну из сторон и цветов, что значительно облегчит жизнь вы. –
PS Это не значит, что это критика - мы все должны что-то начать. Если вы научитесь создавать массивы, а не множество переменных, настройте свои данные соответствующим образом, а затем повторно разместите свой код. –
@angusl Я переписал код .., но появились дополнительные проблемы. Ошибка при назначении mesh var .. и itr var всегда печатается как 32 внутри цикла. когда я пытался отобразить только одну область, часть выделения все еще не меняет цвет отображаемой области. – lrmals