Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svg 为什么我的经纬度转换的精度在赤道以下会降低?_Svg_Maps_D3.js_Geo_Map Projections - Fatal编程技术网

Svg 为什么我的经纬度转换的精度在赤道以下会降低?

Svg 为什么我的经纬度转换的精度在赤道以下会降低?,svg,maps,d3.js,geo,map-projections,Svg,Maps,D3.js,Geo,Map Projections,关于如何将地图转换为给定的经度和纬度值的问题,我得到了一些帮助,这里:我写了一个方法,以给定的比例平移到给定的位置: 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 =

关于如何将地图转换为给定的经度和纬度值的问题,我得到了一些帮助,这里:我写了一个方法,以给定的比例平移到给定的位置:

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是否能够在Jarkata上以固定的
比例(1000)
正确地居中([106.7500,6.1333])
,但它没有;它仍然把你扔到海里。

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

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

6.1333°S,106.7500°E
表示雅加达位于赤道以南6.1333度


所以,我的问题发生了,因为我没有传递南部坐标的负值,也就是说,我的投影总是在赤道上方6.1333度,而它本应该在赤道下方。

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

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

6.1333°S,106.7500°E
表示雅加达位于赤道以南6.1333度


所以,我的问题发生了,因为我没有传递南部坐标的负值-,也就是说,我的投影总是在赤道上方6.1333度,而它本应该在赤道下方。

是否将组返回到变换之间的投影比例?应用投影时,使用的是投影比例作为起点,而不是地物的当前比例。错误是否一致?如果你从A,B,然后到C,你会有和从B,A,然后到C一样的错误?@PabloNavarro,你有一个有趣的观点。我没有将缩放调整传递回
SFMap.projection()
,因为我想如果我在计算转换方法中的平移对缩放的影响时,我不需要这样做,
zoomTo()
-如上所示。当我下班回家时,在使用投影值之前,我将探索如何将
scale
传递到投影。我会作出相应的回应非常感谢。您是否将组返回到变换之间的投影比例?应用投影时,使用的是投影比例作为起点,而不是地物的当前比例。错误是否一致?如果你从A,B,然后到C,你会有和从B,A,然后到C一样的错误?@PabloNavarro,你有一个有趣的观点。我没有将缩放调整传递回
SFMap.projection()
,因为我想如果我在计算转换方法中的平移对缩放的影响时,我不需要这样做,
zoomTo()
-如上所示。当我下班回家时,在使用投影值之前,我将探索如何将
scale
传递到投影。我会作出相应的回应非常感谢。