【问题标题】:How to map a latitude/longitude to a distorted map?如何将纬度/经度映射到扭曲的地图?
【发布时间】:2010-09-05 08:08:59
【问题描述】:

我有一堆纬度/经度对,它们映射到(地理扭曲的)地图上的已知 x/y 坐标。

然后我还有一对纬度/经度。我想尽可能地将它绘制在地图上。我该怎么做?

起初我决定为三个最近的纬度/经度点创建一个线性方程组,并根据这些点计算一个变换,但这根本不起作用。由于这是一个线性系统,我也不能使用更多的附近点。

您不能假设 North 已启动:您所拥有的只是现有的 lat/long->x/y 映射。

编辑:它不是墨卡托投影或类似的东西。为了可读性,它被任意扭曲(想想地铁地图)。我只想使用最近的 5 到 10 个映射,以便地图其他部分的失真不会影响我尝试计算的映射。

此外,整个地图位于一个非常小的地理区域内,因此无需担心地球——平地假设就足够了。

【问题讨论】:

标签: math maps mapping latitude-longitude


【解决方案1】:

关于失真的种类有更具体的细节吗?例如,如果使用墨卡托投影将您的纬度和经度“扭曲”到 2D 地图上,则转换数学为 readily available

如果地图真的被任意扭曲,您可以尝试很多方法,但最简单的方法可能是从您现有的点映射计算weighted average。您的权重可能是从新点到每个现有点的 x/y 距离的平方倒数。

一些伪代码:

estimate-latitude-longitude (x, y)

    numerator-latitude := 0
    numerator-longitude := 0
    denominator := 0

    for each point,
        deltaX := x - point.x
        deltaY := y - point.y
        distSq := deltaX * deltaX + deltaY * deltaY
        weight := 1 / distSq

        numerator-latitude += weight * point.latitude
        numerator-longitude += weight * point.longitude
        denominator += weight

    return (numerator-latitude / denominator, numerator-longitude / denominator)

这段代码将给出一个相对简单的近似值。如果您可以更准确地了解投影扭曲地理坐标的方式,您可能会做得更好。

【讨论】:

    【解决方案2】:

    好的。从理论上讲,鉴于失真是“任意的”,任何解决方案都需要您对这种任意失真进行建模,您显然无法得到“答案”。但是,任何解决方案都将涉及(通常是隐含地)强加某种扭曲模型,这些模型可能反映也可能不反映实际情况。

    由于您似乎对假定失真映射具有某种局部连续性的模型最感兴趣,因此最明显的选择是您已经尝试过的模型:最近点之间的线性插值。除此之外,还需要更复杂的数学和数值分析知识。

    但是,您假设您不能将其扩展到更多点,这是不正确的。您可以使用最小二乘误差方法。找到最小化其他点误差的线性答案。这可能是最直接的扩展。换句话说,取最近的 5 个点并尝试提出一个线性近似值,以最小化这些点的误差。并使用它。下次我会试试这个。

    如果这不起作用,那么在 N 个点的区域上的线性假设就被打破了。此时,您需要升级到二次或三次模型。那时数学会变得很忙。

    【讨论】:

      【解决方案3】:

      问题在于球体可能会以多种方式变形,并且假设赤道上的所有这些点都已知,不会帮助您绘制更远的点。

      你需要更好的“接近”点,然后你可以假设这三个点与第四个点在一个平面上并进行插值——知道经度的距离是一个函数,而不是一个常数。

      【讨论】:

        【解决方案4】:

        嗯。也许我在这里遗漏了一些关于这个问题的信息,但如果你有经度/纬度信息,你也有北方的方向吗?

        您似乎需要将测地坐标映射到投影坐标系。例如 osgb 到 wgs84。

        所涉及的数学运算很重要,但代码只有几行。如果我有更多时间,我会发布更多信息,但我需要淋浴,所以我会很无聊并链接到 wikipedia 条目,这非常好。

        注意:淋浴后已编辑。

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-02-16
          • 2017-04-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多