上周三凌晨两点。
我把头埋进键盘缝隙里,头发都快掉光了。
为什么?
因为又遇到了数据对齐的垃圾问题。
做地理信息的朋友都懂。
那种看着Excel表都头疼的感觉。
尤其是手里攥着好几个平台的导出文件。
A平台是Shapefile。
B平台是GeoJSON。
C平台干脆给了个CSV带经纬度。
以前我咋处理?
傻大黑粗。
一个一个打开QGIS。
手动叠加。
复制粘贴属性表。
累得想骂娘。
昨天我实在忍不住了。
我想着,肯定有偷懒的法子吧?
于是去翻了翻官方文档和社区帖子。
结果你猜怎么着?
真让我给摸出了门道。
原来 geo两个平台文件可以一起合并 这种操作,根本不需要你是编程大神。
也不用搞那些复杂的Python代码,虽然代码能自动化,但咱们普通人图个方便啊。
我今天就把这个干货掏出来。
不玩虚的。
全是实操里踩出来的血泪教训。
首先,别急着下载什么贵贵的商业软件。
ArcGIS虽然牛,但授权费那是真金白银。
对于偶尔处理数据的小团队,或者自由职业者。
QGIS是永远的神。
免费,开源,还能装插件。
重点来了。
很多人问我,格式不一样咋办?
A平台导出的是矢量数据。
B平台也是矢量数据。
只是坐标系差了那么一丢丢。
比如一个是4326,一个是3857。
这就很尴尬了。
叠在一起,地图歪得亲妈都不认识。
解决办法很简单。
先统一坐标系。
这一步不能省。
省了就是废了。
在QGIS里,右键图层。
选择“另存为”。
然后在下拉菜单里选对坐标系。
这一步做完,两个文件的底层语言就通顺了。
这时候,再谈 geo两个平台文件可以一起合并 。
你就知道有多爽了。
接着是属性表的合并。
这才是重头戏。
很多新手在这里栽跟头。
他们试图直接画个框框把两个文件圈进去。
那是 spatial join(空间连接)。
容易出重复值,容易出丢数据的情况。
我推荐用 DB Manager。
或者简单的 Merge 功能。
如果你是用命令行工具 GDAL。
那更简单一条命令搞定。
但要是GUI界面,我还是建议用 QGIS 的 Processing Toolbox。
搜索 Merge Vector Layers。
对,没听错。
就是这个单词。
把你那两个处理过坐标系、格式大致统一的文件拖进去。
点击运行。
叮。
搞定。
一个新的shp文件就躺在那了。
但这还不是终点。
这时候的文件,属性表里会有两列一样的ID。
或者是 null。
看着就膈应人。
这时候需要清理一下。
打开属性表。
添加新字段。
用 field calculator(字段计算器)把两列合并为一列。
逻辑要写清楚。
比如如果A有值就用A,没值就用B。
这种小细节。
只有真正干过的人知道有多折磨。
我之前就是因为没注意这个。
导致最后报表出来的数据对不上。
老板当场黑脸。
从那以后,我每次合并都要检查三遍。
第一遍检查几何形状。
看看有没有重叠的线,破碎的面。
第二遍检查属性关联。
确保每个点都找到了归属。
第三遍检查坐标系元数据。
别以为看着对就是真对。
有时候投影参数差一丝,距离就偏公里。
还有个小坑。
就是文件编码。
如果你从国外平台导出数据。
里面可能包含乱码。
或者是特殊的字符集。
打开的时候,字全是问号。
这时候别慌。
用 Notepad++ 打开文本文件。
看看编码是 UTF-8 还是 GBK。
转换成统一的编码。
再导入GIS软件。
这样能保证 geo两个平台文件可以一起合并 后的数据完整性。
别小看这一步。
很多报错都是因为编码不一致引起的。
尤其是当两个平台的开发者习惯不同时。
一个用英文注释,一个用中文。
合并时如果不处理编码。
后期处理属性字段会炸锅。
另外。
如果你文件特别大。
超过几个G。
直接在QGIS里跑 Merge 可能会卡死。
内存溢出。
这时候得换个思路。
用空间数据库。
比如 PostgreSQL 配合 PostGIS。
把两个文件导进去。
然后写简单的SQL语句。
union all。
一劳永逸。
虽然前期 setup 麻烦了点。
但对于经常要处理大量数据的人来说。
这是值得投入的。
毕竟,时间就是金钱。
别为了省那点安装数据库的时间。
最后花几百个小时去手动修bug。
最后再说句心里话。
做这行。
耐心比技术更重要。
数据清理占你80的时间。
剩下的20才是在用软件。
所以。
别总想着找那种一键转换的神器。
不存在。
只有把每一步流程标准化。
把错误预判在前面。
才能真正做到高效。
希望这篇文章能帮你省下几个通宵。
毕竟,头发没了可以再长。
数据错了。
真的没法重来。
如果觉得有用。
记得多去测试几组不同的数据。
每个平台的要求都不太一样。
只有自己试过了。
才敢拍胸脯说这句: geo两个平台文件可以一起合并 真的很省心。
当然前提是你前期功夫做足了。
别偷懒。
别侥幸。
这就是这行最真实的写照。