3. 原始数据获取:把真实世界“装”进电脑

好,咱们进入第三章。上一章聊了空间图谱的底层逻辑,这回该上手了——数据从哪来?

说实话,数据获取是整个项目中最“脏”最累的活,但也是地基。地基不稳,后面建模、分析、可视化全是空中楼阁。我个人习惯,在开始任何空间图谱项目前,先用一周时间专门做数据源调研。为什么?因为不同类型的原始数据,获取方式、精度、更新频率、法律合规要求,完全不一样。

3.1 矢量数据:点、线、面里的世界

矢量数据,说白了就是用点、线、面来描述地物。一个路灯是点,一条马路是线,一个小区是面。这类数据来源主要有两个:OpenStreetMap(OSM)和政府部门。

3.1.1 OpenStreetMap:众包的力量与坑

OSM是个宝藏。全球免费、开放、每天都在更新。我做过一个城市应急响应的项目,用的就是OSM的路网数据。但有个问题——质量参差不齐。在欧洲主要城市,OSM的精度甚至比官方数据还高;但在某些偏远地区,可能连条像样的路都没有。

获取OSM数据,最常用的方式是Overpass API。举个例子,我想获取北京五环内所有的医院点位:

[out:json];
area["name"="北京"]->.a;
(
  node["amenity"="hospital"](area.a);
  way["amenity"="hospital"](area.a);
);
out body;
out skel qt;
一点小建议: 别一次性查全中国数据,OSM服务器扛不住,你也等不起。按行政区划或地理范围分批拉取,我一般按“区县级”为单位做切片。

除了Overpass API,还可以用Geofabrik的离线下载。他们提供按国家/地区的每日更新数据包,格式是.pbf或.osm。我个人的工作流是:先用Geofabrik拉取全量数据,再用osmium或osmosis做空间裁剪。

# 下载北京市的OSM数据(从Geofabrik中国区域包中裁剪)
osmium extract --bbox 116.0,39.4,117.0,40.2 china-latest.osm.pbf -o beijing.osm.pbf

3.1.2 政府部门数据:权威但麻烦

政府的矢量数据,比如国土部门的地籍图、规划局的控规图、统计局的行政区划边界,这些才是你在正式报告里敢引用的“铁证”。但获取难度嘛……嗯,你懂的。

国内主流的官方数据平台包括:

  • 自然资源部标准地图服务:提供省、市、县级行政边界,审图号合规。
  • 国家基础地理信息中心:1:100万、1:25万等比例尺的DLG(数字线划图)。
  • 各地政务数据开放平台:比如上海、深圳、贵阳,会开放POI、路网、公交站点等数据。

我曾经为了拿一个城市的规划路网数据,跑了三次规划局。第一次去,人家说流程不对;第二次去,要填三个表;第三次去,终于拿到了……一个带水印的PDF。所以我的建议是:能走线上申请就走线上,留好回执;线下拜访时,带齐单位介绍信和项目说明。

注意: 政府数据往往有使用限制。比如“仅用于学术研究,不得用于商业用途”。如果你要做商业项目,一定先确认数据授权协议。我曾经见过一个团队因为用了未授权的官方数据,被索赔到项目直接黄了。

3.2 栅格数据:影像与高程的世界

栅格数据,就是像素矩阵。每个像素代表一个数值——可能是地表反射率、高程值、或者分类标签。主要两大类:遥感影像和DEM(数字高程模型)。

3.2.1 遥感影像:看得见的“底图”

遥感影像的获取途径,取决于你要什么分辨率。

分辨率级别 典型数据源 空间分辨率 成本
中低分辨率 Landsat 8/9 (USGS) 30m (多光谱) 免费
中分辨率 Sentinel-2 (ESA) 10m (可见光/近红外) 免费
高分辨率 高分系列 (中国)、WorldView (商用) 0.5m ~ 2m 昂贵

我个人最喜欢用Sentinel-2做项目初期分析。10米分辨率,10天重访周期,关键是完全免费。获取方式可以用ESA的Copernicus Open Access Hub,或者用Python的sentinelhub库:

# 使用SentinelHub获取指定区域和时间范围的影像
from sentinelhub import WmsRequest, BBox, CRS

bbox = BBox([116.2, 39.8, 116.6, 40.1], crs=CRS.WGS84)
request = WmsRequest(
    layer='TRUE-COLOR-S2L2A',
    bbox=bbox,
    time='2024-09-01',
    width=512, height=512
)
images = request.get_data()
经验之谈: 做时序分析时,别只看单期影像。Landsat和Sentinel-2都有长时间序列存档。我做过一个城市扩张分析,拉了10年的Sentinel-2影像,2015年到2024年每季度一张,共40期。分析完,城市边界变化的轨迹一清二楚。

3.2.2 DEM:地形的骨架

DEM就是数字高程模型。你要是做洪水淹没分析、视线分析、坡度坡向分析,这玩意儿是必备。

主流的免费DEM数据源:

  • SRTM:航天飞机雷达数据,30m分辨率,全球覆盖。虽然采集于2000年,但地形变化慢,至今仍是主力。
  • ASTER GDEM:30m分辨率,覆盖北纬83°到南纬83°。比SRTM多了高纬度地区。
  • ALOS World 3D:日本JAXA产品,30m和5m两个版本。5m版本是目前可免费获取的最高精度全球DEM。

获取方式,SRTM和ASTER GDEM可以从USGS EarthExplorer下载。ALOS数据要从JAXA的网站申请。下载下来的通常是GeoTIFF格式,直接可以用GDAL处理:

# 查看DEM基本信息
gdalinfo srtm_39_03.tif

# 重投影到EPSG:3857(Web墨卡托)
gdalwarp -t_srs EPSG:3857 srtm_39_03.tif srtm_39_03_3857.tif

# 计算坡度
gdaldem slope srtm_39_03.tif slope_39_03.tif

3.3 本章核心:数据获取的完整图谱

说到这儿,我把矢量数据和栅格数据的来源、用途、获取方式梳理成一张图。你一看就明白整个数据获取的脉络:

数据获取核心图谱 原始数据获取 矢量数据 栅格数据 OpenStreetMap 众包 / 全球 / 免费 政府部门 权威 / 合规 / 流程长 遥感影像 Landsat / Sentinel / 高分 DEM SRTM / ASTER / ALOS 💡 矢量数据描述“是什么”(地物的位置和属性),栅格数据描述“怎么样”(地表的状态和高度)。 两者结合使用,才能构建完整的空间图谱。 常用获取工具 Overpass API / Geofabrik · USGS EarthExplorer · Copernicus Open Access Hub · JAXA ALOS GDAL · osmium · sentinelhub · requests

数据获取是第一步,也是最容易“翻车”的一步。我的经验是:先花一天列出所有可能的数据源,评估它们的精度、时效性、获取成本和合规风险,再做选择。别等代码写完了才发现数据不能用——那时候改起来,成本是当初的十倍。好,这章就到这,拿数据去吧。