我试着在Map上画一些圆圈,根据经度和纬度,然而,我认为我的投影有问题,因为它没有画出我的任何东西。
我得到了以下信息
我有一个全局变量
var projection = d3.geoMercator()
然后,我定义投影:
projection.scale(1).translate([0, 0]);
var b = path.bounds(data);
var s = .95 / Math.max((b[1][0] - b[0][0]) / mwidth, (b[1][1] -
b[0][1]) / mheight);
var t = [(mwidth - s * (b[1][0] + b[0][0])) / 2, (mheight - s *
(b[1][1] + b[0][1])) / 2+50];
projection.scale(s).translate(t);
这就是我努力实现我的圈子的方式
// Hospital points
svg.selectAll('.hospital-circle')
.data(hospitals)
.enter()
.append('circle')
.attr('class', 'boundary')
.attr('r', 5)
.attr('cx', function(d) {
var hospitalCoords = projection.scale(s).translate(t)([d.lon, d.lat])
console.log(d)
console.log(hospitalCoords);
return hospitalCoords[0]
})
.attr('cy', function(d) {
var hospitalCoords = projection.scale(s).translate(t)([d.lon, d.lat])
console.log(d)
console.log(hospitalCoords)
return hospitalCoords[1]
})
1条答案
按热度按时间3phpmpom1#
很难说哪里出了问题,因为我们看不到你的数据,也不知道它与你的预测是否相符。在我看来,你调用
projection
是正确的,但它可能没有正确地与你的区域相匹配。您可能应该使用projection.fitSize
,而不是手动操作。我附加了一个完整的、工作的代码片段来说明