一、地图数据基础:常见格式、坐标系与数据获取
大家好,我是你们这门课的主讲。今天咱们来聊聊地图数据的基础知识。说实话,很多做轨迹分析的朋友,一开始都栽在数据格式和坐标系上。我自己刚入行那会儿,也闹过笑话——拿着GCJ02的数据直接往WGS84的地图上怼,结果轨迹偏了五百多米,找了半天bug才发现是坐标系没对齐。
所以这一章,咱们把地基打牢。你想想看,数据格式搞不清、坐标系搞混了,后面做轨迹对齐就是空中楼阁。
1.1 常见地图数据格式
地图数据格式五花八门,但常用的就那么几种。我按使用场景给你捋一捋。
GeoJSON
这是目前Web地图用得最多的格式。说白了,它就是一套用JSON描述地理数据的规范。轻量、易读、前端直接解析,我特别喜欢用它做原型验证。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [116.397, 39.908]
},
"properties": {
"name": "天安门"
}
}
你看,结构非常清晰。一个Feature包含几何信息和属性信息。我在项目中经常用Python的geojson库来读写,几行代码就搞定。
Shapefile
这是ESRI公司的老牌格式,GIS圈里的"老大哥"。一个完整的Shapefile其实是一组文件:.shp(几何)、.shx(索引)、.dbf(属性)。
嗯,这里要注意:用Python处理Shapefile,我推荐geopandas或者pyshp。千万别手动去解析二进制,那太折磨人了。
KML / KMZ
Google Earth带火的格式。KML本质是XML,KMZ是它的压缩包。我一般在需要和Google Earth交互时才会用这个格式。说实话,它的字段定义有点啰嗦,但胜在可视化效果好。
GPX
这个咱们课程的重头戏。GPX是GPS交换格式,专门存轨迹点。你看它的结构:
<trkpt lat="39.908" lon="116.397">
<ele>50.0</ele>
<time>2024-01-01T00:00:00Z</time>
</trkpt>
每个点都带经纬度、海拔、时间。做轨迹对齐时,时间戳是关键字段。我曾经处理过一批GPX数据,发现时间戳格式不统一,有的用本地时间,有的用UTC,差点把对齐结果搞乱。
| 格式 | 适用场景 | Python库推荐 |
|---|---|---|
| GeoJSON | Web地图、API交互 | geojson, shapely |
| Shapefile | 传统GIS、空间分析 | geopandas, pyshp |
| KML | Google Earth、三维可视化 | pykml, fastkml |
| GPX | GPS轨迹、运动记录 | gpxpy |
1.2 坐标系与投影
坐标系这块,是地图数据里最容易踩坑的地方。我把它分成三个层次来讲。
WGS84 —— 地球的"基准尺"
WGS84是全球通用的地理坐标系,GPS卫星用的就是它。坐标范围:经度-180到180,纬度-90到90。说白了,它是地球的"原始坐标系",所有其他坐标系都是基于它变换来的。
GCJ02 —— 中国的"加密版"
GCJ02是国测局坐标系,也叫火星坐标系。它在WGS84基础上加了非线性偏移,偏移量大概在几十米到几百米不等。为什么会有这个?嗯,这是国家规定,所有在中国境内公开出版的地图都必须用GCJ02。
BD09 —— 百度的"二次加密"
BD09是百度在GCJ02基础上又加了一层加密。偏移量更大,而且是非线性的。如果你用百度地图API,拿到的坐标就是BD09。
为什么会这样?说白了,就是各家地图厂商为了合规,在原始坐标上做了不同的处理。你想想看,如果三个坐标系混在一起,轨迹对齐肯定出问题。
1.3 地图数据来源与获取
数据从哪来?我分几个渠道给你说说。
开放数据平台
- OpenStreetMap:全球最大的开源地图数据。路网、建筑、POI都有。我经常用它做底图数据。
- Natural Earth:全球矢量地图数据,适合做小比例尺地图。
- 国家地理信息公共服务平台:国内官方数据源,但获取门槛较高。
API获取
高德、百度、腾讯都提供地图API。你可以通过API获取POI、路线规划、实时交通等数据。不过要注意调用频率限制和收费问题。
自己采集
用手机APP记录GPS轨迹,导出GPX文件。或者用Python写个脚本,定时采集位置数据。我在做个人运动轨迹分析时,就是自己跑完步导出GPX,然后写代码做可视化。
知识体系总览
下面这张图,把本章的核心知识点串起来了。你一看就明白各个概念之间的关系。
这张图把数据格式、坐标系、数据来源三个模块串起来了。你注意看底部的红色总结——先统一坐标系,再处理数据格式,最后做轨迹对齐。这个顺序千万别搞反。
好了,第一章的内容就到这里。数据格式和坐标系是后面所有课程的基础,建议你动手试试:下载一份GPX数据,用Python读出来,看看坐标值,再试试不同坐标系之间的转换。实践出真知。
可可精品资料库