D3 albersUsa投影功能返回null

时间:2016-02-05 01:34:19

标签: javascript d3.js projection

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

我在使用此代码创建投影时感到困惑:

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

我使用此投影绘制地图,效果很好。

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

我的错误是什么?

1 个答案:

答案 0 :(得分:2)

来自文档

  

# projection(location)

     

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

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

使用projection(location)使用无效的[10,20][-110,40]这是一个有效的点来查看此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>
&#13;
dispatch_group_t _blockTaskGroup;
.....

if (!_blockTaskGroup) {
    _blockTaskGroup = dispatch_group_create();
}

dispatch_group_notify(_blockTaskGroup, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    NSLog(@"finally!");
});

....

dispatch_group_enter(_blockTaskGroup);
[XXXXX computeInBackground:xx completion:^{
    NSLog(@"1 done");
    dispatch_group_leave(group);
}];
//
dispatch_group_enter(_blockTaskGroup);
[XXXXX computeInBackground:xx completion:^{
    NSLog(@"2 done");
    dispatch_group_leave(_blockTaskGroup);
}];
//
dispatch_group_enter(_blockTaskGroup);
[XXXXX computeInBackground:xx completion:^{
    NSLog(@"3 done");
    dispatch_group_leave(_blockTaskGroup);
}];
&#13;
&#13;
&#13;