我有一堆纬度/经度对映射到(地理上扭曲的)地图上的已知x / y坐标。
然后我还有一个纬度/经度对。我想尽可能在地图上绘制它。我该怎么做呢?
首先,我决定为三个最近的纬度/长点创建一个线性方程组,并计算这些变换,但这根本不适用。由于这是一个线性系统,我也不能使用更多的附近点。
你不能假设North已经启动:你所拥有的就是现有的lat / long-> x / y映射。
编辑:这不是墨卡托的投影,或类似的东西。它的可读性被任意扭曲(想想地铁地图)。我想只使用最近的5到10个映射,这样地图其他部分的失真不会影响我正在尝试计算的映射。此外,整个地图位于一个非常小的地理区域,所以不必担心全球 - 平地假设是足够好的。
答案 0 :(得分:8)
是否有关于失真类型的更具体细节?例如,如果使用墨卡托投影将您的纬度和经度“扭曲”到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)
此代码将给出一个相对简单的近似值。如果您可以更准确地了解投影扭曲地理坐标的方式,那么您可以做得更好。
答案 1 :(得分:2)
好的。从理论的角度来看,假设失真是“任意的”,并且任何解决方案都要求你对这种任意失真进行建模,你显然无法得到“答案”。然而,任何解决方案都将涉及强加(通常是隐含的)一些扭曲模型,这些模型可能会或可能不会反映情况的实际情况。
由于您似乎对假定失真映射的某种局部连续性的模型最感兴趣,因此最明显的选择是您已经尝试过的那种:最近点之间的线性插值。超越这一点需要更复杂的数学和数值分析知识。
然而,你错了,假设你无法将其扩展到更多点。您可以使用最小二乘误差方法。找到最小化其他点误差的线性答案。这可能是最直接的扩展。换句话说,取5个最近的点并尝试提出线性近似,以最小化这些点的误差。并使用它。我会尝试下一步。
如果这不起作用,那么就会破坏N点区域的线性假设。此时,您需要升级到二次或三次模型。那时数学会变得忙乱。
答案 2 :(得分:0)
问题在于球体可以通过多种方式扭曲,并且在赤道上已知所有这些点,可以说,它们不会帮助您将点进一步绘制出来。
你需要更好的'近距离'点,然后你可以假设这三个点在第四个平面上并进行插值 - 知道经度距离是一个函数,而不是一个常数。
答案 3 :(得分:0)
嗯。也许我在这里错过了一些关于这个问题的东西,但如果你有长/拉信息,你也有北方向?
您似乎需要将测地坐标映射到投影坐标系。例如osgb到wgs84。
所涉及的数学是非常重要的,但代码只出现了几行。如果我有更多的时间发布更多但我需要淋浴,所以我会很无聊并链接到wikipedia条目,这是非常好的。
注意:后期淋浴编辑。