arcgis 循环模型批量处理_邪门歪道:地图截获器栅格批量配准方法【2019017】

1fe90b014d544b14359471863402c9d7.png

Highlights

1、PNG文件不能内嵌坐标信息;

2、切换变换方法可避免异常拉伸BUG;

3、保存链接表可以简化配准流程;

4、复制外置坐标文件可实现批量配准;

5、通过WMTS服务器可以添加底图;

6、适应显示范围是个神奇的功能;

7、链接中有示例数据代码

嗨~多磨,久违的正篇更新,今天分享一个与众不同的配准方法,主要用于将地图截获器【2018-002】输出的栅格数据批量配准到正确的坐标上。感谢韩泽华同学留言提出栅格配准的问题,并特别鸣谢GISer学习团公众号(非商业互吹06d3634585c6a17b3ae8ad20d0e18a30.png还不快去关注一波c571b1670c3865d551e3f6899514df06.png)的张云金老师,本文介绍的配准方法是在张老师作品的启发下产生的。(登录公众平台发现素材编辑页面的表情按钮不见了bc33936ca7731547ed60c0321288eb51.png正文里暂时就不插入表情了,让干货的纯度再提高一点儿吧c9634a2341528a792dad9080b63868fa.png)

【常规的栅格配准三部曲】

【步骤1:准备参照物】简单介绍一下常规的栅格配准操作,首先,需要有一个待配准的栅格,然后需要有一个作为配准目标的参照物,可以是电子地图图层(强力推荐!文末会演示如何在ArcGIS中添加电子地图的,比SimpleGIS插件速度更快哦~)或者已经配准好的其他数据。准备好这两个东西后,将待配准的栅格和参照物添加到ArcMap中并在栅格图层属性的显示选项卡中将透明度调整一下(图1)。

d152e7c8ebf57c8451598484d1ad9b24.gif

图1 添加待配准栅格

(横屏查看可放大动图,下同~)

【步骤2:建立位移链接】在菜单栏空白处单击右键调出【地理配准】工具条(【空间校正】工具条是用于配准矢量要素的,两个工具的操作方式很相似),打开链接表窗口放在旁边备用,点击【地理配准】工具条上的添加控制点按钮,点击栅格上的位置A,然后点击参照物上的对应位置A‘(读作A撇),建立一条位移链接,切换一下变化方法(这是为了避免BUG,后文有相关演示),并继续添加位移链接,一般添加2-3个链接就可以较好地配准了(图2)。如果配准效果不理想,可以试着添加更多链接,添加足够多的链接就能切换到更复杂的变化方法,具体效果可以结合ArcGIS帮助文件的“地理配准栅格数据集的基础知识”词条自行尝试(总之就是配到你满意为止啦)。

11661a46e2b9ac04e24697e2c338ac94.gif

图2 建立位移链接

【步骤3:输出配准结果】然后点击【地理配准】工具条的地理配准-校正,选择输出的目录(这里需要注意的是,如果你想输出到D:\2019_017路径下,那么需要在其上一级目录,即D:\路径下选中2019_017文件夹并点击添加才可以,不太好描述,仔细看动图吧),选择一个合适的压缩方式(TIFF文件推荐LZW)以便减小输出文件的体积,点击保存即可(图3)。

这里之所以采用TIFF格式输出,是因为该格式的坐标信息是内嵌在.tif文件里的,而PNG格式栅格的坐标信息则外置于一个.xml文件中(该结论可能仅在ArcGIS环境下成立,QGIS用什么存储PNG坐标我就不知道了)。坐标信息是否内嵌的一个重要区别体现在文件的管理上,TIFF格式栅格的分享仅需拷贝.tif一个文件(比如我分享的建筑栅格数据【2019-016】时刻不忘打广告),分享PNG格式栅格则需要拷贝.png和.xml两个文件,万一把.xml文件弄丢了,那就麻烦大啦(后文会反过来利用这一点带你见证奇迹)。

12ba4f2770c288697cac761d53ca7e0c.gif

图3 完成校正并输出TIFF

敲黑板】刚才有一步切换变换方法的操作,这里演示一下“正常”操作可能会引发的BUG(图4)。

62587174c9d592685408ba7c69726650.gif

图4 栅格配准时出现异常拉伸

为了更好地看清楚位移链接的问题,点击地理配准-重置变换,重置栅格位置后可以看到链接1没有问题,而链接2的起点位置并不在原栅格的路口处(图5),正确的链接应该是图6的样子。

96fc1f40371ad80d4fb838a273c8faf7.png

图5 错误的配准链接(请点开大图查看)

766a6917ee71511d24046021c11f4540.png

图6 正确的配准链接(请点开大图查看)

这说明,地理配准工具的自动校正功能错误地判断了第二个链接的坐标来源,以至于链接2的原坐标和目标坐标都是基于参照物计算的,造成了栅格的异常拉伸。解决办法有两个,方法一如图2所示,输入完第一个链接之后将变换方法切换至零阶多项式,然后切回一阶多项式即可;方法二是先关闭自动校正功能,输入完全部链接后再勾选自动校正查看配准效果。(尚不确定该BUG是否仅限于ArcGIS 10.2.2,请自行测试一下~)

常规栅格配准的简化

常规配准也是可以近似批量化的(实为配准操作的部分简化),点击链接表窗口的保存按钮(图7),可以把当前的链接保存为文本,以便后续栅格配准时直接加载,用起来的效果大概是图8的样子。

55bd3158c2aa1a2db031b3ffaad90a75.png

图7 链接表可将链接保存为文本

42069a8f407718f6d7ae31b9eee573ea.gif

图8 简化后的配准操作

对于需要配准多张栅格的情况,此方法确实可以大幅提高操作效率,然而,这个方法也存在一种可能不太适用的情况,那就是待配准栅格数量过多(比如几十甚至上百张,嗯?你说没有这种情景?等0.6Beta版的地图截获器发布,你就会知道这是什么情景了,先卖个关子~),一种可行的办法是使用【数据管理工具】-【投影和变换】-【栅格】-【从文件变换】工具,配合ArcGIS模型构建器的循环模块实现自动化水平极高的批量化配准,这个流程当然也可以通过使用Python调用arcpy来实现(这可能也是最好的解决办法,也许以后会单独写一篇)。可是呢,如果我既不想学模型构建器,更不想碰Python,还想尽可能减少重复劳动(毕竟保存链接表也只简化了一部分),有这么好的办法么?

批量配准栅格的邪道办法

办法当然是有滴,不然也没这篇推文了。PNG+XML文件对于ArcGIS来说与单个的TIFF文件其实没什么区别,既然已经有了PNG,是否可以干脆不生成TIFF呢?【地理配准】工具条确实提供了这样的功能,输入完所有的位移链接后,点击地理配准-更新地理配准即可将当前的坐标信息写入对应的XML文件(图9),并且不生成额外的栅格数据,效果如图10所示,更新过地理配准的PNG文件已经记住了正确的位置。

20b440c0b48d03b48d4bf32a4e7e1e0c.png

图9 更新地理配准

da00bf4c818f8c4f474511b16b63b970.gif

图10 更新地理配准后的效果

我们还知道,PNG文件的坐标信息全都存放在XML文件中,那么对于同一组需要配准的PNG文件来说,逐一配准后,它们的XML文件应该也是一样的,所以呢,邪道办法就来了(嘿嘿嘿),对第一张栅格进行配准后,将其XML文件复制多个,并按照其余栅格的文件名逐一修改,这不就完事儿了么!赶紧动手改一个(图11),再放到ArcMap中瞅瞅(图12)。

c2f14cb72cf490b11d14fc1fc73a61ba.gif

图11 复制and改名

0c637785c47c666b44554d474d7aa15f.gif

图12 添加进来就配准好啦!

如果你连复制和改名都嫌麻烦的话……这回就没有太邪道的方法了,稍微学点儿Python吧,代码如下

import os
root=os.getcwd()+'\\'
PNGlist=[]
t=''
for i in os.listdir(root):
    if i[-4:]=='.png':
        PNGlist.append(i)
    elif i[-4:]=='.xml':
        t=open(root+i).read()
if len(t)>0:
    for png in PNGlist:
        if os.path.isfile(root+png+'.png.aux.xml')==False:
            xml=open(root+png+'.aux.xml','w')
            xml.write(t)
            xml.close()
    raw_input('XML files copying finished, press ENTER to quit')
else:
    raw_input('No XML files founded, press ENTER to quit')

把代码复制到TXT文本文档中并保存,然后将后缀名从.txt修改为.py,放到存放PNG的目录下运行,其效果如图13所示,将处理过的PNG加载到ArcMap的效果如图14所示。

fe91fc6732a0f6bc643850d0b94ea98a.gif

图13 学点儿Python真的不亏

9c687ae61c0f61fe590b0f0beec1e3e9.gif

图14 见证奇迹!

栅格配准的其他注意事项

最后再补充三则注意事项。其一,作为参照物的电子地图图层可以通过ArcMap目录窗口的添加WMTS服务器来添加(ArcGIS 10.0好像只支持WMS服务器,可以自行搜索相关的服务器URL),双击添加WMTS服务器,在URL一栏中输入http://xdc.at/map/wmts/并点击确定,然后双击目录中刚刚添加的那个服务器(请无视链接错误的小红叉),展开后就能查看可用的电子地图了,将所需的图层拖动到内容列表即可(图15),在此特别感谢该服务器的搭建者谢栋灿的分享。(其实撰文时已经不记得出处了,所以临发布前专门查了一下,原作者那里还有好多硬核内容啊,特附上原文地址供同学们查阅https://i.xdc.at/2017/10/28/add-google-map-to-arcmap/)

9a186a696f37629293ec6070f3c5a02d.gif

图15 添加WMTS服务器

(实际加载没这么快,中间剪掉了一段)

其二,如果有同学还在坚持使用百度地图截获器矢量版1.0Beta,那么在参考此方法进行批量配准之前,请删除矢量版输出的栅格附带的.pgw文件,如果带着这个文件进行操作,那么批量配准时不仅需要复制XML文件,也需要复制.pgw文件,留着它反而会凭添麻烦。

其三(紧接着第二条),对于单独的PNG文件而言,加载到ArcMap后默认会出现在坐标原点附近,差不多是在加纳首都阿克拉正南方向的几内亚湾海面,那么如何快速地把栅格定位到目标区域呢,这个也很简单,添加好待配准栅格和电子地图后,首先缩放到配准的目标区域,然后点击地理配准-适应显示范围,即可将待配准栅格立刻适配到当前窗口(图16),后续的配准操作参考本文开头的三部曲即可(好的,首尾呼应了)~

78e5892d452f4d106da0532bb2f42a6f.gif

图16 适应显示范围效果演示

【后记】

开启三连更模式,今天先更批量配准的邪道流程,周二中午更新例行的建筑栅格数据(也该给正篇更新让一回路了c9634a2341528a792dad9080b63868fa.png),周三中午更新ArcGIS导出三维模型效率测试与备选方法,至此,最基础的一些铺垫内容可能就差不多了,下个月会发布0.6Beta版的地图截获器,上线交通拥堵状态的定时循环截图,可以配合今天分享的邪道批量配准方法进行处理。

【全文3294字,撰文耗时9h40m】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值