说实话,刚入行做GIS数据处理那会儿,我差点被一个geo文件给逼疯。那时候年轻气盛,觉得不就是个文件嘛,拖进软件里不就完事了?结果呢?数据对不上,地图歪得亲妈都不认识,客户骂得狗血淋头。今天我就把这段血泪史掏心窝子讲讲,顺便把大家最头疼的geo文件是什么坐标这个问题,掰开了揉碎了说清楚。
先说个真事儿。去年有个做测绘的朋友找我救火,说他那边有个geo文件,死活导入不进去,或者导入后位置偏了十几公里。我一看文件头,好家伙,里面啥坐标信息都没写,或者写的都是乱码。这种“裸奔”的数据,简直就是定时炸弹。很多新手朋友问,geo文件是什么坐标?其实这问题本身就有点坑,因为geo文件本身只是一个容器,它里面存的是什么坐标系,完全取决于生成它的那个软件或者采集设备。
我见过最常见的情况,就是WGS84。这是GPS卫星用的全球标准,大部分手机导航、高德百度(虽然他们做了偏移处理,但底层还是基于这个)用的都是这个。如果你的geo文件是从手机GPS轨迹导出来的,那大概率就是WGS84。但如果你是从某些老旧的测绘仪器里导出来的,那可能是北京54或者西安80,甚至可能是地方独立坐标系。一旦搞错,你在图上标个点,实际位置可能在几公里外的河里。
再说说那个让我头疼的“偏移”问题。国内大家最熟悉的,就是GCJ02,也就是大家常说的火星坐标。很多做互联网地图开发的兄弟,应该都懂这个痛。如果你的geo文件里存的是GCJ02坐标,而你直接把它当成WGS84去叠加在底图上,那画面太美我不敢看。点全跑偏了,而且是不规则的乱跑,不是简单的平移。这时候你就得做坐标转换,把GCJ02转回WGS84,或者把底图也转成GCJ02。这一步要是没做好,后面所有的分析都是废纸。
那怎么判断你的geo文件是什么坐标呢?别瞎猜,看属性表。打开QGIS或者ArcGIS,把文件加载进去,右键属性,看坐标参考系统(CRS)。如果显示的是EPSG:4326,那基本就是WGS84。如果显示的是EPSG:3857,那是Web墨卡托,常用于在线地图展示。如果是一串数字代码,比如EPSG:4490,那是CGCS2000,现在国内很多官方测绘数据都用这个。
还有个坑,就是有些geo文件里根本不带坐标系信息。这时候你就得靠“猜”或者“试”。比如,你把文件导入软件,看它默认落在哪。如果落在非洲或者太平洋中间,那肯定是没定义坐标系,或者坐标系选错了。如果落在国内某个城市,但位置明显不对,那可能是投影方式不对。这时候,你就得去问数据来源方,或者根据文件的元数据(metadata)来判断。
我常跟徒弟说,处理geo文件,第一步不是看数据多漂亮,而是先确认它是什么坐标。这一步错了,后面全是功夫。别嫌麻烦,花十分钟确认坐标系,能省你三天调试时间。
最后再啰嗦一句,别轻信那些“一键转换”的小工具,尤其是网上下载的。很多工具转换逻辑不严谨,特别是涉及不同基准面转换的时候,误差可能很大。最好还是用专业的GIS软件,手动设置转换参数。虽然麻烦点,但心里踏实。
总之,geo文件是什么坐标,这个问题没有标准答案,全看你的数据来源。保持警惕,多问一句,多看一眼属性表,能帮你避开90%的坑。希望我的这些经验,能让大家在处理数据时少掉几根头发。毕竟,头发比数据值钱多了。