javascript - D3 + 带有 Albers USA 投影的传单

标签 javascript d3.js leaflet

我想将 D3 + Leaflet 与 Albers USA 投影结合使用。

我使用 Mike Bostock 的 D3 + Leaflet 演示作为起点(可在此处找到:http://bost.ocks.org/mike/leaflet/)。我不确定如何正确使用阿尔伯斯美国投影。我在尝试弄清楚如何执行此操作时遇到了几个问题:

  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,因为使用投影流时不会显示这些点”。我不知道如何从这里继续。我应该使用不同的数据集吗?

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

最佳答案

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

1.) 您的源数据不需要位于 Albers-US(严格来说这不是投影 - AK 和 HI 不在墨西哥)才能将其带入 Leaflet。以下是采用 GeoJSON 格式的美国各州数据集(采用地理坐标):https://gist.github.com/wboykinm/6979292

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

如果你决心使用 Albers US 为 Leaflet 制作一张滑动 map ,我有什么资格阻止你呢?但这个过程需要 a.) 在 GIS 程序中移动要素几何图形,以及 b.) 欺骗 Tilemill 使用错误的投影,因为它会创建供您在 Leaflet 中使用的图 block 。不是推荐的行动方案。

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

关于javascript - D3 + 带有 Albers USA 投影的传单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259039/

相关文章:

javascript - 传单绘制插件 : How to hide/show drawing tools by Layer Type dynamically

d3.js - d3 v4 中的可折叠径向树

javascript - d3 javascript改变y轴的范围

algorithm - 我如何制作边缘系统以便我可以实现 Dijkstra 或 A* 算法?

javascript - 为什么这个函数总是返回 'undefined'

javascript - 使用 jquery 值调用 javascript 函数

javascript - 如何使用 data-href 打开新标签页

Javascript 通过实时输出验证 PHP 上的用户名

javascript - 重新附加路径后,D3 单击事件不起作用

javascript - ReactJS 与传单 : tiles not correctly displayed until page refresh