并非所有的d3点都在小册子地图上显示在正确的位置
我使用this作为起点。我使用.nest()和d.values.length来驱动圆的半径。并非所有的d3点都在小册子地图上显示在正确的位置
d3.tsv("DH_Doig.tsv", function(data) { // Add a LatLng object to each item in the dataset
data.forEach(function(d) {
d.LatLng = new L.LatLng(d.SoundLat,
d.SoundLon)
})
//console.log(data);
var mediacount = d3.nest()
.key(function(d) { return d.LatLng; })
.entries(data);
//console.log(JSON.stringify(mediacount));
var feature = g.selectAll("circle")
.data(mediacount)
.enter().append("circle")
.style("stroke", "black")
.style("opacity", .6)
.style("fill", "red")
.attr("r", function(d) { return d.values.length*3; });
//.attr("r", 20);
map.on("viewreset", update);
update();
function update() {
//console.log(JSON.stringify(mediacount));
feature.attr("transform",
function(d, i) {
console.log(d.values[i].LatLng);
return "translate("+
map.latLngToLayerPoint(d.values[i].LatLng).x +","+
map.latLngToLayerPoint(d.values[i].LatLng).y +")";
}
)
}
控制台显示2级的对象,然后指示d.values [i]是未定义的。我尝试了几次迭代(d.values [i] .LatLng),并且还没有在[i]中得到,我仍然没有在右边的点找到所有的圆,你可以看到它们都聚集在左上角。目标是最终使用这个地图与crossfilter在另一个图表中创建交互。
下面是数据:
ID SoundLat SoundLon 1 47.763848 -122.298382
2 47.842667 -112.6427
3 47.842667 -112.6427
4 47.842667 -112.6427
5 48.3385647 -124.665896
6 48.145537 -123.188611
7 48.145537 -123.188611
8 48.145537 -123.188611
9 48.145537 -123.188611
10 48.145537 -123.188611
11 46.33 -111.5
12 46.33 -111.5
13 46.33 -111.6
14 46.33 -111.6
15 44.741085 -110.994736
16 46.273156 -110.8070191
17 46.725217 -110.859201
此代码:
var feature = g.selectAll("circle") .data(data)
.enter().append("circle")
.style("stroke", "black")
.style("opacity", .6)
.style("fill", "red")
//.attr("r", function(d) { return d.values.length*3; });
.attr("r", 20);
map.on("viewreset", update);
update();
function update() {
//console.log(JSON.stringify(mediacount));
feature.attr("transform",
function(d, i) {
//console.log(d.values[i].LatLng);
return "translate("+
map.latLngToLayerPoint(d.LatLng).x +","+
map.latLngToLayerPoint(d.LatLng).y +")";
}
)
}
更新改变单张-src.js与我得到这个错误的原代码后消息:TypeError:latlng未定义[了解更多内容]
回答:
在这一行d.values[i].LatLng
,i
这里是你的数据绑定索引(mediacount
数组)。它不是mediacount
阵列中的values
阵列的某种索引。
无论如何,你不需要索引到values数组中,因为所有的lat和long都是相同的,你可以使用0
。所以简化整个更新功能:
function update() { feature.attr("transform", function(d,i){
var coor = map.latLngToLayerPoint(d.values[0].LatLng);
return "translate(" +
coor.x + "," +
coor.y + ")";
});
}
此外,请注意,您的地图集中在新西兰的某个地方,而你的纬度和多头都在美国西部。
Full code is here。
以上是 并非所有的d3点都在小册子地图上显示在正确的位置 的全部内容, 来源链接: utcz.com/qa/266821.html