翻译纬度/经度坐标上旋转/缩放地图(Translating lat/lon coordinate o

2019-09-27 10:40发布

我需要指出纬度/经度坐标的旧地图是这样的: http://www.davidrumsey.com/luna/servlet/detail/RUMSEY~8~1~3017~90020003:Topographical-Map-Of-The-市和-C

预计谷歌地图: http://rumsey.geogarage.com/maps/g2784000.html

我知道地图的边框以及图像的像素尺寸,但我无法弄清楚如何将这个地图中查找纬度/经度。

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

是否有关于如何做定位在历史地图很多/经度数据标准公式?

Answer 1:

只要你可以假设你的纬度/经度坐标,形成一个长方形的网格(这应该是一个城市规模的合理近似,但它会为更大的区域或非常精确的数据失败),你可以假设你之间的转换坐标是射影变换。 见这个职位 (或这一个 ,如果你喜欢留在SO)关于如何计算相应的变换矩阵,并用它来转换坐标信息。

基于这个帖子我做了一些与计算的圣人 :

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被measuered从零到一,其中零表示左RESP。 上部边缘,和一个右RESP。 下边缘。

如果一个矩形网格的假设是不够的,你需要了解用于创建地图投影的细节,让你可以涉及地图位置球面坐标。



文章来源: Translating lat/lon coordinate on rotated/scaled maps
标签: math maps