地图上的绘制纬度/长点放置不正确

时间:2017-05-11 05:01:48

标签: javascript d3.js

我有一组lat / long 37.786453, -122.490402,当正确映射到旧金山时。但是,在我的代码中。它映射到犹他州西部。我可以通过改变与我使用的原始块相同的代码段来操纵点的位置:

projection
  .scale(1000)
  .center([-106, 37.5])

需要在此处放置哪些正确值?如果我完全删除该部分,它将该点放在俄勒冈州东部。

这是当前的小提琴:https://jsfiddle.net/Lv5knc0n/

这是关于使用d3.js在地图上绘制纬度/经度的后续问题。链接到第一篇帖子here

1 个答案:

答案 0 :(得分:2)

你的小提琴显示了两个不同投影的特征:

  • 美国topojson的空投影
  • 点的墨卡托投影

对于使用空投影显示的topojson:

引用的美国topojson已出现在许多其他帖子中,它是美国的复合Albers投影(在一个框架中包含多个投影)。其中的数据已经被投影,因此使用空投影。空投影只需要获取每个点的x,y坐标并将其转换为没有变换的svg坐标(在mapshaper.org或任何地理软件中,当svg坐标从顶部开始时,它将显示为颠倒,而地理坐标从赤道,在你的地图下面)。

最终你将Albers与墨卡托相匹配 - 当你对墨卡托投影进行更改时:

projection
  .scale(1000)
  .center([-106, 37.5])

您没有更改topojson,因为它的路径生成器不使用投影。你只是改变了点的投射。当您使用两个不同的投影时,相同的地理点将在每个投影中以不同的方式表示 - 使多个点的对齐成为问题(如果不是不可能的话)(取决于点和投影)。

有一个相对简单的解决方案,使用未投影的数据为您的美国县(空间数据由纬度长对组成)并投影与您的点相同的投影。这将允许您对点和路径或任何其他功能使用一个投影,允许您一次缩放和缩放所有功能(否则,您需要使用geoTransform来操纵县数据,同时尝试匹配这些更改改变投影,而不是理想的解决方案)。

尝试使用此blockhere)中的json。