背景这是我的第二个问题,涉及对裸栅格地图进行地理配准,以便在不同的坐标系上以及与其他数据层一起重新可视化它们。上一个问题是将任意无元数据的地图图像转换为QGIS项目
问题我的目标是对该地图进行地理配准:
这似乎不是Plate-Carrée。因此,在QGIS中,我创建了几个合理的控制点,为完整起见,我将其附加在底部[ref:1]。我为QGIS Georeferencer提供了与我的项目文件EPSG:4326相同的目标SRS。使用Helmert和多项式变换时,我得到的结果异常差,但是用薄板样条曲线得到了合理的图像(这使得结果的地理估计值通过了我的控制点)。但是,即使这样的结果也很差,例如在较高的纬度上(参见日本北部的俄罗斯海岸)。这是我使用自然地球背景的QGIS屏幕的屏幕截图。
替代路径我在MapWarper上使用了更易于使用的工具尝试了类似的练习:在http://mapwarper.net/maps/758#Preview_Map_tab上查看结果和控制点,我得到的结果较差(可能是由于事实我添加了更少的控制点)。
简而言之的问题
- 有什么技巧可以使我获得良好的地理参考?
- 可以立即识别出这种投影吗?
- 在旧图纸上的“未知坐标系”中,
gdaltransform
建议将多个坐标点转换为多个目标SRS,以实际发现用于生成原始地图的投影参数为目标。我尝试过这样的事情:保存我的QGIS点列表之后,我进行了一些字符串处理,以获取空格分隔的经/纬度列表,cat eurasian-steppe-gcp.points | tail -n+2 | cut -d, -f1-2 | sed 's/,/ /'> tmp.txt
并将结果文件输入到gdaltransform中:gdaltransform -s_srs EPSG:3785 -t_srs EPSG:4326 < tmp.txt
并切换s_srs
和t_srs
标志(该项目使用EPSG:4326)。我知道我在黑暗中射击,希望能走运,所以当我无法理解输出时,我并不感到惊讶。有人可以扩展我将如何使用此方法来找到源地图的投影和投影参数的最佳估计吗?我的想法是,与其在无数个控制点上放置好地理参考,不如通过遍历所有公共坐标系来获得较少控制点的近乎完美的地理参考,会更容易吗?对于每个被测CRS,是否涉及每个点与其他所有点的交叉验证?
我想了解此算法或地理配准,因此可以使流程自动化-我一直都遇到这个问题,直到内容创建者停止将其地图视为一次性创建,再也无法集成以及其他内容,我不希望停止。
参考文献
[ref:1] QGIS GCP文件:
mapX,mapY,pixelX,pixelY,enable
142.632649100000009,54.453595900000003,505.941176470588232,-95.220588235293974,1
154.934252200000003,59.559921699999997,536.411764705882206,-52.779411764705742,1
80.080158100000006,9.657192300000000,291.558823529411711,-322.661764705882206,1
10.448442600000000,57.819128900000003,21.676470588235190,-103.926470588235134,1
34.007173000000002,27.761438299999998,101.117647058823422,-244.852941176470466,1
50.950890399999999,11.862196600000001,171.852941176470495,-313.955882352941046,1
29.713217199999999,60.024133200000001,90.779411764705799,-92.499999999999829,1
60.000000000000000,0.000000000000000,208.308823529411683,-362.382352941176350,1
69.867506500000005,66.639146199999999,224.088235294117567,-33.191176470588061,1
27.276107100000001,71.049154799999997,89.147058823529306,-21.764705882352814,1
140.000000000000000,0.000000000000000,536.955882352941217,-362.926470588235190,1
20.000000000000000,0.000000000000000,43.441176470588132,-362.926470588235190,1
20.196882700000000,31.243024100000000,47.249999999999901,-231.794117647058698,1
9.171861099999999,42.848309999999998,8.073529411764603,-175.205882352941046,1
131.955786100000012,43.196468600000003,481.999999999999943,-162.691176470588090,1
73.813303700000006,45.169367200000003,256.735294117646959,-161.602941176470438,1
50.602731800000001,44.589102900000000,168.044117647058727,-167.588235294117510,1
121.394975900000006,18.941421099999999,455.882352941176407,-284.029411764705742,1
103.987047000000004,1.417439300000000,389.499999999999943,-357.485294117646959,1
109.325478599999997,55.962283100000001,380.249999999999943,-98.485294117646902,1
31.454010100000001,46.562001500000001,95.132352941176379,-158.882352941176322,1
43.639560299999999,68.844150499999998,137.573529411764611,-40.264705882352814,1
不更新
范德格林顿的分析我编写了一个Python工具,以使GCP适应Proj4支持的任何投影(通过Pyproj),并将其应用于答案中建议的几个投影。源代码(有些草率,我事先表示歉意)以及更新的GCP可以从https://github.com/fasiha/steppe-map获得。
van der Grinten只有1个参数需要调整,这就是生成的图像(使用不列颠尼克的最新图像,这要归功于他们提供了如此高分辨率和更新的地图(尽管它仍然缺少投影数据))。
Van der Grinten在GCP和最佳拟合点之间的相对误差为0.035,这是我尝试过的最差的部分,海岸线叠加层定性地证明了这一点。
(如果您在自己的标签页中打开该图像,可能会有所帮助,因为它的分辨率很高。您还将看到绿色箭头指示地理参考点(它们应与图像上的重要地标匹配),以及红色箭头指示这些点在哪里适合(它们应该与海岸线覆盖图上的相同地标匹配)---两者之间的偏差可以帮助眼睛看到图像与适合度之间的差异。)
阿尔伯斯等面积分析尝试用阿尔伯斯等面积投影进行相同的操作(与“阿尔伯斯保形圆锥曲线”相同?对我的无知表示歉意)。这种涉及4维参数拟合的拟合较好,相对误差为0.025,但是看起来仍然很差。
分析Robinson和Eckert V投影我拟合了Pyproj支持的许多伪圆柱投影(所有我都能找到的都有一个自由参数),并且发现Robinson和Eckert V投影在两者之间的相对误差方面表现出“最佳” GCP和拟合点的相对误差均为0.015。
这是鲁滨逊:
这是EckertV。
注意拟合的海岸线与图像海岸线的偏差。我认为,我可以得出结论,以上都不是地图?
温克尔·特佩尔(Winkel Tripel):可能的解决方案?
从1990年(2003年更新)依次尝试了Proj手册中的每个投影之后,ftp: //ftp.remotesensing.org/proj/OF90-284.pdf我终于来到了Winkel Tripel投影。这将产生最低的定量误差(0.011),海岸线一致都相当好(或等效地,一致都有些差)。我读到,这是国家地理学会的投影,这意味着它是著名的,这进一步增加了此投影对不列颠尼加地图的候选资格。合适的SRS :+units=m +lon_0=47.0257707403 +proj=wintri
。
(为将海岸线颜色更改为灰色而道歉。如果这冒犯了任何人,我可以提供蓝色版本。)
我将尝试调整我的GCP,以尝试降低错误。