做地理信息开发的朋友,肯定被过 Geo JSON 文件折磨过。
数据源分散在十几个文件里。
属性字段还经常对不上。
手动复制粘贴?那是给新手准备的坑。
今天不聊虚的,只讲实战中踩过的坑和真金白银换来的经验。
很多小白第一步就错了。
他们喜欢用 Excel 打开 Geo JSON。
结果发现坐标全乱,属性丢失。
千万别这么干,Excel 不是 GIS 工具。
正确的思路是:先统一结构,再合并数据。
我见过太多项目因为数据格式不统一,导致前端地图渲染报错。
修复一个 Bug 的时间,够你重新写一遍合并脚本。
这里分享一个真实案例。
某智慧城市项目,需要合并全市的行政区划数据。
原始数据来自三个不同部门。
坐标系一个是 WGS84,一个是 GCJ02。
如果直接合并,地图直接偏移几公里。
这就是典型的“垃圾进,垃圾出”。
所以,合并前的预处理至关重要。
第一步:清洗与标准化。
确保所有文件的坐标系一致。
推荐用 Proj4js 或 GDAL 在本地预处理。
别指望在线工具能处理百万级数据。
那些在线转换网站,要么限速,要么泄露数据。
第二步:检查 Schema 一致性。
Geo JSON 的 properties 字段必须对齐。
如果 A 文件有“人口”字段,B 文件没有。
合并后 B 的对应项就是 null。
前端渲染时,如果不做判空处理,页面直接白屏。
我在一个物流轨迹项目中就吃过这个亏。
为了省时间,没做字段对齐。
结果上线后,部分车辆轨迹显示异常。
排查了两天,才发现是属性缺失导致的。
第三步:选择合适的合并工具。
Python 的 geopandas 库是首选。
一行代码就能搞定大部分合并需求。
import geopandas as gpd
df1 = gpd.read_file('a.geojson')
df2 = gpd.read_file('b.geojson')
result = gpd.GeoDataFrame(pd.concat([df1, df2], ignore_index=True))
这比写复杂的 JS 脚本稳定得多。
当然,如果你必须在浏览器端处理。
可以用 Turf.js 的 merge 功能。
但要注意,Turf.js 适合小数据量。
超过 10 万条记录,浏览器会卡死。
这时候,建议后端处理完再返回前端。
关于价格,市面上有很多商业 GIS 软件。
比如 ArcGIS,一套授权费好几万。
对于中小企业,这成本太高。
其实,开源方案完全够用。
QGIS 配合 Python 脚本,零成本解决。
关键是掌握方法,而不是依赖工具。
避坑指南:注意几何类型的混合。
点、线、面混合在一个 Geo JSON 里。
虽然规范允许,但很多前端库不支持。
比如 Leaflet,处理混合几何时容易出错。
建议合并前,按几何类型拆分。
或者在合并后,统一转换为多边形。
另外,文件编码也是个隐形杀手。
有些数据源是 UTF-8,有些是 GBK。
合并时如果不指定编码,中文属性直接乱码。
我在处理某地市政数据时,就遇到过。
花了半小时排查,才发现是编码问题。
最后,测试数据一定要真实。
别用官方示例数据测试合并逻辑。
真实数据往往充满脏数据。
空值、重复坐标、非法几何。
只有经过真实数据洗礼的代码,才靠谱。
如果你还在为数据合并头疼。
或者遇到复杂的坐标转换问题。
别自己死磕,专业的事交给专业的人。
我可以帮你评估数据现状,给出最优方案。
私信我,发我两个样例文件。
我免费帮你看看结构是否合理。
很多时候,问题出在数据源头。
改数据比改代码容易得多。
记住,数据质量决定项目上限。
别在基础数据上省时间。
后期返工的成本,远超你的想象。
有问题随时留言,看到必回。