Math 如何将纬度/经度映射到扭曲的地图?

Math 如何将纬度/经度映射到扭曲的地图?,math,maps,mapping,latitude-longitude,Math,Maps,Mapping,Latitude Longitude,我有一组纬度/经度对,它们映射到(地理上扭曲的)地图上的已知x/y坐标 然后我还有一个纬度/经度对。我想尽可能把它画在地图上。我该怎么做呢 起初,我决定为三个最近的lat/long点创建一个线性方程组,并从中计算一个变换,但这根本不起作用。因为这是一个线性系统,我也不能使用更多的邻近点 您不能假设North向上:您所拥有的只是现有的lat/long->x/y映射 编辑:这不是墨卡托投影或类似的东西。为了可读性,它被任意扭曲(想想地铁地图)。我只想使用最接近的5到10个映射,这样映射的其他部分上的

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

然后我还有一个纬度/经度对。我想尽可能把它画在地图上。我该怎么做呢

起初,我决定为三个最近的lat/long点创建一个线性方程组,并从中计算一个变换,但这根本不起作用。因为这是一个线性系统,我也不能使用更多的邻近点

您不能假设North向上:您所拥有的只是现有的lat/long->x/y映射

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


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

问题是,球体可能会以多种方式扭曲,而在赤道上已知所有这些点,比方说,不会帮助您绘制更远的点


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

嗯。也许我遗漏了一些关于这个问题的信息,但是如果你有long/lat信息,你也有北的方向吗

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

所涉及的数学不是简单的,但代码只给出了几行。如果我有更多的时间,我会发布更多,但我需要一个淋浴,所以我会很无聊,并链接到非常好的条目


注:淋浴后编辑。

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

如果贴图被任意扭曲,有很多方法可以尝试,但最简单的方法可能是从现有的点贴图计算a。权重可以是从新点到每个现有点的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)

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

好的。从理论的角度来看,假设失真是“任意的”,并且任何解决方案都需要您对这种任意失真进行建模,您显然无法得到“答案”。然而,任何解决方案都将涉及强加(通常是隐含的)某种扭曲模型,这种模型可能反映也可能不反映实际情况

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

然而,你认为你不能把它扩展到更多的点,这是错误的。您可以使用最小平方误差方法。找到使其他点的误差最小的线性答案。这可能是最直接的扩展。换言之,取最近的5个点,尝试得出一个线性近似值,使这些点的误差最小化。用这个。下一步我会试试这个

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

你试过了吗?