D3.js 如何将MKT表达式转换为Albers投影上的D3选项?

D3.js 如何将MKT表达式转换为Albers投影上的D3选项?,d3.js,geo,D3.js,Geo,这是Albers的标准MKT表达式(),用于: 数据是WGS 84(“SIRGAS2000”是它的别名) 如何将所有细节转换为D3.js v5参数化? 我试着把明显的东西作为中心和平行线,但这还不够 var projection = d3.geoConicEqualArea() .parallels([-2,-22]) // IS IT? .scale(815) //.rotate([??,??]) // HERE THE PROBLEM... .center([-54, -

这是Albers的标准MKT表达式(),用于:

数据是WGS 84(“SIRGAS2000”是它的别名)

如何将所有细节转换为D3.js v5参数化?

我试着把明显的东西作为中心和平行线,但这还不够

var projection = d3.geoConicEqualArea()
  .parallels([-2,-22])  // IS IT?
  .scale(815)
  //.rotate([??,??]) // HERE THE PROBLEM... 
  .center([-54, -12])  // IS IT?


PS:D3文档在哪里?geoConicEqualArea()的D3源代码没有任何线索。

转化为D3 Albers投影的部分如下:

    PROJECTION["Albers"],
    PARAMETER["standard_parallel_1",-2],
    PARAMETER["standard_parallel_2",-22],
    PARAMETER["latitude_of_origin",-12],
    PARAMETER["central_meridian",-54],
你有了平行线,现在你需要旋转。还要注意,对于任何D3投影,旋转应用于中心坐标。通常,您需要在x轴上旋转,在y轴上居中:

d3.geoAlbers()
 .parallels([-2,-22])
 .center([0,-12])
 .rotate([54,0])
 .translate([width/2,height/2])
 .scale(k)
我沿着x轴以相反的方向旋转(旋转我下面的地球,使我位于中央子午线之上,因此我的旋转为-x)。然后我把焦点放在y轴上。最后,我进行转换,以便中心经度和子午线的交点在地图中居中,并应用适当的比例值

如果我想在不同的区域上居中,但保持投影不变,我可以修改
projection.center()
,但请记住此处提供的坐标是相对于旋转的。我还可以使用
projection.fitSize()
projection.fitdextent()
,这两种方法都可以设置投影的“平移”和“缩放”值。中心/缩放/平移都不会改变D3投影中的失真

当然,这不是投影的真实复制,因为坐标空间单位是像素,如果不做一些额外的工作,您将无法直接测量以米为单位的距离


请参见

没有官方文档专门说明如何根据投影定义创建D3投影。重要的是要记住这是
geoConicEqualArea()
的别名,是吗?我是。。。我的目标是比较“Mercator vs Albers”中的地图,并使用您的建议来解释投影。fitExtent(),但我不知道如何在相同的比例、中心和区域中同时使用这两种地图。。。这是可能的?不确定我是否遵循-你想使用fitSize/fitExtent复制链接中的视觉效果?是的,使用它更精确、更自动地适应方框/网格,使数字更具可比性。。。如果你愿意的话,我可以再发一个问题,比如?
d3.geoAlbers()
 .parallels([-2,-22])
 .center([0,-12])
 .rotate([54,0])
 .translate([width/2,height/2])
 .scale(k)