Ada*_*nst 23 mapping math maps latitude-longitude
我有一堆纬度/经度对映射到(地理上扭曲的)地图上的已知x/y坐标.
然后我还有一个纬度/经度对.我想尽可能在地图上绘制它.我该怎么做呢?
起初,我决定为三个最近的纬度/长点创建一个线性方程组,并计算这些变换,但这根本不适用.由于这是一个线性系统,我也不能使用更多的附近点.
您无法假设North已启动:您拥有的只是现有的lat/long-> x/y映射.
编辑:这不是墨卡托投影,或类似的东西.它的可读性被任意扭曲(想想地铁地图).我想只使用最接近的5到10个映射,这样地图其他部分的失真不会影响我正在尝试计算的映射.
此外,整个地图都在一个非常小的地理区域,所以不必担心全球 - 平地假设是足够好的.
是否有关于失真类型的更具体细节?例如,如果使用墨卡托投影将您的纬度和经度"扭曲"到2D地图上,则转换数学很容易获得.
如果地图是真正任意扭曲的,那么你可以尝试很多东西,但最简单的可能是从你现有的点映射计算加权平均值.您的权重可以是从新点到每个现有点的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)
Run Code Online (Sandbox Code Playgroud)
该代码将给出一个相对简单的近似值.如果您可以更准确地了解投影扭曲地理坐标的方式,那么您可以做得更好.