【问题标题】:D3 albersUsa projection funtion return nullD3 albersUsa 投影函数返回 null
【发布时间】:2016-05-14 21:11:56
【问题描述】:

我对 D3 很陌生,我正在尝试在地图上设置点。

我很困惑,因为我用这段代码创建了一个投影:

var projection = d3.geo
      .albersUsa()
      .scale(500)
      .translate([el.clientWidth / 2, el.clientHeight / 2]);

我用这个投影来绘制地图,效果很好。

但是每当我调用 projection([10, 20]) 时,它都会返回 null 我传入的任何值。

我的错误是什么?

【问题讨论】:

  • projection([10, 20]) 应该做什么?
  • 你可以把它放在一个工作小提琴中没有错
  • 这是我完整代码的一个小技巧,感谢@altocumulus,投影工作正常:jsfiddle.net/teone/gzws1068/11

标签: javascript d3.js projection


【解决方案1】:

来自文档

# projection(location)

[…] 如果指定位置没有定义的投影位置,例如当该位置超出投影的剪切边界时,可能返回 null。

Albers USA 投影仅在其边界内定义,对于明确定义区域之外的坐标,将产生 null

查看使用[10,20](无效)和[-110,40](有效点)调用projection(location) 的比较:

var projection = d3.geo
      .albersUsa()
      .scale(500)
      .translate([960, 500]);
      
d3.selectAll("p")
    .data([[10,20],[-110,40]])
  .enter().append("p")
    .text(function(d) { return d + ": " + projection(d); });

 
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>

【讨论】:

  • 非常感谢,现在我得到了结果。您知道将其与Force Layout 一起使用有什么问题吗?我正在尝试修复其中的某个点,同时让它为其他人计算位置,但我无法定位它们,这是一个小提琴:jsfiddle.net/teone/gzws1068/11
猜你喜欢
  • 1970-01-01
  • 2019-07-09
  • 2012-08-14
  • 1970-01-01
  • 2017-05-04
  • 2017-07-19
  • 2017-09-04
  • 2017-06-21
  • 2013-06-24
相关资源
最近更新 更多