Algorithm 检测SVG地图的投影

Algorithm 检测SVG地图的投影,algorithm,svg,d3.js,map-projections,Algorithm,Svg,D3.js,Map Projections,我有一个SVG地图(以下称为“外部地图”),代表地球的一部分;连同一张完整的全球地图(“背景地图”)。我希望能够检测外部地图使用的投影(我的最终目标是叠加两张地图)。目前我只考虑墨卡托,等矩形和正投影。 我开发了一个代码来显示这两个贴图(左侧为外部,右侧为背景),并允许用户在背景贴图上拖动/缩放并选择其中一个投影()。如果我手动摆弄这些属性,我得出结论,外部地图可能是使用墨卡托投影创建的;但我怎么能通过编程找到这个结果呢?我考虑了以下算法: 让用户选择,比如说,他将在两张地图上进行地理定位的5个

我有一个SVG地图(以下称为“外部地图”),代表地球的一部分;连同一张完整的全球地图(“背景地图”)。我希望能够检测外部地图使用的投影(我的最终目标是叠加两张地图)。目前我只考虑墨卡托,等矩形和正投影。 我开发了一个代码来显示这两个贴图(左侧为外部,右侧为背景),并允许用户在背景贴图上拖动/缩放并选择其中一个投影()。如果我手动摆弄这些属性,我得出结论,外部地图可能是使用墨卡托投影创建的;但我怎么能通过编程找到这个结果呢?我考虑了以下算法:

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

    • 在步骤3中,如何使用定位点计算地图的中心投影通常是扭曲的,因此使用比例来发现它似乎不正确
    • 出于同样的原因,我不知道如何确定应用于背景地图的比例(缩放)
    这个算法看起来很自然,但我提出的问题使它看起来不可能实现。有没有其他(更好的)算法可以帮助我确定这个投影?如果我可以手动找到它,那么一定有一种方法可以通过编程找到它


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

    也许你可以用神经网络来完成。输入将是一组20个值(即背景中5个点的x、y对和外部地图中相同5个点的x、y对)。输出将是4个或更多值。前3个值是rotationX、rotationY和投影比例。第四、第五(等)个值对应于投影(例如,墨卡托为[1,0,0,0],等矩形为[0,1,0,0]等)。你可以用数千个例子来训练神经网络,你可以通过随机选择5个点的集合并投射它们来自动生成。哇,听起来很沉重。所以,除了机器学习之外,没有办法做到这一点?我不知道足够的数学知识,不能得出结论说,按照你概述的方法,没有办法做到这一点。但这看起来确实非常困难,特别是因为有大量变量,包括投影类型、其三轴旋转、定心、缩放,以及(在某些情况下)其他特定于投影的参数。关于这方面似乎也没有太多有用或有希望的信息。我甚至不知道神经网络方法是否可行,但这似乎是一个超级有趣的项目——如果你能花上几周的时间。斯坦福机器学习课程提供了尝试学习所需的所有信息(事实上,该课程的前三分之一完全涵盖了神经网络)。