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会解决这个问题。
任何人都可以给我任何关于正确设置兰伯特圆锥共形投影的指示吗?
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 图像使用的参数可能与发布的参数略有不同(四舍五入、错别字)或自定义选择了平行线;然而,这应该是一个相当紧密的配合。
| 归档时间: |
|
| 查看次数: |
630 次 |
| 最近记录: |