倾斜摄影软件读取Mavic 2 Pro位置偏移问题解决方法
1 Mavic 2 Pro的Exif信息中GPS位置错误的Bug
Mavic 2 Pro(下面简称M2P)固件版本低于或等于01.00.0200时,存在一个Bug,就是Exif和XMP明码形式记录的照片GPS信息不统一,准确的说是Exif信息记录错误,XMP是正确的,Exif的位置偏差两公里之多。这个Bug会导致读取Exif信息定位的多种倾斜摄影软件在读取M2P位置信息出现巨大偏差,M2P飞出的数据成果完全没有办法用于简单GIS需求。
下图为某张M2P拍摄的照片,CC读取的经纬度(EXIF)和Windows属性(XMP)的差别。
该bug导致倾斜摄影成果偏差2公里多,如下图:
2 利用ArcGIS临时绕过Bug
虽然大疆后续固件将修改该Bug,但在这之前,我们不必等待新固件也可以利用一定的操作流程绕过该Bug,思路如下:
2.1 ArcGIS批量获取XMP位置信息
虽然CC、Pix4D等主流倾斜摄影软件是读取Exif中的位置信息的,但ArcGIS中有个名叫GeoTagged Photos To Points的工具可以批量读取照片的XMP信息,并将它们自动生成点图层。下图是测试用的M2P拍摄的照片:
准备工作:创建一个File Geodatabase和一个Personal Geodatabase。我这里创建到了M2P照片的下一级路径POSFolder中,如下图:
两个Geodatabase的名字随便起,我这里分别叫:Photo.gdb和PhotoPoints.mdb。
读取XMP位置信息:打开ArcMap工具箱中的GeoTaggedPhotos To Points工具,具体参数见下图:
输入工具参数:注意输出要素类除了填写新建的File Geodatabase路径,还需要加上新创建图层的名称,这里我叫“POS”。填好后点击确定。
执行后ArcMap会把照片所在点位图层自动加入ArcMap中。这些点位都是读取照片XMP而来,因此位置是正确的。
将存储成二进制的坐标值批量添加到属性表。虽然POS图层里包含了正确的照片点位信息,但这些信息保存在“Shape*”这个二进制字段中的,需要将其批量读取到表格中。做到这一步需使用Toolbox中的 Add XY Coordinates工具,位置如下图:
在工具中图层下拉列表中选择刚才的POS图层,然后点击“OK”执行。
此时表格中有了经纬度和高程信息列。
从FileGeodatabase(Photos.gdb)中复制POS图层到Personal Geodatabase(PhotoPoints.mdb)中。
也许你会问为什么当初不直接把POS图层生成到Personal Geodatabase中,这是因为GeoTagged Photos To Points 工具写入Personal Geodatabase会因为DataTime字段无法创建的问题而失败,所以才到File Geodatabase里绕了一圈。
=============惊叹.jpg=============
2.2 导出POS格式文件
现在回到Windows文件夹中可以看到刚才新建的PhotoPoints.mdb文件,就是导入POS图层的Personal Geodatabase。
双击PhotoPoints.mdb文件,使用Office的Access打开,打开其中与图层名同名的表,我这里是“POS”:
现在可以看到每张照片的名称以及坐标值了,拖动Name列到POINT_X,POINT_Y和POINT_Z列边上,便于后续复制操作。
多选Name、POINT_X,POINT_Y和POINT_Z这几列,并点击键盘“CTRL+C”进行复制。
新建记事本粘贴,然后将该文件保存成POS.txt,就是倾斜摄影软件所需的POS文件:
3 POS数据导入倾斜摄影软件定位照片
将照片批量导入CC,可以看到DJI_04790.jpg的坐标值是CC直接从EXIF中读取到的,经度小数点后为“544482”。
点击“导入位置”按钮导入之前通过ArcGIS获得的POS文档。
因为POS.txt第一行是列名,所以需要在修改“文件开头忽略的行数”设置为“1”,如下图:
点击“下一步”后设置空间参考系统,因为M2P获取的原始坐标系统都是WGS 84,因此这里在列表中选择“WGS 84”。
这里逐一设置经度、纬度、高程和影像参考对应字段后,即可点击“导入”按钮导入正确的POS信息。
导入完成后可以看到CC中DJI_04790.jpg的经度从小数点后的“544482”变成了“561526”,其他照片的位置也修正成了XMP中的正确位置。
后续只需要依照正确的位置使用倾斜摄影软件生成倾斜摄影成果即可。
4 总结
该流程的思路说来也简单,就是把位置信息从记录正确的XMP中批量读取成POS文件,再导入到倾斜摄影软件中。其中ArcGIS的操作流程细节略多,请注意关键步骤不要输错。当然如果你有编程能力,也可以把该流程通过编程实现。