如何在阿尔伯斯投影上将MKT表达式转换为D3选项



这是巴西官方统计网格的Albers conicEqualArea的标准MKT表达式(此处也翻译为Proj.4字符串(:

PROJCS["Conica_Equivalente_de_Albers_Brasil",
GEOGCS["GCS_SIRGAS2000",
DATUM["D_SIRGAS2000",
SPHEROID["Geodetic_Reference_System_of_1980",6378137,298.2572221009113]],
PRIMEM["Greenwich",0],
UNIT["Degree",0.017453292519943295]],
PROJECTION["Albers"],
PARAMETER["standard_parallel_1",-2],
PARAMETER["standard_parallel_2",-22],
PARAMETER["latitude_of_origin",-12],
PARAMETER["central_meridian",-54],
PARAMETER["false_easting",5000000],
PARAMETER["false_northing",10000000],
UNIT["Meter",1]]

DATUM是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.fitExtent(),它们都为投影设置了"平移"one_answers"缩放"值。中心/缩放/平移都不会改变D3投影中的失真。

当然,这并不是你投影的真正复制,因为坐标空间单位是像素,如果没有一些额外的工作,你仍然无法直接以米为单位测量距离。

另请参见

最新更新