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 图像使用的参数可能与发布的参数(舍入、拼写错误)略有不同,或者平行线是自定义选择的;但是,这应该是相当紧身的。
我正在尝试在我的祖国奥地利的 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 图像使用的参数可能与发布的参数(舍入、拼写错误)略有不同,或者平行线是自定义选择的;但是,这应该是相当紧身的。