d3 中的 Lambert 圆锥共形投影

zin*_*del 3 javascript projection map-projections d3.js

我正在尝试在我的祖国奥地利的 SVG 地图上投影一组点([long, lat] 元组):

https://commons.wikimedia.org/wiki/File:Austria-geographic_map-blank.svg

维基媒体上对 SVG 文件的描述给出了投影名称和地图边界:

Lambert Conformal Conic,WGS84 数据
地图的地理范围:

西:17.2° W
东:9.3° W
北:49.2° N
南:46.0​​° N

虽然我很天真,但我认为这些信息足以用 D3 创建正确的投影。

这是我首先尝试的:

    let gcc = d3.geoConicConformal()
        .fitSize([width, height], bbox)
Run Code Online (Sandbox Code Playgroud)

哪里bbox是表示上面给出的地图边界的 GeoJSON 多边形。

不幸的是,结果不是正确的预测:

在此处输入图片说明

现在,通过阅读 D3 文档,我可以猜测我必须为投影指定更多参数,例如两个标准平行线。不幸的是,我不知道它们是什么,并且在地图的西部和东部边界周围尝试各种值都没有奏效。我认为它们可以从我对地图的了解中推导出来,或者可能不是?

其次,让我感到困惑的是,投影不仅旋转错误,而且缩放也不正确——我认为使用.fitSize会解决这个问题。

任何人都可以给我任何关于正确设置兰伯特圆锥共形投影的指示吗?

And*_*eid 5

Fitsize 将正确平移和缩放地图,但是,您需要旋转圆锥投影,并设置平行线。

平行线:

有一个记录在案的奥地利 Lambert Conic Conformal 地图投影,可以在此处此处找到其规格。在这种情况下,可能正确的相似之处是 [46,49],尽管您使用的地图可能是自定义投影。

回转

现在您需要沿 x 轴按经度旋转地图。圆锥形贴图通常沿 x 轴旋转并以 y 轴为中心(请参阅我在此处的回答以图形解释原因(以及平行线如何改变您的投影))

旋转会移动世界,使您感兴趣的区域正确对齐,这样地图的中央子午线在您的地图中是垂直的。根据上面提到的投影规格,中央子午线应该在 13 度 20 分(13.333 度),尽管这两个参考之间存在小分歧。沿 x 轴的旋转设置为该值的负值。

使用这些参数:

d3.geoConicConformal()
    .parallels([46,49])
    .rotate([-13.333,0])
    .fitSize([width,height],bbox)
Run Code Online (Sandbox Code Playgroud)

我非常适合我非常低采样的 goto world topojson:

在此处输入图片说明

svg 图像使用的参数可能与发布的参数略有不同(四舍五入、错别字)或自定义选择了平行线;然而,这应该是一个相当紧密的配合。