javascript - 在 d3.js 全局 map 中设置点

标签 javascript d3.js

我遇到的主要问题是,当我尝试在 map 内绘制点时,在创建 cx 和 cy 坐标时,它显示为空,但是如果您检查它,从我的 Angular 来看,补丁是正确的.

    d3.json(meteorites, function(meteorite){
console.log("meteorite", meteorite.features);
svg.selectAll("circle")
.data(meteorite.features)
.enter()
 .append("circle")
.attr({
cx: function(d){ return projection(d.geometry.coordinates[0], d.geometry.coordinates[1])[0];},
 cy: function(d){ return projection(d.geometry.coordinates[0], d.geometry.coordinates[1])[1];},
 r: 5,
fill: "red"

});

如果您想查看我在这里写的内容,可以点击我的 codepen http://codepen.io/DiazPedroAbel/pen/bwoBZd 的链接。

我也在没有投影的情况下尝试过,但结果是相同的,为空,但如果我执行 console.log() 我得到了我期望的结果。可能我在这里误解了一些东西,这是我第一次在 d3 中绘制 map 。

最佳答案

JSON 文件中的某些条目似乎不包含 geometry 对象和随附的 geometry.coordinates 数组,导致脚本失败。我建议您在附加 .data() 时实现一个基本过滤器,以确保您仅处理定义了地理坐标的节点,即而不是简单地具有以下内容:

.data(meteorite.features)

...您可以使用.filter()从对象数组中清除没有geometry对象或geometry.coordinates的条目 数组定义:

.data(meteorite.features.filter(function(d) {
  return d.geometry && d.geometry.coordinates;
}))

请参阅corrected CodePen example ,更新了以下代码块:

d3.json(meteorites, function(meteorite){
    svg.selectAll("circle")
        .data(meteorite.features.filter(function(d) {
          return d.geometry && d.geometry.coordinates;
        }))
        .enter()
        .append("circle")
        .attr({
          cx: function(d){ return projection(d.geometry.coordinates)[0];},
          cy: function(d){ return projection(d.geometry.coordinates)[1];},
          r: 5,
          fill: "red"
    });
});

关于javascript - 在 d3.js 全局 map 中设置点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39811573/

相关文章:

Javascript 在对象中返回 Null 值

javascript - Connect 不能与 Redux-react 中的 StateLess 组件一起使用

javascript - 未捕获的语法错误 : Unexpected end of JSON input

javascript - 使用 d3.json 而不读取文件

javascript regex - 删除查询字符串变量(如果存在)

javascript - 有什么方法可以使这个功能在标准浏览器中更有效吗?

javascript - 使用状态钩子(Hook)时,useState() 中的 react 如何为功能组件检索正确的状态对象和函数?

javascript d3 从一组数据创建数据集

javascript - 如何缩放 SVG 以使其中绘制的内容适合容器大小?

javascript - 如何在d3中的水平条形图的x轴上添加一条线