在旋转/缩放的地图上平移lat / lon坐标

时间:2013-06-16 14:43:28

标签: math maps

我需要在旧地图中指出一个纬度/经度坐标,如下所示: http://www.davidrumsey.com/luna/servlet/detail/RUMSEY~8~1~3017~90020003:Topographical-Map-Of-The-City-and-C

预计在Google地图上: http://rumsey.geogarage.com/maps/g2784000.html

我知道地图的边界框以及图像的尺寸(以像素为单位),但我无法弄清楚如何在此地图中找到纬度/经度。

左上角是(40.698291,-74.079051),左下角(40.659855,-73.979638),右下角(40.855232,-73.835582)和右上角(40.882919,-73.940263)。

是否有关于如何在历史地图中找到批次/ lon数据的标准公式?

1 个答案:

答案 0 :(得分:2)

只要您可以假设您的纬度/经度坐标形成一个矩形网格(在城市范围内应该是一个合理的近似值,尽管它对于更大的区域或非常精确的数据会失败),您可以假设您之间的转换坐标是一个投影变换。如果您希望保留SO,请参阅this post(或this one),了解有关如何计算相应转换矩阵并使用它转换坐标的详细信息。

基于this post我使用sage进行了一些计算:

def pm1(a, b, c, d):
    M = Matrix([a , b, c]).transpose()
    f = M.adjoint() * d
    return M*diagonal_matrix(f)
def pm(a1, a2, b1, b2, c1, c2, d1, d2):
    return pm1(a2, b2, c2, d2)*(pm1(a1, b1, c1, d1).adjoint())
P1 = vector(QQ, [0, 0, 1])
P2 = vector(QQ, [0, 1, 1])
P3 = vector(QQ, [1, 1, 1])
P4 = vector(QQ, [1, 0, 1])
Q1 = vector(QQ, [40698291, -74079051, 1000000]) # Upper left
Q2 = vector(QQ, [40659855, -73979638, 1000000]) # Lower left
Q3 = vector(QQ, [40855232, -73835582, 1000000]) # Lower right
Q4 = vector(QQ, [40882919, -73940263, 1000000]) # Upper right
M = pm(Q1, P1, Q2, P2, Q3, P3, Q4, P4)
M.change_ring(RDF)/1e40

结果公式如下:

z =   559.910562534*lat - 539.510073656*lon - 64123.7576703
x = (-5629.59680416*lat - 2176.56828347*lon + 67876.8560722)/z
y = ( 8466.61769096*lat - 11263.0392472*lon - 1178932.12938)/z

生成的坐标xy从0到1进行测量,其中0表示左边的resp。上边缘,右边一个。下缘。

如果矩形网格的假设不够,则需要了解用于创建地图的投影的详细信息,以便将地图位置与球面坐标相关联。

相关问题