【问题标题】:D3 + Leaflet with Albers USA ProjectionD3 + 带有 Albers USA Projection 的传单
【发布时间】:2013-10-15 03:58:17
【问题描述】:

我想在 Albers USA 投影中使用 D3 + Leaflet。

我使用 Mike Bostock 的 D3 + Leaflet 演示作为起点(可在此处找到:http://bost.ocks.org/mike/leaflet/)。我不确定如何正确使用 Albers USA 投影。在试图弄清楚如何做到这一点时,我遇到了几个问题:

  1. 我不确定如何让 Leaflet 使用 Albers USA 投影。我想我可能可以使用 Proj4Leaflet 插件来做到这一点,但是在创建指定 Albers USA 的 CRS 时,我一直找不到需要传递给它的参数。我在 spatialreference.org 上找到了一些潜在的配置字符串,但我不知道为原点或分辨率指定什么,也没有找到任何解释它的内容。
  2. D3 的 Albers USA 投影对于集合中的某些点和边界返回 null。我正在使用 Mike Bostock 使用的 us-states.json 文件。我在这里找到了解释:https://github.com/mbostock/d3/issues/1287。 “[...]它现在将为复合投影的剪辑范围之外的点返回 null,因为在使用投影流时不会显示这些点”。我不确定如何从这里开始。我应该使用不同的数据集吗?

如果有人对如何进行操作有任何建议,我将不胜感激!

【问题讨论】:

  • 您有使用 AlbersUSA 的具体原因吗?如果它与另一个投影一起使用,使用起来会容易得多。
  • 是的,我需要让阿拉斯加和夏威夷更靠近美国大陆。你知道另一种方法吗?我还需要能够在其中放置标记,而不仅仅是显示它们。
  • AFAIK Leaflet 没有 albersUSA 投影,所以我认为您无法进行这种特定组合。

标签: javascript d3.js leaflet


【解决方案1】:

您可能有两个不同的问题,所以这里是对两个问题的简要回答 -

1.) 您的源数据无需位于美国阿尔伯斯(严格来说,这并不是一个投影 - AK 和 HI 不在墨西哥)即可将其带入 Leaflet。这是美国各州的 GeoJSON 数据集,地理坐标:https://gist.github.com/wboykinm/6979292

2.) 无论源数据的投影如何,Leaflet 都只会呈现在 Google Mercator 投影中(您在开始的示例中看到的投影)。如果您绝对必须拥有 Albers US,那么由于上下文失真,它实际上不应该是可平移/可缩放的地图。只需将 Mike 的 D3 示例用于静态地图:http://bl.ocks.org/mbostock/6320825

如果你决定使用 Albers US 为 Leaflet 制作一张滑溜溜的地图,我该阻止你吗?但是该过程需要 a.) 在 GIS 程序中移动要素几何,以及 b.) 欺骗 Tilemill 使用错误的投影,因为它会创建供您在 Leaflet 中使用的图块。不建议采取行动。

如果我没有提到您始终可以使用 d3.behavior.zoom() 使您的 D3 图形可缩放,那我也将失职

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多