我有一组lat / long 37.786453, -122.490402
,当正确映射到旧金山时。但是,在我的代码中。它映射到犹他州西部。我可以通过改变与我使用的原始块相同的代码段来操纵点的位置:
projection
.scale(1000)
.center([-106, 37.5])
需要在此处放置哪些正确值?如果我完全删除该部分,它将该点放在俄勒冈州东部。
这是当前的小提琴:https://jsfiddle.net/Lv5knc0n/
这是关于使用d3.js在地图上绘制纬度/经度的后续问题。链接到第一篇帖子here。
答案 0 :(得分:2)
你的小提琴显示了两个不同投影的特征:
对于使用空投影显示的topojson:
引用的美国topojson已出现在许多其他帖子中,它是美国的复合Albers投影(在一个框架中包含多个投影)。其中的数据已经被投影,因此使用空投影。空投影只需要获取每个点的x,y坐标并将其转换为没有变换的svg坐标(在mapshaper.org或任何地理软件中,当svg坐标从顶部开始时,它将显示为颠倒,而地理坐标从赤道,在你的地图下面)。
最终你将Albers与墨卡托相匹配 - 当你对墨卡托投影进行更改时:
projection
.scale(1000)
.center([-106, 37.5])
您没有更改topojson,因为它的路径生成器不使用投影。你只是改变了点的投射。当您使用两个不同的投影时,相同的地理点将在每个投影中以不同的方式表示 - 使多个点的对齐成为问题(如果不是不可能的话)(取决于点和投影)。
有一个相对简单的解决方案,使用未投影的数据为您的美国县(空间数据由纬度长对组成)并投影与您的点相同的投影。这将允许您对点和路径或任何其他功能使用一个投影,允许您一次缩放和缩放所有功能(否则,您需要使用geoTransform来操纵县数据,同时尝试匹配这些更改改变投影,而不是理想的解决方案)。