【问题标题】:Plotted lat/long points on map are being placed incorrectly地图上绘制的纬度/经度点放置不正确
【发布时间】:2017-05-11 05:01:47
【问题描述】:

我有一组纬度/经度37.786453, -122.490402,当正确映射到旧金山时。但是,在我的代码中。它映射到犹他州西部。我可以通过更改与我使用的原始块未更改的这部分代码来操纵点的位置:

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

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

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

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

【问题讨论】:

    标签: javascript d3.js


    【解决方案1】:

    您的小提琴正在显示具有两种不同投影的特征:

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

    对于显示为空投影的 topojson:

    引用的美国 topojson 已在许多其他帖子中出现,它是美国的复合阿尔伯斯投影(在一帧中包含多个投影)。其中的数据已经被投影,因此使用空投影。空投影仅采用每个点的 x,y 坐标并将其转换为 svg 坐标而不进行转换(在 mapshaper.org 或任何地理软件中,它会颠倒显示,因为 svg 坐标从顶部开始,而地理坐标从赤道,在您的地图下方)。

    最终,您将 Albers 与墨卡托相匹配 - 当您更改墨卡托投影时:

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

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


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

    尝试在block (here) 中使用 json。

    【讨论】:

    • 谢谢,@Andrew。我不知道我是否会想到这一点。
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多