写在前面

经过一下午的查找网络资料,实际操作分析解决问题终于不完美的解决了问题。体会最深刻的就是网络上arcgis相关的资料(回答,文章等)都太少了,甚至是英文版的也不多。虽然有个别社区但内容都非常匮乏。arcgis作为地理信息行业最强大应用最为广泛的软件,它的生态环境却如此恶劣。就更不用说我们的国产地理信息软件了。

正文

需求:

1.arcgis数据中的TFM层在经过坐标转换之后需要重新生成。
2.需要保证原TFM层和新TFM层的字段信息一致。

思路一:

为了使图层字段保持一致,可以以原图层为模板新建图层。使用arcgis工具生成图幅网格,再对图幅编号字段进行重新赋值。
1.新建图层

arcgis制作分幅图层,并对分幅图进行编号
导入原TFM层字段结构
arcgis制作分幅图层,并对分幅图进行编号
导入之后,对比发现字段结构跟原图层并不完全一致。(这里要吐槽一下arcgis的字段顺序问题,如果想调整字段的真实顺序,就必须新建图层再按照预想的顺序一个个新建字段,而且arcgis的保留字段还可能影响到顺序例如,OBJECTID,Shape等)
arcgis制作分幅图层,并对分幅图进行编号arcgis制作分幅图层,并对分幅图进行编号
至此,思路一行不通

思路二

复制原TFM层,然后删除层内所有地物当做新的TFM层。(缺点:OBJECTID字段不会从0开始)
1.复制
2.删除层内所有地物,使用arcgis工具
arcgis制作分幅图层,并对分幅图进行编号
3.创建图幅网格,使用arcgis工具(创建渔网)
arcgis制作分幅图层,并对分幅图进行编号
arcgis制作分幅图层,并对分幅图进行编号
arcgis制作分幅图层,并对分幅图进行编号
创建ST_TFM_2完成
arcgis制作分幅图层,并对分幅图进行编号
新建图层的字段结构
arcgis制作分幅图层,并对分幅图进行编号

4.把ST_TFM_2的地物导入到事先准备好的TFM模板层中。
方法1:通过编辑——复制所有地物——粘贴到TFM层。
经试验发现,每次复制2000个地物以上就无法粘贴(可能跟内存有关?),而且还得不断的“开始编辑”、“选择地物复制”、“粘贴到TFM”、“结束编辑”等操作,因为总共有5w+个网格。
方法2:通过“Load”把地物“载入”到TFM层
arcgis制作分幅图层,并对分幅图进行编号
可以把创建的图幅网格导入到新的TFM层。
5.对新的TFM层的图幅编号字段重新赋值
需要指出我建立的图幅为250m×250m的正方形网格,网格左下角点的x,y坐标均为250m的整数倍。
注意到:
arcgis制作分幅图层,并对分幅图进行编号
首先,新建两个字段x,y(int类型即可)用来存储格网中心点的坐标值(因为“计算几何”只能计算网格中心点坐标)。
arcgis制作分幅图层,并对分幅图进行编号
计算结果如图
arcgis制作分幅图层,并对分幅图进行编号
对TF_BH计算字段
arcgis制作分幅图层,并对分幅图进行编号
选择Python使用下面公式

"{:0>6}-{:0>6}".format("{:.2f}".format(( !y! -125)/1000.0),"{:.2f}".format(( !x! -125)/1000.0))arcgis制作分幅图层,并对分幅图进行编号
arcgis制作分幅图层,并对分幅图进行编号

思路三:把网格直接生成到TFM模板层

经试验发现不行

总结

总体来说,目前只能用这种麻烦且不完美的方法解决问题,但应该有更好的方法也需要有更好的方法。
特别是对于arcgis字段顺序调整太过于麻烦,而为了使前后顺序一直需要做很多不必要的工作,非常繁琐。

相关文章: