我对D3很陌生,我正试图在地图上设置点。
我在使用此代码创建投影时感到困惑:
var projection = d3.geo
.albersUsa()
.scale(500)
.translate([el.clientWidth / 2, el.clientHeight / 2]);
我使用此投影绘制地图,效果很好。
但是,每当我致电projection([10, 20])
时,它都会返回null
我传入的任何值。
我的错误是什么?
答案 0 :(得分:2)
来自文档
[...] 如果指定的位置没有定义的投影位置,例如当位置超出投影的剪切边界时,可能会返回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;