当前位置: 首页 > 面试题库 >

使用Node js和D3实时在地图上绘制状态名称

沈运恒
2023-03-14
问题内容

我一直在尝试使用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];
          }
        }
     });
  });
});


 类似资料:
  • 我已经创建了osmdroid地图视图,在上面我可以显示自定义WMS,这很有效。接下来,我需要在地图上以GeoJSON格式从定制服务获得的两点之间绘制路线。GeoJSON如下所示:http://pastebin.com/GJWYNkAq 通过OkHttp客户端调用服务: 我使用以下方法用于此Osmbonuspack库: 当我运行应用程序,启动后崩溃与此错误: 03-09 13:01:51.521 3

  • 本文向大家介绍python在openstreetmap地图上绘制路线图的实现,包括了python在openstreetmap地图上绘制路线图的实现的使用技巧和注意事项,需要的朋友参考一下 利用python进行经纬度轨迹展示 嘿!各位好久不见,距离第一次发博客已经过去两年多了,本人也从本科生变成了研究生,好了书归正传,最近在做一个关于航班滑行路径轨迹的项目,目的是将航班的经纬度数据在地图上显现出来并

  • 我一直在研究在谷歌地图上绘制一个静态半径的圆,我遇到的所有答案都描述了绘制标记和与纬度坐标相关的圆。 我需要的是: 这个圆圈和标记漂浮在Google Maps片段上方,即:当您平移和缩放时,它保持静止。这里有一个棘手的部分:我希望能够得到地图中的覆盖区域进行处理(例如:lat、中心标记的长度和圆的半径,取决于地图上的缩放级别)。 我怎样才能做到这一点?提前谢谢。

  • 我正在开发一个应用程序,它有一个应用程序功能,可以在谷歌地图上显示团队作为标记。 我可以把自己显示为移动时更新的标记 问题是,标记仅在我第一次转到MapFragment时显示。当我导航到另一个片段并返回到地图时,我看到一个没有标记的空地图 尝试#3,请查看以前实现的历史记录,这些实现略有不同: 我的片段布局: 我的IncidentMapFragment代码,现在根据用户反馈进行更新。更新很少。请参

  • 问题内容: 我可以解析kml文件以便在Android中显示路径或点吗?请你能帮我吗? 这是我想在Android Google Map中显示的kml示例代码: 当我将此文件加载到标准网络google map时,它会很好地显示它,但是当我尝试使用android google map进行相同的操作时,它不会这样做。它只是带我到某些地方,仅此而已。我当时正在考虑更改监听器类。当前看起来像这样: 请有人能告

  • 问题内容: 我创建了此代码,当我 在JForm上选择单选按钮时,该代码应该绘制某些内容,我已经使用NetBeans创建了GUI。 当我选择单选按钮时,没有任何反应。 一段时间以来,我一直在试图找出问题所在,但仍然找不到解决方案,这就是我来 这里的原因。如果有人发现错误,我将不胜感激。 问题答案: 我在您的代码中看到了一些问题: 您正在扩展JFrame,您不应该这样做,因为可以将其读DrawShap