检测SVG映射的投影

时间:2014-12-30 00:05:57

标签: algorithm svg d3.js map-projections

我有一个SVG地图(称为"外部地图"此后)代表地球的一部分;以及整个地球的地图("背景地图")。我希望能够检测外部地图使用的投影(我的最终目的是叠加两张地图)。目前我只考虑墨卡托,equirectangular和正交投影。

我开发了一个显示两个地图的代码(左边是外部,右边是背景),允许用户在背景地图上拖动/缩放,然后选择其中一个投影(link)。如果我手动调整这些属性,我得出结论,外部地图可能是使用墨卡托投影创建的;但是我怎么能以编程方式找到这个结果呢?我想到了以下算法:

  1. 要求用户选择5点,他会对两个地图进行地理定位。
  2. 计算外部地图上5个点中每个点之间的(基于像素的)距离。
  3. 对于每个投影:
    • 使用用户在背景地图上找到的5个点的坐标居中并缩放背景地图。
    • 计算背景地图上5个点之间的基于像素的距离。将它们与步骤2中计算的距离进行比较。具有最小距离差异的投影将被视为用于创建外部地图的投影。
  4. 该算法提出了几个问题:

    • 在步骤3中,如何使用定位点计算地图的中心? 投影经常被扭曲,所以使用比例来发现它看起来并不正确。
    • 出于同样的原因,我不知道如何确定要应用于背景地图的比例(缩放)。

    这个算法看起来很自然,但我提出的问题让它看起来无法实现。还有其他(更好的)算法可以帮助我确定这个投影吗?如果我可以手动找到它,必须有一种方法可以通过编程方式找到它!

    如果有帮助,我会使用d3进行地图渲染。

0 个答案:

没有答案