使用Node js和D3实时绘制地图上的国家名称
Plotting Name of States on Map using Node js and D3 in real time
我一直在尝试使用Redis Pub/Sub系统、Node js和D3绘制地图上的状态名称。问题是,当我第一次在Redis通道上键入一种状态时,它被完美地绘制出来,但当我在第二种状态下键入时,什么都没有发生。由于我是D3.js的新手,所以无法解决这个问题。任何帮助都将不胜感激。谢谢
d3.json("india-states.json", function (json) {
india.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", path);
var socket = io();
socket.on('tags', function(data){
console.log(data.message1);
india.selectAll("text")
.data(json.features)
.enter()
.append("text")
.attr("fill", "black")
.attr("transform", function(d) {
console.log(data.message1 + "Second Time");
var centroid = path.centroid(d);
return "translate(" + centroid[0] + "," + centroid[1] + ")"
})
.attr("text-anchor", "middle")
.attr("dy", ".35em")
.style('fill', 'white')
.text(function(d) {
console.log("2");
if (d.id == data.message1) {
console.log("1");
return data.message1;
}
});
});
});
我试着浏览我的代码,发现它每次都能正确地获取州名称。但只有在第一次尝试时,州名称才会在之后继续
console.log(data.message1);
在所有其他情况下,我只得到一个控制台输出,即"console.log(data.message1);"
为文本创建一个变量并将其移动到socket
:之外
d3.json("india-states.json", function (json) {
india.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", path);
var stateText = india.selectAll(".text")
.data(json.features)
.enter()
.append("text");//variable outside socket
var socket = io();
socket.on('tags', function(data){
stateText.attr("fill", "black")
.attr("transform", function(d) {
console.log(data.message1 + "Second Time");
var centroid = path.centroid(d);
return "translate(" + centroid[0] + "," + centroid[1] + ")"
})
.attr("text-anchor", "middle")
.attr("dy", ".35em")
.style('fill', 'white')
.text(function(d) {
if (d.id == data.message1) {
return data.message1;
}
});
});
});
如果你想跟踪你以前的message1
,你可以在函数外创建一个数组,并在其中循环:
d3.json("india-states.json", function (json) {
india.selectAll("path")
.data(json.features)
.enter().append("path")
.attr("d", path);
var stateText = india.selectAll(".text")
.data(json.features)
.enter()
.append("text");
var arrayStates = [];//this array will hold all the names
var socket = io();
socket.on('tags', function(data){
arrayStates.push(data.message1);//for each input, a new string
stateText.attr("fill", "black")
.attr("transform", function(d) {
var centroid = path.centroid(d);
return "translate(" + centroid[0] + "," + centroid[1] + ")"
})
.attr("text-anchor", "middle")
.attr("dy", ".35em")
.style('fill', 'white')
.text(function(d) {
for(var i = 0; i < arrayStates.length; i++){
if (d.id == arrayStates[i]) {
return arrayStates[i];
}
}
});
});
});
相关文章:
- 显示每个国家的传单地图
- 使用Node js和D3实时绘制地图上的国家名称
- 如何在谷歌地图中突出显示一个州点击一个国家的任何区域
- 使用自动完成服务()将 Google 地图地点限制为特定国家/地区
- 谷歌地图,基于国家代码可视化国家
- 相对于选定的地区中心缩放SVG国家/地区地图
- 在拉斐尔JS世界地图中添加国家点击操作
- d3.js如何为国家地图中的每个州创建一个单独的元素
- 我如何限制谷歌地图API's的搜索框将搜索到一个国家/地区
- 有没有办法使用谷歌地图javascript api突出显示一个国家,类似于嵌入api
- 将谷歌地图 api 距离矩阵结果限制为国家/地区
- 仅在谷歌地图中显示国家边界
- 使用谷歌地图 API v3 的国家/地区边界
- 在谷歌地图中仅显示特定的国家(地区)
- 谷歌地图API - 对国家进行地理编码,然后在单击时缩放到国家边界
- 谷歌地图API v3:是否有任何功能可以检查坐标是否在省或国家/地区内
- 使用经度/纬度在国家地图上标记位置
- 可点击的大陆/国家地图:走哪条路
- 在AMMAP中动态设置和缩放国家地图
- 谷歌为国家地图缩放级别