我收到了一些关于如何将我的地图转换为给定经度和纬度值的问题的帮助,这里是:如何使用 SVG translate 将 d3.js 投影居中到给定的纬度和经度值?我写了一个以给定比例平移到给定位置的方法:
zoomTo: function(point, scale) {
var lat = -SFMap.projection(point)[0] * scale;
var lon = -SFMap.projection(point)[1] * scale;
var x = (SFMap.config.width / 2) + lat;
var y = (SFMap.config.height / 2) + lon;
SFMap.g
.transition()
.duration(500)
.attr("transform", "translate("+ x +","+ y +") scale("+ scale +")");
}
我可以很好地“放大”欧洲,但是当我搬到印度尼西亚的雅加达时,中心点显然位于海洋上方。
伦敦-SFMap.zoomTo([0.1062, 51.5171], 1300)
雅加达-SFMap.zoomTo([106.7500, 6.1333], 1300);
而且,如果我尝试澳大利亚,就会强调这个问题——我什至看不到它。
我应该注意我正在使用 d3 来渲染墨卡托投影并从 Google 搜索中检索经度和纬度值。
请有人建议为什么会这样?我知道幕后有很多数学问题,但我希望 d3 能解决这个问题。
编辑:
在阅读了 Pablo 的评论后,我决定zoomTo()
从等式中删除我的方法,并简单地测试 d3 是否可以center([106.7500, 6.1333])
在固定的 Jarkata 上正确地测试scale(1000)
,但它没有;它仍然把你扔进大海。