为什么我的经度纬度的准确度在赤道以下会降低?

时间:2013-05-30 12:20:16

标签: svg maps d3.js geo map-projections

我收到了一些关于如何将我的地图翻译成给定经度和纬度值的问题的帮助,这里:How can I use SVG translate to center a d3.js projection to given latitude and longitude values?我写了一个方法,以给定的比例平移到给定的位置:

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) London

雅加达 - SFMap.zoomTo([106.7500, 6.1333], 1300); Jakarta

而且,如果我尝试澳大利亚,这个问题就会得到强调 - 我甚至看不到它。

我应该注意到我使用d3渲染墨卡托投影并从Google搜索中检索经度和纬度值。

请有人建议为什么会这样吗?我知道幕后有很多数学,但我希望d3能够解决这个问题。

修改

在阅读了Pablo的评论之后,我决定从等式中删除我的zoomTo()方法,只是在固定的center([106.7500, 6.1333])上测试d3是否能{J}正确地在Jarkata上,但它没有;它仍然把你扔在海里。

1 个答案:

答案 0 :(得分:1)

令人尴尬的是,我使用经度和纬度坐标发现了一个愚蠢的错误。

虽然我从谷歌检索坐标后将坐标传递给projection([106.7500, 6.1333]),但我没有注意到Google也给出了方向(或基本方向)的重要性。

6.1333° S, 106.7500° E表示雅加达赤道为6.1333度

所以,我的问题发生了,因为我没有传递projection()南方坐标的负值 - 意思是,我的投影总是在赤道上方 6.1333度它应该在下面。