d3 中的 Lambert 圆锥共形投影

Lambert conic conformal projection in d3

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

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

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

Lambert Conformal Conic, WGS84 datum
Geographic limits of the map:

West: 17.2° W
East: 9.3° W
North: 49.2° N
South: 46.0° N

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

这是我首先尝试的:

    let gcc = d3.geoConicConformal()
        .fitSize([width, height], bbox)

其中 bbox 是表示上述地图边界的 GeoJSON 多边形。

很遗憾,结果不是正确的投影:

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

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

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

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

平行线:

有记载的奥地利Lambert Conic Conformal 地图投影,其规范可以找到here or here。在这种情况下,可能正确的平行线是 [46,49],尽管您使用的地图可能是自定义投影。

旋转

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

旋转会移动世界,以便您感兴趣的区域正确对齐,这样地图的中央子午线在您的地图中是垂直的。根据上述投影规格,中央子午线应位于 13 度 20 分(13.333 度),但两个参考之间存在细微差异。沿 x 轴的旋转设置为该值的负值。

使用这些参数:

d3.geoConicConformal()
    .parallels([46,49])
    .rotate([-13.333,0])
    .fitSize([width,height],bbox)

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

svg 图像使用的参数可能与发布的参数(舍入、拼写错误)略有不同,或者平行线是自定义选择的;但是,这应该是相当紧身的。