Overture Maps — 全球开放矢量地图的许可拼盘

六个主题、十二种要素类型,一张许可各不相同的地图

来源 Overture Maps Foundation(Linux 基金会联合开发基金会下属) url: https://overturemaps.org/发布时间: 2026-10-29最后更新: 2026-10-29 阅读 6
Overture Maps — 全球开放矢量地图的许可拼盘

信息速览

数据集名称Overture Maps — 全球开放矢量地图的许可拼盘
数据类型GeoParquet 云原生,六主题十二型,月度发布,ODbL 与 CDLA 分层,GERS 稳定 ID,需注册
规模不适用(全球矢量地图要素,无个体记录;空间单元为点、线、面要素)
接入方式Overture Maps Foundation(Linux 基金会联合开发基金会下属) url: https://overturemaps.org/
AI 就绪度

Overture Maps 是当前少有的、以「全球」为单位的开放矢量地图。它把 OpenStreetMap 的骨架、商业地图公司的路网、机器学习的建筑轮廓、各国政府的地址库拼到同一套模式里,再按月重新发布一次。它解决的是「同一栋楼在五个数据源里有五种写法」这件事,而不是「再多一幅卫星图」。

它的性质由三个数字定调:一栋建筑物、一条道路的一段、一个地名的点位。这些东西加起来是二十多亿个矢量要素,存成 GeoParquet,躺在 AWS 与 Azure 的公开前缀里,用一个 SQL 就能查。

但这个数据集最容易翻车的地方不在规模,而在许可。它不是一个「开放数据集」,而是四五个许可叠在一起的拼盘:底图、建筑、行政区划、交通沿 OpenStreetMap 的 ODbL,地点是 CDLA-Permissive,地址逐条看上游。用错主题,商业闭源的边界就变了。一屏速览见下表。

项目 数值 来源
当前数据版本 2026-10-21.0 官方发布日历
对应 schema 版本 v2.0.0 同上
主题数 6 文档云存储页的主题映射表
要素类型数 12 同上
首次公开数据发布 2023-10-19(alpha) 发布历史
最近一次大版本跨入 GA 2024-07-22 该版发布说明
存储格式 GeoParquet,另有 PMTiles 瓦片 云存储页
托管位置 AWS S3 与 Microsoft Azure Blob 每版发布说明
访问门槛 免注册,公开前缀直读 云存储页
公共保留窗口 最近两个月 发布日历的数据保留政策
许可 按主题分层,见 §4 各主题指南的 Sources 段

§1 速览:它是什么,也不是什么

§1.1 一句话定义

Overture Maps 是一份按主题分区、按月重发、许可分层、以矢量要素为单位的全球开放地图。

它不是一张能被渲染出来的图,不是一套影像,也不是一份统计表。它是一堆可以被 SQL 扫描的点、线、面和它们身上的属性列。

§1.2 它最不可替代的一件事

如果换个问法:这份数据如果消失,世界上会缺什么?

缺的不是「地图数据」。OpenStreetMap 本身就是一份极大的开放地图,全世界几百万志愿者在维护它。缺的是把多个来源的地物对齐到同一条身份线上的那套机制。

同一家便利店,在 Meta 的库里有一行记录,在 Foursquare 的库里有一行记录,在 OpenStreetMap 里是一个节点,在 TomTom 的道路数据里根本不出现。它们在同一个街区,名字拼写不同,坐标差几十米。想把它们合成一件事,就得两两做空间连接,做完还要在白名单里人工核对,每次任何一方更新就得重来一遍。

Overture 把这项工作挪到了上游:它为每个要素发一个稳定标识,叫 GERS ID,登记在一份注册表里,记录它第一次出现、最后一次出现、最后一次变更的时间。你把自有数据与 Overture 匹配一次,之后按标识连接即可,月度更新靠变更日志跟进。这个故事在官方 GERS 文档里被写成一句话:把连接的工作前置,而不是每对数据集各做一次。

这条主线决定了它的一切设计:为什么要有六个主题而不是一个大文件,为什么每版要发变更日志与桥接文件,为什么身份标识从 H3 哈希换成了纯随机 UUID。

这里要补一句澄清。上面说的「同一家便利店有五行记录」,指的是一次性匹配的难题。Overture 给出的解法不是「让所有来源都变成同一行」,而是「让所有来源都指向同一个标识」。两件事的差别很关键:前者要求数据本身被合并成一份,后者只要求数据在身份上可对齐,各自的属性仍然分开存。因此 Overture 的每个要素都带一个 sources 数组,记录它由哪几个上游记录贡献而来,以及每条上游记录的时间戳与置信度。融合只发生在几何与少量核心属性上,其余字段保持各自的来源痕迹。

这套设计也解释了为什么它的数据形态是「宽列 + 嵌套结构」而不是「一张大宽表」。一栋楼可能有三种来源,一条路可能有五段限速,一个地点可能有三套分类,这些都不适合压成定宽列。数据模型的选择不是审美偏好,是被身份机制逼出来的。

§1.3 三十秒决策卡:你的处境,它能帮你什么

你的处境 它能帮你什么 需要注意
要一个不依赖 Google 的地图底图 Base 主题的水陆与土地覆盖,Transportation 的路网 两主题都沿 ODbL,商用须署名并回授衍生库
要训练一个 POI 分类或地址解析模型 Places 的八千八百多万个点位,带分类体系与置信度 无 ODbL 传染性,但如果与 OSM 融合则仍可能触发
要把自己的客户表挂到世界地图上 用 GERS 匹配一次,之后按 UUID 连接 地址主题不进注册表,别拿 address 的 id 当稳定主键
要做行政管理与人口普查的空间连接 Divisions 的三类要素与层级数组 国家级覆盖好,县级以下的 spotty
要一份全球建筑轮廓做城市形态分析 Buildings 的二十五亿条轮廓,含建筑部分 多数来自机器学习,精度不均
要一份全球路网做导航试验 Transportation 的段与连接点,含限速与通行限制 属性是线性引用的,不要按单值读
要街景或卫星影像 给不了,这里没有像元 影像请走遥感数据集

§1.4 不适合谁

不适合把「开放」理解成「无义务」的人。四个主题沿 ODbL,一旦你把 Overture 的底图与自有数据合成为一个可公开使用的数据库,衍生数据库就可能需要以 ODbL 回授。这条约束在商业闭源产品里是硬边界,不是提示。

也不适合把它当成「全球最全的 POI 库」直接拿去评估市场容量。Places 的主要来源是 Meta,覆盖率与门店真实存在之间不是等号,官方在指南里也把它描述为「多来源融合的协调结果」,不承诺穷尽某个国家或某条街的每一家店。

不适合需要逐要素许可标记的自动化合规流水线。Overture 的许可落在主题这一级,不是每个要素一个字段。如果你的系统需要按要素类型自动判定许可,得自己建一张主题到许可的映射表,因为数据里读不到这个信息。

不适合把它当作历史数据。它每月重发,但公开发布的只有最近两个月。想做「过去三年的路网演化」,必须在每个版本发布时自行留存,事后再补是不可能补回来的。

§2 数据构成:六个主题怎么切,十二种要素怎么分

§2.1 全量规模

按 2026-10-21.0 这一版的发布说明,各主题的要素数量如下。数字取官方发布的表格,未做核对性重算。

主题 要素类型 要素数 说明
Buildings building 二十五亿三千多万 含七个来源,OSM 优先级最高
Buildings building_part 四百四十八万余 仅来自 OSM
Places place 八千八百多万 本版增长 8.55%
Addresses address 四亿七千五百多万 覆盖 41 个国家
Base infrastructure 一亿五千八百多万 桥梁、机场、电力线等
Base land_cover 一亿二千三百多万 来自 ESA WorldCover
Base land 七千六百多万 来自 OSM 海岸线取反
Base water 六千六百多万 来自 OSM
Base land_use 五千六百多万 来自 OSM 的 landuse 标签
Base bathymetry 四十万余 来自 ETOPO1 与 GLOBathy
Divisions division 四百七十万余 点
Divisions division_area 一百零八万余 面
Divisions division_boundary 八万七千余 线

交通主题的数量按要素与长度两种口径给出,因为一条道路的中心线被切成多段之后,「多少条路」本身没有意义。

来源 要素数 总长度(公里)
OpenStreetMap 七亿六千六百万余 九千五百余万
TomTom 一千一百余万 二百零三万余

按子类型拆长度,公路占九千三百多万公里,铁路二百八十八万余公里,水路五十九万余公里。三者的量级差两个数量级,直接把「交通」当成均匀的一类来处理会得到荒谬的平均值。

这些数字之间还有一个不显眼的比例关系,值得单独提出来。建筑要素数约等于地点要素数的一千三百倍,地址要素数不到建筑的五分之一。这不是数据缺陷,而是三种对象的物理数量本来就不在同一个量级:一栋楼可以容纳几十家店,一个地址通常对应一栋楼或一套房。把这三者放进同一张统计表比较「完备度」会得到误导性的结论——它们在真实世界里的分母本来就不同。

另一组数字更值得注意:交通主题里 OpenStreetMap 来源的要素数是七点六亿,TomTom 来源是一千一百多万,相差近七十倍,但两者的总长度相差不到五十倍。差值来自两个来源对「一条线段能有多长」的定义不同:TomTom 的路网向两端延伸得更远,OSM 在细分道路上的切分更碎。这也解释了为什么融合后不能简单按要素数相加来估算覆盖率。

§2.2 主题的切法不是按数据类型,是按「谁来维护」

六个主题看起来像按几何形状切的,其实不是。Base 里同时有点、线、面;Divisions 三类各有各的几何。真正的切分逻辑是上游来源与融合方式:

  • Base 是单源直通主题。每种要素类型只来自一个来源,OSM 的搬 OSM,水深搬 ETOPO1 与 GLOBathy,土地覆盖搬 ESA WorldCover。没有匹配,没有融合。官方明说「no matcher and no conflation process」。
  • Buildings 是多源融合主题。七个来源,按 IoU 阈值 0.5 做几何匹配,OSM 优先,其余按质量排序填补。
  • Places 是多源融合主题,但一个 OSM 要素都不含。这是它与其余主题最关键的差别,直接决定了许可。
  • Transportation 是多源融合主题,OSM 加 TomTom,通过一个叫 Orbis 的图做匹配。
  • Divisions 是 OSM 与 geoBoundaries 的协调,去重后按层级组织。
  • Addresses 是多源拼接,一百七十五个以上来源,逐条保留,不做属性合并。

这个切法解释了一个常常被忽略的事实:Base 的要素不在 GERS 注册表里。它是单源直通,没有跨源匹配,因此不需要身份对齐,Overture 也不为它承诺稳定性。它的 id 是确定性 UUID,合法但不是 GERS ID。

同样的逻辑可以解释另一个现象:为什么 Divisions 只有三类要素,却是整个数据集里结构最复杂的主题。因为行政区划不是一个平面上的多边形集合,而是一棵树。同一个地理位置同时属于国家、大区、县、市、社区,每一级都有自己的边界、自己的名称、自己的上下级关系。把树拍平成三层要素,用 id 链把它们串起来,是这套模式的必然选择。

§2.3 一次空间查询长什么样

官方推荐的最小路径是用 DuckDB 直读云上的 GeoParquet,只取需要的行。以下以当前版本为例,查询费城附近名称含 wawa 的地点。

--# 载入空间与对象存储扩展
LOAD spatial;
LOAD httpfs;

--# 访问 AWS 上的公开前缀,无需凭证
SET s3_region = 'us-west-2';

COPY (
  SELECT
    id,
    names.primary AS name,
    taxonomy.primary AS category,
    geometry
  FROM read_parquet(
    's3://overturemaps-us-west-2/release/2026-10-21.0/theme=places/type=place/*',
    filename=true, hive_partitioning=1)
  WHERE
    names.primary ILIKE '%wawa%'
    AND bbox.xmin BETWEEN -76.5 AND -74.5
    AND bbox.ymin BETWEEN 39.5 AND 40.5
) TO 'wawa_stores.geojson' WITH (FORMAT GDAL, DRIVER 'GeoJSON');

这段查询有三个细节值得单独记住。第一,过滤用的是 bbox 列而不是 geometry,因为 bbox 是预先算好的结构体,能在扫描阶段下推,而几何判定要等读出行之后才算。第二,hive_partitioning=1 让 theme= 与 type= 从路径推断成列,否则这两列不会出现。第三,路径里的 * 会展开成该目录下所有分区文件,量级很大,不加过滤直接 SELECT * 会拖垮本地内存。

§2.4 版本与路径的对应关系

路径的结构是固定的三段:release/<版本>/theme=<主题>/type=<要素类型>/*。版本是带日期的 yyyy-mm-dd.x,x 是同一日期的补丁号。

这个结构意味着两件事。其一,跨主题的联合查询必须写两条路径,没有「全主题视图」这样的对象。其二,版本号写死在 SQL 里会让脚本在两个月后失效,因为公共存储只留最近两个月。官方提供的替代方案是 STAC 目录,根目录里有一个 latest 字段指向当前版本。

--# 从 STAC 根目录读当前版本号,避免硬编码
SELECT latest FROM 'https://stac.overturemaps.org/catalog.json';

还有一个更省事的做法:官方提供 latest.ddb,一个带好视图的 DuckDB 文件,每个要素类型一个视图,挂载后直接按名字查。缺点是它跟着最新版走,要复现某一次实验必须回到写死版本号的路径。

LOAD spatial;

--# 挂载后每个要素类型对应一个视图
ATTACH 'https://stac.overturemaps.org/latest.ddb' AS overture (READ_ONLY);

SELECT count(*) FROM overture.place;

§2.5 与遥感数据集的根本区别

这一节是给从影像方向过来的人看的。

遥感数据集给的是栅格:一个矩形的像元矩阵,每个像元有若干波段值,坐标藏在 GeoTIFF 的仿射变换参数里。EuroSAT 的瓦片就是 64×64 的像素方块。你关心的是像元。

Overture 给的是矢量:一个点、一条线、一个多边形,几何存成 WKB 二进制,属性存在并排的列里。你关心的是要素。一栋建筑是一个多边形,不是一个 30×30 米的像元块。它的边界是画出来的,不是拍出来的。

两者不能互相替换,但可以互相使用。用 Buildings 的轮廓去裁 Sentinel-2 瓦片,就能得到带建筑面积标注的训练样本;用 Base 的水系面去过滤卫星影像里的水体误判;用 Divisions 的行政边界去做空间交叉验证,防止相邻行政区的样本串味。反过来,卫星影像可以校验建筑轮廓是否已经停产、是否新建。这是两种数据在同一个流水线里的正常关系。

这个区别也解释了为什么 Overture 不发布「影像」:它的存在意义是把地物抽象成可连接的实体,而影像恰恰是不可连接的。

还有一层差别在数据结构上。遥感瓦片的信息密度是均匀的:每个像元都有一个值,没有空白。矢量要素的信息密度是不均匀的:一栋楼有面积、有高度、有来源,旁边一片空地可能什么都没有。用矢量数据训练模型时,「没有要素」本身就是一个有意义的信号,而栅格数据里它只是个背景值。这个差别在处理稀疏地物(比如道路、河流)时会立刻显形:矢量给的是线本身,栅格给的是线周围的一圈像元,后者的标签噪声要大得多。

第三层差别在时间。遥感数据的时间由成像任务决定,同一地点可能一周一次,也可能一年一次,且没有规律。Overture 的时间由发布日历决定,全球同步、每月一次。这意味着做时空分析时,两边的时间轴无法直接对齐:一个是稀疏的观测时刻,一个是规则的发布时刻。把两者按「同一时刻」合并,是一种虚构。

§3 拿到手:三种入口与两种字段结构

§3.1 三条路径,按场景选

官方给出三条主路径,外加若干镜像。

路径 适合 代价
DuckDB 直读云上 GeoParquet 做分析、写 SQL、只取一小块 需要本机能连 S3 或 Azure
Python 命令行工具 overturemaps 按包围盒下载成 GeoJSON 或 Parquet 需要装包,一次只取一个要素类型
浏览器 Explorer 看一眼、点一个要素、导出一小块 不能批处理,不能写查询

三条路径都免注册。AWS 的公开前缀支持无签名访问,命令行工具用 --no-sign-request;Azure 侧用 AzCopy 直连。

批量抓取的典型命令如下,注意这是个完整拉取,不要对全主题执行。

#-- 无凭证拉取 Base 主题下 infrastructure 类型的一个版本
aws s3 cp --no-sign-request --recursive \
  s3://overturemaps-us-west-2/release/2026-10-21.0/theme=base/type=infrastructure/ .

按区域取数则用 Python 客户端,只传包围盒内的要素,其余不下载。

pip install overturemaps

#-- 取波士顿市中心一小块建筑轮廓,输出 GeoJSON
overturemaps download \
  --bbox=-71.068,42.353,-71.058,42.363 \
  -f geojson \
  --type=building \
  -o boston_buildings.geojson

§3.2 字段结构:顶层列与嵌套结构并存

Overture 的每一行不是一个扁平的表格行。它的列有两类:一类是扁平的原语列,比如 id、bbox、version;另一类是嵌套的结构列,比如 names、sources、categories、taxonomy。

嵌套结构在 DuckDB 里用点号取,在 Athena 里用箭头取。这是新手最常撞的一道墙:SELECT names FROM ... 返回的是一整个结构体,而不是名字。

字段 层级 典型取值 常见误用
id 顶层 UUID 字符串 以为前缀有意义(2025-06 前才有)
bbox 顶层结构 xmin/ymin/xmax/ymax 用 geometry 过滤,慢一个数量级
names.primary 嵌套 「星巴克」 直接比较 names,永远不相等
sources 嵌套数组 dataset、record_id、update_time 当成单值字段
taxonomy.primary 嵌套 分类路径字符串 和旧版 categories 混用
geometry 顶层 WKB 二进制 不载 spatial 扩展就存成 blob

§3.3 主键选择:哪个 id 能拿来当稳定键

这是使用这份数据时最需要想清楚的一件事,比选哪个主题还重要。

主题与类型 id 性质 是否进 GERS 注册表 能否跨版本追踪
Place GERS ID 是 能,官方承诺稳定性
Building GERS ID 是 能
Building part 确定性 UUID 否 不能
Division 三类 GERS ID 是 能
Segment、Connector GERS ID 是 能
Base 全部类型 确定性 UUID 否 不能
Address 不进注册表 否 不能,属性一变就换 id

这个表的意义在于:如果你打算把 Overture 当成一份会每月刷新的基础表,只有进注册表的那几类可以按 id 做增量合并,其余都应当按几何或业务键重新匹配。

还有一个容易漏掉的细节:GERS 注册表的覆盖是逐要素类型的,不是逐主题的。Buildings 主题里 building 有 GERS ID,building_part 没有;同一个主题内两种要素的稳定性承诺不同。写增量同步代码时要按类型分支,不能按主题分支。

§3.4 变更日志与桥接文件的用法

每版发布都带三个附属产物。变更日志按要素记录四种状态:新增、删除、数据变化、未变。桥接文件把上游的记录号映射到 GERS ID,例如某个 OSM 的 way id 对应哪个 Overture 建筑。

这两类文件解决的是不同的痛点。变更日志回答「我上次匹上的那个要素这次还在不在」,桥接文件回答「我已经有 OSM 数据了,能不能不重新匹配就直接拿到 Overture 的标识」。两者都不在 STAC 目录里,路径要单独记。

变更日志里有四种状态,处理它们的方式不同。标记为「未变」的可以直接沿用上版的属性,省掉重新计算;标记为「数据变化」的要检查哪些列变了——官方会记录变更列的清单,只取变化的列就够了;标记为「新增」的要重新跑一遍匹配;标记为「删除」的要从下游产物里摘掉,否则会留下悬空的引用。

桥接文件覆盖的范围也有边界。官方说明它只对一对一的匹配提供,多对一或多对多的情形不给。这一点直接影响「用 OSM 反查 Overture」的可行性:如果你手上有一条 OSM 的 way 记录,通过桥接文件未必能直接拿到 Overture 的 ID,因为这条 way 可能对应多栋融合后的建筑。

§3.5 用 Explorer 做一次人工核验

在写任何代码之前,先用浏览器看一眼数据的实际形态,能省掉大量试错。

Explorer 的用法很直接:拖动到目标区域,关掉不需要的图层,点一个要素,右侧会显示它的全部属性。这份属性视图里能看到 id、sources、names 与各分类字段的原样结构,等于是一份免费的字段字典。

它的局限也要提前知道。官方明说 Explorer 用的是 PMTiles 矢量瓦片,这些瓦片仅供检视,图层与属性可能在任何一版里变化,不对生产环境做承诺。所以用它来确认「某个字段叫什么、长什么样」是可靠的,用它来确认「全量有多少条」是不可靠的——瓦片覆盖的要素是经过层级抽稀的。

§4 许可分层:全篇最关键的一节

§4.1 三个许可族,不是一个大许可

把 Overture 称作「开放地图数据」在事实层面对,在合规层面远远不够。它内部至少叠着三个许可族:

  1. ODbL 1.0:开放数据库许可,带传染性。底图、建筑、行政区划、交通四个主题沿它发布,因为它们都含 OpenStreetMap 数据。
  2. CDLA-Permissive 2.0 与 Apache 2.0:宽松许可,无传染性。地点主题沿它发布,因为它一个 OSM 要素都不含。
  3. 逐条适用:地址主题不设统一许可,每个上游数据集带自己的条款,署名与义务要按来源清点。

还有一个补充来源的许可要单独看:Base 里的土地覆盖来自 ESA WorldCover,水深来自 ETOPO1 与 GLOBathy。这两个来源本身不是 ODbL,但整个 base 主题因为含 OSM 数据而以 ODbL 发布。官方在 Base 指南里写得很直接:因为它包含 OpenStreetMap 数据,base 主题以 ODbL 发布。

§4.2 逐主题许可表

主题 许可 是否含 OSM 传染性 主要义务
Base ODbL 是(land、water、infrastructure、land_use) 有 署名,衍生数据库回授
Buildings ODbL 是,且优先级最高 有 同上
Divisions ODbL 是,主源 有 同上
Transportation ODbL 是,主源 有 同上
Places CDLA-Permissive 2.0 + Apache 2.0 否 无 保留署名与变更说明
Addresses 逐来源适用 否 视来源 逐来源清点

地点主题内部的来源分布也不统一。按 Places 指南的表,Meta 贡献了六千万余条、CDLA-Permissive 2.0;BrightQuery 一千五百多万条、CDLA-Permissive 2.0;Foursquare 三百七十余万条、Apache 2.0;AllThePlaces 一百九十多万条、CC0-1.0。混合结果就是主题级的双许可。

这张表要横着读,也要竖着读。横着读是按主题看义务:四个 ODbL 主题的义务一致,都是署名加回授;Places 是两个宽松许可叠加,义务是署名与变更说明;Addresses 没有统一答案。竖着读是按「是否含 OSM」看:含 OSM 的四个主题全部统一到 ODbL,不含 OSM 的两个主题各自分散。这条规律比逐个背表更省事:先问这个主题里有没有 OSM,再问有几个其他来源。

地址主题的分散程度最需要警惕。它的一百七十五个以上来源里,既有 OpenAddresses、AddressForAll 这样的开放聚合组织,也有各国政府发布的开放数据,还有市政部门的数据门户。这些来源的许可从公共领域到要求署名都有,且有一部分带「不得用于商业」的限制。官方明确说这个主题「carries a variety of source licenses rather than a single overall license」,所以任何把地址数据商用的人,都必须先把自己的上游来源清单拉出来逐条核对,而不是看主题级的一句话。

§4.3 ODbL 到底约束什么

ODbL 的传染性不是「你用了就得开源」。它约束的是衍生数据库:如果你把 ODbL 数据与自有数据合成为一个新的数据库,并对公众提供,那么这个新数据库的核心部分需要以 ODbL 提供。与之并行的是「集体数据库」概念:如果你的自有数据与 ODbL 数据只是并列存放、分开分发,两者之间的分界清楚,那么自有部分不必回授。

这个分界在实操里非常难画。把 Overture 的建筑轮廓与自家的楼宇能耗表按 id 连接,导出一份「楼宇能耗地图」并对外提供服务,很有可能被认定为衍生数据库。把两者分别提供给不同团队,内部各自使用,边界就清楚得多。

官方的做法是给出署名模板而不是法律意见。Explore 工具用了含 OSM 的数据,所以在页面上写了 © OpenStreetMap contributors, Overture Maps Foundation。这个串就是遵守 ODbL 署名义务的最小形式。

ODbL 还有一条常被忽略的义务:保持开放。如果你把衍生数据库以技术手段限制(比如只能通过你的 API 访问、不能批量导出),就违反了「以同样许可提供」的要求。这一条对把地图封装成 SDK 分发的产品尤其敏感——用户必须能拿到可用的原始数据,而不只是渲染好的瓦片。

§4.4 地点主题的边界,以及它为什么会破

Places 是这份数据里唯一「干净」的部分:官方明说它不含 OpenStreetMap 数据,也不带 ODbL 的 share-alike 义务。这是它能在商业产品里直接用的前提。

但这个干净是有条件的。官方在 Places 指南里加了一条提醒:把 CDLA-Permissive 2.0 的数据与 OpenStreetMap 连接是被允许的,但如果结果构成衍生数据库,仍可能需要以 ODbL 发布,具体见 OSM 的集体数据库指引。

这条提醒出现在 Places 指南的查询示例之前,而那个示例恰好就是把 Overture 的餐厅数据与 OSM 的餐厅节点做去重合并。也就是说,官方一边说 Places 没有传染性,一边在你最想做的事上放了一个风险提示。这不是自相矛盾,而是许可本身的性质:干净的输入可以做出脏的输出。

§4.5 一个常见的误判

把「Overture 采用 ODbL」和「Overture 全部是 ODbL」当成一回事,是使用这份数据时最常见的错误,并且它会往两个方向出错。

一个方向是过度保守:因为听说 ODbL,连 Places 都不敢碰,绕开了一份实际上没有传染性、且是全文最密集 POI 数据的输入。

另一个方向是过度乐观:因为 Places 是宽松许可,就默认整个 Overture 都可以直接塞进商业产品,最后在底图或建筑主题上踩线。

两种错误的成本不对称。过度保守损失机会,过度乐观损失合规。所以在任何用到 Overture 的项目里,第一步不该是选主题,而该是列出你实际会读取的要素类型,逐类对照许可表,再决定哪些能进产品、哪些只能进内部分析用。

§4.6 许可分层如何影响 AI 训练

对模型训练而言,数据许可的传染性在设计阶段就要考虑,而不是训练完再补。

若训练出的模型只学参数、不复制数据,通用观点是不构成衍生数据库,ODbL 的传染性不会被触发。但这条判断在不同法域的解释并不一致,且近年关于训练数据许可的判例在变化,不能当成定论。

真正会触发问题的是分发衍生数据,例如把「Overture 建筑 + 自有属性」的合并结果打包成一份新数据集对外发布,或者把合并结果内嵌进一个可被用户下载的产品。此时数据许可证与实际交付物一致,是唯一安全的做法。

§4.7 一张自查清单

在把 Overture 的任何数据放进产品之前,按顺序问五个问题。

第一,我读了哪几种要素类型?把它们逐个写出来,不要写「读了 Overture」。要素类型是许可的最小单位。

第二,这几种类型分别属于哪个主题?主题是许可的判定层级。同一要素出现在不同主题里的情况不存在,一个要素类型只属于一个主题。

第三,其中有没有 ODbL 的?如果有,最终产物的许可就默认按 ODbL 规划,剩余的问题只是边界怎么划。

第四,我的产物会公开吗?公开包括两种形式:作为独立数据集提供,或内嵌进一个用户可以下载的产品。只是内部使用不触发传染性。

第五,我能不能把 ODbL 部分与自有部分分开交付?如果能,分开交付是最省心的方案;如果不能,就按合并后的整体按 ODbL 处理。

这五个问题花不了五分钟,但能挡掉大多数事后补救。

§5 质量层:它好在哪,坏在哪

§5.1 身份连续性:GERS 的真实承诺

GERS 的价值不在「有 id」,而在「承诺这个 id 下次还在」。官方的做法是把注册表当唯一凭据:一个标识是不是 GERS ID,不能从字符串本身看出来,必须去注册表查它是否在列。

这个设计是为了修正一次教训。在 2025-06-25.0 之前,标识是十六进制串,里面编了 H3 网格单元和主题字节。结果是当实体跨网格移动或换主题时,标识会碰撞。那一版之后全部换成 128 位随机 UUID,字符串里不再携带任何含义。

代价是:在 2025-06-25.0 之前抓取的 id 全部失效,无法对上新数据。同时,用 id 前缀做空间过滤从来就不可靠,应当改用 bbox 列。

§5.2 覆盖的不均匀

Divisions 的官方说明承认了分层覆盖的落差:国家、属地、大区、县这四级是全球覆盖,但县以下的 locality、borough、neighborhood、microhood 虽然应该存在于每个国家,实际覆盖率「often spotty」。macroregion 与 macrocounty 两个层级存在但当前被误分类到其他子类型。

Buildings 的官方说明承认机器学习来源的精度问题,且明确指出这一问题在「全球南方」最明显,原因是那里机器学习来源的建筑占比最高。

这两条共同指向一个判断:Overture 的「全球」在顶层是真的,在细粒度上是不均匀的,且不均匀的方向与数据基础设施的分布一致。

§5.3 融合的取舍

Buildings 的融合逻辑值得单独说,因为它是理解这类数据集的一把钥匙。

匹配按几何 IoU 进行,阈值 0.5。融合时 OSM 优先级最高,其次是 Esri 的社区数据,然后是政府来源,最后是机器学习来源。官方给出的效果描述是:在美墨边境看,Esri 与 OSM 的建筑呈大片块状,Google 与 Microsoft 的建筑混合成一片。这就是优先级在空间上的可视化。

这个设计的意图很明确:让社区的人工编辑始终压过机器推断,且每一次更新都重新压过一遍。官方甚至把这个当作一种维护接口:如果发现某栋建筑有问题,去 OSM 里改它,下一版 Overture 就会体现。

代价是:数据在 OSM 覆盖薄的地方完全依赖机器推断,而机器推断的质量与影像分辨率和训练集的地区分布强相关。

§5.4 已知的过滤规则

Buildings 在融合前后有一串过滤规则,有些会直接丢掉要素。位于水中的建筑被排除;几何尖角过多的多边形被排除;机器学习来源中面积过小的被排除(这些通常是集装箱、车棚、太阳能板);height 大于等于 900 米的被排除。

这些规则是为了减少误检,代价是会漏掉一些真实要素。官方明说了这一点,并给出补回的办法:在 OSM 里补。

§5.5 一个贯穿全文的例子:华盛顿特区那栋楼

下文的讨论会反复回到一个具体对象:一栋位于华盛顿特区、在官方探索器里常见的联邦政府建筑。选它是因为它能同时展示四件事。

第一件事是身份。它在 Buildings 主题里有一个 GERS ID。这个 ID 从它第一次被纳入参考地图起就固定,即使轮廓在某一版被修正、高度被补上,标识不变。

第二件事是来源。它的 sources 数组里可能同时列出 OpenStreetMap 与 Esri Community Maps。若两者几何 IoU 超过 0.5,它们被判定为同一栋楼,各得到一个指向同一 GERS ID 的桥接记录。

第三件事是许可。它属于 Buildings 主题,沿 ODbL。如果某人把它与自家的会议室预订数据合并发布,衍生数据库的边界问题立刻出现。

第四件事是模态。它的几何是多边形,不是像元。任何试图把它当作「一块 30 米格网」的做法都会丢失轮廓信息。

后面讨论 GERS 注册表、融合优先级、许可分层与查询写法时,都会回到这栋楼。

§5.6 变更节奏的代价

月度发布听起来很顺,但有一个常被忽略的后效:GERS churn。

2026-10-21 这一版里,Places 的 churn 是 11.92%,新增八百三十多万个、删除一百三十多万个。原因是 BrightQuery 的西欧扩张。Divisions 的 churn 很低,三类分别在 0.45% 到 0.56% 之间。Transportation 的 connector 与 segment 分别是 0.70% 与 0.83%。

对按 id 增量同步的使用者来说,11.92% 意味着一个月里每九个点里就有一个换掉了。这个比例如果事先不知道,增量管道会在第一次全量对比时崩掉。

churn 的来源值得拆开看。Places 这一版的高 churn 不是随机重排,而是由一次集中的来源替换引起的:西欧十国的存量地点换成了 BrightQuery 的数据,但标识保留了下来。也就是说,「换掉」在这批数据里指的是属性变化,不是标识失效。这提示一个实操要点:churn 高不等于主键失效,要区分「同一个 id 的属性更新」与「实体消失、新实体出现」两种情况,前者只需重跑属性同步,后者才需要重建关联。

§5.7 它不会告诉你的三件事

第一,某个地点是不是真实存在。Places 的每个记录都有一个置信度字段,但置信度描述的是「多个来源是否一致」,不是「这个地方是否营业」。官方这一版把营业状态的覆盖率从 23.74% 提升到 32.54%,也就是说仍有近七成地点没有营业状态。

第二,某个建筑的高度是否准确。高度字段来自上游,可能是现场量测、可能是按楼层估算、可能是模型推断,数据里没有一个字段区分这三种来源。用高度做三维渲染时,这一点必须在方法里声明。

第三,某个行政区划的边界是否被所有相关方承认。Divisions 的官方描述是「as seen from a given political perspective」,这句话是有意写的。争议地区的边界在不同视角下不同,数据只给出其中一种。

§6 使用层:把它接进一条流水线

§6.1 最小可用流程

一条典型流程有五步,每步都对应一个具体的坑。

第一步,确定要读的要素类型,逐类查许可。这一步不能跳过,因为它决定了后面能不能把结果发出去。

第二步,用 STAC 读当前版本号,不要写死。写死的版本在两个月后会因为公共存储清理而 404。

第三步,用 bbox 过滤,只取需要的地理范围。DuckDB 的空间下推在这个列上工作良好。

第四步,用 hive_partitioning=1 把 theme 与 type 读成列,便于后续合并多类型结果。

第五步,导出时保留 id 与 sources。前者是未来增量同步的钥匙,后者是事后追溯的凭据。

§6.2 按行政边界取数

Divisions 的 division_area 常被用作空间裁剪的模具。下面的示例取美国犹他州的地址点,导出为 CSV。

LOAD spatial;
LOAD httpfs;

SET s3_region = 'us-west-2';

COPY (
  WITH utah AS (
    SELECT geometry AS utah_geom
    FROM read_parquet(
      's3://overturemaps-us-west-2/release/2026-10-21.0/theme=divisions/type=division_area/*',
      filename=true, hive_partitioning=1)
    WHERE names.primary = 'Utah' AND subtype = 'region'
  )
  SELECT a.id, a.street, a.number
  FROM read_parquet(
    's3://overturemaps-us-west-2/release/2026-10-21.0/theme=addresses/type=address/*',
    filename=true, hive_partitioning=1) AS a
  INNER JOIN utah ON ST_WITHIN(a.geometry, utah.utah_geom)
  WHERE a.country = 'US'
) TO 'utah_addresses.csv';

这段查询有一个隐含前提:division_area 里同一个州可能有多条记录,分别对应「仅陆地」「含领海」「未裁剪」三种范围,由 is_land 与 is_territorial 两个布尔量区分。不显式限定时会得到多份几何,ST_WITHIN 的连接结果会重复。

§6.3 层级查询:从国家一路读到街道

Divisions 的 hierarchies 数组是这份数据里比较少见的「自带关系」设计。每个 division 都带一条从国家到自身的链,链上每一项都是一个 GERS ID。

LOAD httpfs;
SET s3_region = 'us-west-2';

--# 读出某个 locality 的完整行政层级链
WITH locality AS (
  SELECT hierarchies
  FROM read_parquet(
    's3://overturemaps-us-west-2/release/2026-10-21.0/theme=divisions/type=division/*',
    filename=true, hive_partitioning=1)
  WHERE names.primary = 'Salt Lake City' AND subtype = 'locality'
)
SELECT h.name, h.subtype, h.division_id
FROM locality
CROSS JOIN unnest(hierarchies[1]) AS t (h);

这段的意义不在结果,而在示范一种用法:层级不是靠字符串拼接「国家/省/市」得来的,是靠 id 链串起来的。把 division_id 再去 join division_area,就能一次拿到每一级的面。

§6.4 交通数据的两种读法

交通主题的属性是线性引用的,也就是说,同一个属性可以只作用于一条线段的某一段。限速从第 0 公里到第 500 米是 50,之后是 30,这在数据里是一条线段加两个引用区间,而不是两条线段。

这种设计对路由很友好,对随手取数很不友好。如果你只想要「这条路的限速」,必须处理多个区间的情况,而不能取第一个元素了事。

LOAD spatial;
LOAD httpfs;
SET s3_region = 'us-west-2';

--# 取柏林范围内所有停车通道段
COPY (
  SELECT *
  FROM read_parquet(
    's3://overturemaps-us-west-2/release/2026-10-21.0/theme=transportation/type=segment/*',
    filename=true, hive_partitioning=1)
  WHERE class = 'parking_aisle'
    AND bbox.xmin > 13.0897 AND bbox.xmax < 13.6976
    AND bbox.ymin > 52.3100 AND bbox.ymax < 52.7086
) TO 'berlin_parking_aisles.parquet';

§6.5 用建筑轮廓给卫星影像打标签

这是 Overture 与遥感数据集唯一稳固的结合点,也是它在本库中的位置。

思路很直接:取一块建筑轮廓,按轮廓生成缓冲区,再在 Sentinel-2 影像里裁出对应的像元块。结果是「影像块 + 建筑掩码」的配对。这一步不需要任何 Overture 的元数据,只需要几何与坐标参考。

反过来的用法也成立:用卫星影像检验建筑轮廓的时效性。若某块轮廓所在的位置在最新影像里已经是裸地,说明该建筑已拆除而数据未更新。这类交叉校验对机器学习来源的建筑尤其有用。

关键的边界是:影像里有而矢量里没有的东西,矢量永远无法提供。 草地纹理、屋顶材质、施工状态,这些是像元层面的信息。把 Overture 当成「免费的标注来源」可以,把它当成「免费的影像替代品」不行。

§6.6 三个会立刻绊倒人的细节

其一,names 是结构体。任何按名字模糊匹配的查询都必须写 names.primary,否则比较的是整个结构体,结果恒为空。

其二,sources 是数组。一栋楼可能来自多个来源,取 sources[1] 只是取了第一个,未必是主来源。要判定主来源,得看融合优先级,不能靠数组顺序。

其三,geometry 在未载入 spatial 扩展时是二进制块。用 DuckDB 读出来看着像乱码,其实是 WKB,加上扩展就会自动转成几何类型。

§6.7 一份增量同步的骨架

如果要把 Overture 接进一个长期运行的管道,光靠全量重拉是不现实的——光是建筑一个主题,全量就在两亿五千万条以上。增量同步的骨架如下。

#-- 按要素类型分别同步:先对变更日志,再回源取新数据
import duckdb

con = duckdb.connect()
con.execute("INSTALL spatial; LOAD spatial;")
con.execute("INSTALL httpfs; LOAD httpfs;")
con.execute("SET s3_region = 'us-west-2';")

prev = "2026-09-23.1"
curr = "2026-10-21.0"

#-- added 与 data_changed 需要回源补齐属性,removed 只需在下游删除
rows = con.execute(f"""
  SELECT type, change_type, count(*) AS n
  FROM read_parquet(
    's3://overturemaps-us-west-2/changelog/{curr}/theme=places/*/*',
    filename=true, hive_partitioning=1)
  GROUP BY type, change_type
  ORDER BY n DESC
""").fetchall()

for t, c, n in rows:
    print(t, c, n)

这段只统计了变更分布,没有回源下载。实际同步时,added 与 data_changed 两类要按 id 回到对应的数据分区取行,removed 只需要在下游按 id 删除。三类分开处理,比整表重拉快一个数量级。

要注意的是 prev 这个值不能省,也不能随便填。变更日志只描述相邻两次发布之间的差异,跳过一个版本就会漏掉中间的变化;如果中间隔了两个月以上,公共存储里已经找不到旧版,只能走全量重建。

§7 评估层:不该按什么标准评它

§7.0 前置校正:这不是一份「数据集」,是一套「数据产品线」

在给 Overture 打分之前,先要把评价对象校正过来。

普通数据集的评价框架假设对象是一个冻结的集合:一共有多少条、覆盖哪些字段、标注质量如何。Overture 不是冻结的。它每月重发一次,每次发布是一个带日期的新产品,上一版两个月后从公开桶里消失。你评价的若是「一份数据集」,那连评价对象本身都会过期。

正确的评价对象是这条产品线:它的模式是否稳定、它的身份机制是否可靠、它的来源是否可追溯、它的许可是否清晰。这也是本节使用 DAIMS 框架时的口径——DAIMS 在这里用来检查这条产品线在数据治理各环节的完备度,而不是用来给某一次发布打分。

§7.1 DAIMS 对照

DAIMS 是数字广告的标准化框架,但它对「标识、元数据、血缘、许可」四件事的划分方式,恰好适合描述一个跨源合并的地图产品线。以下按 DAIMS 的维度逐项对照。

DAIMS 维度 Overture 的做法 评价
标识(Identifier) GERS ID,128 位随机 UUID,注册表为准 强。放弃可读性换取稳定性,判断清晰
标识覆盖 base 与 building_part 不覆盖 弱。使用者须自己记住哪里没覆盖
元数据(Metadata) Pydantic 生成的模式文档,逐列可查 强。比自由标签的语义清晰度高一个量级
血缘(Lineage) sources 数组 + 桥接文件 中强。可追到上游记录号,但只在有桥接的主题
变更记录(Change Log) 每版按要素记四态变更 强。这是跨版同步的关键件
许可表达(License) 按主题分层,逐主题文档说明 中。分层清楚,但没有机器可读的逐要素许可标记
保留(Retention) 公开桶留两个月 弱。长期复现须自建镜像
一致性(Consistency) 字段名跨主题统一,类型受控 中强。跨主题的同一概念字段名一致

按这个表看,Overture 的长板在标识机制与元数据,短板在保留策略与许可的机器可读性。

§7.2 不该追问的问题

以下问题看似合理,但对这份数据的形态并不成立,问出来只会得到错误的结论。

「它的标注准确率是多少」——它不是一个带金标准的评测集,没有统一的准确率口径。官方给的是来源分布、融合规则与已知问题。

「它有多少 TB」——官方发布说明没有给出总体积,且总体积随主题与压缩参数变化。有意义的是要素数与长度,不是字节数。

「它能不能替代 OpenStreetMap」——关系是下游与上游,不是替代。官方在文档里反复把它描述为对 OSM 的翻译与叠加。

「它的 id 是不是可以解析出位置」——2025-06-25.0 之后不能,这是刻意的设计。

§7.3 该追问的问题

反过来,有四个问题值得在每个项目开始时问清楚。

第一,我需要的要素类型在 GERS 注册表的覆盖范围内吗?如果不在,跨版本同步方案要另设计。

第二,我的产品会对外发布吗?如果会,读到的主题里有几个是 ODbL 的?

第三,我需要的粒度在官方承认的覆盖薄弱区之内吗?县级以下行政单元、全球南方的建筑,都需要单独验证。

第四,我需要的复现周期长于两个月吗?如果是,现在就得规划镜像。

§7.4 用华盛顿那栋楼检验一次

回到 §5.5 的例子。假设某人要做一份「联邦建筑」的专题地图,流程如下。

从 Buildings 取那栋楼的轮廓,得到 GERS ID 与 sources。从 Places 取同一位置附近的政府机构点位,得到另一批记录。从 Divisions 取它所在的 county,拿到行政面。

三份数据分属三个主题:Buildings 是 ODbL,Places 是宽松许可,Divisions 是 ODbL。合并成一张专题图之后,整体落在 ODbL 之下。若要把这张图作为数据产品发布,Places 那部分的宽松优势就被 Buildings 与 Divisions 的传染性覆盖了。

这就是许可分层在真实项目里的样子:不是「挑一个条款最宽松的主题」,而是「最终产物的许可由其中最严格的输入决定」。

§8 生态:它靠什么活着

§8.1 时间线

时间 事件
2022-12 由 AWS、Meta、Microsoft、TomTom 发起,隶属 Linux 基金会的联合开发基金会
2023-07 首个 alpha 数据版本 2023-07-26-alpha.0
2023-10 月度发布节奏开始,2023-10-19-alpha.0
2024-07 数据版本升到 1.0 系列,base、buildings、divisions、places 进入 GA
2024-07 新增 addresses 主题,alpha 状态
2025-06 标识体系从 H3 哈希换成 128 位 UUID
2026-09 数据版本进入 v2.0.0 模式
2026-10-21 当前版本 2026-10-21.0

这条时间线上有两个值得注意的转折。

第一个是 2024-07 的 GA 公告。那一版里,addresses 作为新主题加入,同时 divisions 主题把 boundary 要素类型改名为 division_boundary,并把 divisions 属性改成 divisions_id。改名这件事本身说明了一个问题:早期的要素类型命名是各主题各自为政的,直到那时才统一到「跨主题唯一」的规则上。

第二个是 2025-06 的标识重构。把带 H3 单元的哈希换成随机 UUID,等于承认「把语义编进标识」是一个错误。官方给出的理由是:当实体跨网格移动或换主题时,标识会碰撞;而从标识前缀做空间过滤从来就不可靠。

§8.2 它为什么能持续

这份数据能持续,靠的不是「开放」这个标签,而是三个具体的结构。

第一个是成员制。发起方是四家要做地图产品的公司,之后扩展成一众贡献公司。它们的动机是共同的:地图数据自建的边际成本极高,共享的边际成本低。这种动机让「每月重发」有了资金与人力的来源,也让社区贡献者知道该向谁提需求。

第二个是GERS 作为公共品。身份标识本身可以脱离 Overture 的数据单独使用。一个路况数据商可以只发路况、按 GERS ID 挂到路上,不必连路网一起发。这种「数据可分开卖、但能按 id 拼起来」的模式,把生态里其他参与者变成了它的使用者与推广者。

第三个是与 OpenStreetMap 的双向关系。Overture 拿 OSM 当骨架,同时鼓励把修正写回 OSM。Buildings 的官方文档明说:如果某栋楼有问题,去 OSM 改,下一版就会体现。这让它的维护负担部分转移到了 OSM 社区,而 OSM 也从这份数据里获得了一个大规模的使用场景。

§8.3 它在本库中的位置

本库的遥感与地理方向刚起步,已有的三条是与它关系最近却最容易被混淆的。

eurosat 是 64×64 像素的 Sentinel-2 瓦片分类基准,给的是像元矩阵与地表覆盖标签。它与 Overture 的唯一交集是空间:同一块地方,一个用像元描述,一个用多边形描述。

multimodal-satellite-data 是哥伦比亚的城市地面变化观测,时间序列与地面调查对齐。它的空间单元是街区,与 Overture 的 Divisions 有对应关系,但前者是观测序列,后者是边界几何。

aqs 是美国空气质量监测站点库,核心字段是站点经纬度。这些经纬度可以拿去与 Overture 的 places 或 divisions 连接,得到「这个站点在哪个市、周边有哪些设施」的上下文,但连接本身不改变 aqs 的数据性质。

world-bank-open-data 与 ucdp 是国家级或事件级的表格数据,与 Overture 的 Divisions 可以按国家代码或坐标连接,用于把统计量落到地图上。

gbif 是物种出现记录,带经纬度,可以与 Overture 的 land_cover 与 water 做空间叠加,研究物种分布与地表覆盖的关系。

这些连接都有一个共同前提:Overture 提供的是空间骨架,其他数据集提供的是附着在骨架上的观测值。这个分工也是矢量地图在 AI 流水线里的典型角色。

§8.4 镜像与替代入口

除了官方两个云,还有若干镜像:BigQuery、Databricks、Fused、Snowflake、Wherobots、Source Cooperative。这些是社区或平台方维护的,访问方式与数据新鲜度各不相同,官方把它们标注为「community-maintained」。

镜像的价值在于避免了跨云出网成本。一个已经在 BigQuery 里做分析的项目,从 BigQuery 读 Overture 比从 S3 读要省事得多。代价是镜像的更新节奏未必与官方同步,引用时要注明是从哪个镜像读的、读的是哪一版。

§8.5 它与商业地图的关系

这一层关系常被误解成「免费的 Google Maps 替代」,实际上差别很大。

商业地图服务卖的是一整套:底图、搜索、路线规划、实时路况、街景、以及背后的运营团队。Overture 只提供原料:要素、几何、属性。路线规划要用它的路网自己做,搜索要用它的地名自己建索引,实时路况完全不在范围内。

真正接近的类比是:它把过去各家地图公司各自维护的「底图」,变成了一份可以共同维护的公共资产,然后各家在上面做自己的产品。这也是它为什么强调 GERS——只有身份能对上,各家才能在公共底图上叠自己的差异层。

对中国大陆的使用者还有一层额外注意:数据的覆盖密度与监管环境与欧美不同,边界数据的表达涉及法域差异,不能直接当作国内地图产品的基础数据。

§9 实践指引:三条路径与一份最小实现

§9.1 三种角色,三条路

角色 主要诉求 推荐路径 首要风险
分析师 快速看一小块,验证可行性 Explorer + Python 客户端 把 Explorer 看到的当作全量
工程师 接进数据处理管道 DuckDB 直读 + STAC 版本发现 写死版本号导致两月后失效
研究者 可复现、可引用 自建镜像 + 写死版本 + 记录抓取日期 未留镜像导致无法复现

§9.2 接到 AI 流水线里的位置

Overture 在一条典型的 AI 流水线里处在特征与标签的供给端,不在输入端。

它不是训练样本的原始数据,因为训练样本要么是影像块,要么是文本,要么是表格。它的作用是提供这些样本的空间上下文与标注:用建筑轮廓生成掩码,用 land_cover 生成地表类型标签,用 divisions 做地理划分防泄漏,用 places 做地名与类别的弱标签。

这一定位决定了两个实践要点。第一,任何用到它的环节都应当把使用的版本号记进元数据,否则样本无法复现。第二,任何跨主题的连接都应当先做许可检查,再决定结果能不能发布。

§9.3 一份最小可跑的实现

下面这段把「取一个城市、一个主题、一小块范围」走完整,输出带版本标注的本地文件。

#-- 用 DuckDB 直读云端 GeoParquet,只取一小块,并记录版本号
import duckdb

con = duckdb.connect()
con.execute("INSTALL spatial; LOAD spatial;")
con.execute("INSTALL httpfs; LOAD httpfs;")
con.execute("SET s3_region = 'us-west-2';")

#-- 版本号不写死,从 STAC 根目录取
latest = con.execute(
    "SELECT latest FROM 'https://stac.overturemaps.org/catalog.json'"
).fetchone()[0]
print("当前版本:", latest)

sql = f"""
COPY (
  SELECT id, names.primary AS name, taxonomy.primary AS category, geometry
  FROM read_parquet(
    's3://overturemaps-us-west-2/release/{latest}/theme=places/type=place/*',
    filename=true, hive_partitioning=1)
  WHERE bbox.xmin BETWEEN 13.30 AND 13.50
    AND bbox.ymin BETWEEN 52.45 AND 52.55
) TO 'berlin_places_{latest}.parquet' (FORMAT PARQUET);
"""
con.execute(sql)
print(con.execute(f"SELECT count(*) FROM 'berlin_places_{latest}.parquet'").fetchone())

这段代码的三个设计点都与前文对应:版本号从 STAC 取,避免两月后失效;过滤用 bbox,让下推发生在扫描阶段;输出文件名带版本号,让产物可追溯。

§9.4 最少要报的三件事

任何一份以 Overture 为输入的研究,方法部分至少应当写清三件事。

第一,读的是哪个版本,什么时候读的。版本号与读取日期缺一不可,因为公共桶只留两个月,其他人未必能复现同一个版本。

第二,读了哪些主题与要素类型,各自的许可是什么。这一条不是为了合规形式,而是为了让使用者判断结果的可用边界。

第三,是否使用了镜像。官方两个云的版本是同一个,镜像的同步情况不保证,从镜像读到的结果应视为不同的取数来源。

§10 AI 使用声明

项目 内容
数据性质 公开矢量地图要素,非个人数据,非医疗数据
建议用途 空间上下文构建、地理划分、弱标签生成、地图底图
不建议用途 当作卫星影像替代品、当作穷尽性 POI 普查依据
许可注意 按主题分层,产物许可由最严格输入决定
版本锁定 引用具体日期版本,并自行留存或建镜像
标识注意 只有注册表内的 GERS ID 可跨版追踪
页面状态 已发布,最后核对 2026-10-29

常见误读

常见说法 实际情况 证据
「Overture 有五个图层」 当前是六个主题、十二种要素类型 云存储页的主题与类型映射表
「它整体是 ODbL」 四个主题 ODbL,地点是两个宽松许可,地址逐来源 各主题指南的 Sources 段
「Places 也是 OSM 来的」 Places 不含任何 OSM 要素,故不带 ODbL 传染性 Places 指南显式声明
「Base 的行政边界与 Divisions 重复」 Base 不含行政区划,Divisions 才是 Base 六类型清单里无 boundary
「每月发布,旧版随时能下」 公开桶只留最近两个月 发布日历的数据保留政策
「id 里能看出经纬度和主题」 2025-06-25.0 起改为随机 UUID GERS 文档说明
「所有 id 都能跨版追踪」 base 与 building_part 不在注册表 GERS 文档明确排除
「它是 OSM 的替代品」 它是 OSM 的下游合并者与翻译层 Base 指南的 pass-through 描述
「Parquet 就是普通表格」 地理列是 WKB,需要 spatial 扩展 查询示例均先 LOAD spatial
「地址主题也是稳定主键」 地址不进 GERS,属性一改就换 id Addresses 指南的已知问题
「下载整份数据不会太大」 建筑单主题就有二十多亿要素 发布说明的要素数表

附录 A 图层清单

主题 要素类型 几何 主要来源 许可
addresses address 点 OpenAddresses、AddressForAll 等一百七十五个以上 逐来源
base bathymetry 面 ETOPO1、GLOBathy ODbL(主题级)
base infrastructure 点线面 OSM ODbL
base land 面 OSM 海岸线取反 ODbL
base land_cover 面 ESA WorldCover ODbL(主题级)
base land_use 面 OSM landuse 标签 ODbL
base water 面 OSM ODbL
buildings building 多边形 OSM、Google、Microsoft、Zenodo、Esri、IGN、温哥华市 ODbL
buildings building_part 多边形 OSM ODbL
divisions division 点 OSM、geoBoundaries ODbL
divisions division_area 面 同上 ODbL
divisions division_boundary 线 同上 ODbL
places place 点 Meta、BrightQuery、Microsoft、Foursquare 等 CDLA-Permissive 2.0 / Apache 2.0
transportation segment 线 OSM、TomTom ODbL
transportation connector 点 OSM、TomTom ODbL

附录 B 字段与主键

字段 类型 说明
id 字符串 GERS ID 或确定性 UUID,见 §3.3
version 整数 要素的版本序号
geometry 几何 WKB,需 spatial 扩展
bbox 结构体 外包框,空间下推首选列
names 结构体 primary 加各语言标签
sources 数组 dataset、record_id、update_time、confidence
class / subclass 字符串 分类,跨主题命名一致
confidence 浮点 融合置信度,仅部分主题有
is_land 布尔 仅 division_area
is_territorial 布尔 仅 division_area
hierarchies 数组 仅 division,从国家到自身的 id 链

主键规则一句话:认注册表,不认字符串。

附录 C 术语表

术语 含义
Overture Maps Foundation 2022 年由 AWS、Meta、Microsoft、TomTom 发起的开放地图基金会
主题(theme) 顶层的分区单位,当前六个
要素类型(type) 主题下的次级分区,当前共十二种
GERS 全球实体参考系统,提供跨源稳定标识
GERS 注册表 记录标识稳定性承诺的清单
桥接文件 上游记录号到 GERS ID 的映射
变更日志 逐要素记录增删改的产物
GeoParquet Parquet 的地理扩展,列式存储加几何元数据
WKB 几何的二进制编码
PMTiles 单文件矢量瓦片格式,Overture 仅供检视
STAC 时空资产目录,Overture 用它索引全部版本
ODbL 开放数据库许可,带传染性
CDLA-Permissive 社区数据许可,宽松型,无传染性
衍生数据库 与 ODbL 数据合并后形成的整体
集体数据库 与 ODbL 数据并列存放、分开分发的自有数据
IoU 交并比,建筑融合的匹配度量
线性引用 属性只作用于线段一部分的表达方式
churn 两次发布之间的要素更替比例
full freeform 地址的自由文本形式

附录 D 常见误读 FAQ

问:六个主题是不是近两年才拆出来的?

不是拆出来的,是逐步加出来的。最初只有 buildings、roads 这类基础层,2024-07 加了 addresses,2025-2026 期间 base 内部细分为六个类型,divisions 在 2024-04 替换了旧的 admins 主题。这是个只增不减的过程。

问:Base 里有行政边界吗?

没有。Base 的六个类型是 bathymetry、infrastructure、land、land_cover、land_use、water。行政边界在 Divisions。

问:为什么建筑主题的许可会覆盖到机器学习来源?

因为整个主题以 ODbL 发布,所以每个被纳入的来源必须在 ODbL 或兼容许可之下。官方明说加入前会做许可兼容性核验。

问:能不能只用 Places,完全避开 ODbL?

可以用 Places,但要看你怎么用它。只读、不合并、不分发衍生库,是安全的。一旦与 OSM 或其他 ODbL 主题合并发布,产物仍可能落入 ODbL。

问:latest.ddb 是什么?

是官方托管的 DuckDB 文件,每个要素类型一个视图,挂载后按名字查。适合探索,不适合复现,因为它跟着最新版走。

问:为什么用 bbox 不用 geometry 过滤?

bbox 是预先算好的最小外包框,能在扫描阶段下推,代价低。geometry 的判定要读出几何之后才做,全表扫描。

问:交通数据的「一条路」为什么这么长?

因为属性是线性引用的,一条线段可以承载多个区间上的不同属性,不必在属性变化处切断几何。要切成单属性段,官方提供了一个 splitter 工具。

问:地址主题为什么还在 alpha?

因为它缺一个稳定的匹配器。目前的匹配靠精确值比对,属性一变就产生新 id,无法做出稳定性承诺,因此不进注册表。

问:Explorer 里能看到的范围就是全量吗?

不是。Explorer 加载的是 PMTiles 瓦片,覆盖范围与瓦片层级有关,官方明说这些瓦片仅供检视,不保证在生产中使用。

问:它和 GPS 或轨迹数据是什么关系?

没有直接关系。轨迹是移动个体的时间序列,Overture 是静态的路网。轨迹匹配路网可以用 Overture 的 segment 做地图匹配,但那是在用它的几何,不是用它的观测。

附录 E 许可分层与合规

按使用场景给出的合规线索,不构成法律意见。

场景 涉及主题 主要义务 建议动作
内部探索与分析 任意 无对外分发义务 记录版本号即可
内部产品使用 ODbL 主题 Base、Buildings、Divisions、Transportation 署名,衍生库回授 在产品里写明 ODbL 提示
公开发布地图产品 同上 署名,衍生库以 ODbL 发布 评估哪些部分是衍生库
公开发布 POI 产品 Places 保留 CDLA 与 Apache 的署名 逐来源清点
把 Places 与 OSM 合并 Places + OSM 可能触发 ODbL 参见 OSM 集体数据库指引
发布合并多主题的产品 全部涉及 由最严格输入决定 默认按 ODbL 规划
训练模型 全部 分发衍生数据时才有义务 区分「学参数」与「存数据」
发布地址数据 Addresses 逐来源适用 逐条建来源清单

署名的最小形式可以直接沿用官方的串:© OpenStreetMap contributors, Overture Maps Foundation。这是 Explore 工具页面上的写法,也是覆盖 ODbL 义务的最小集合。

编辑说明

核验时间 2026-10-29。方法:直接读取官方文档站的发布日历、schema 概览、各主题指南、GERS 文档、云存储访问页与当前版本发布说明;读取基金会网站与 Linux 基金会的成立公告,确认发起方与隶属关系。未下载任何数据文件,未做要素数与体量的核对性重算,因此文中所有数量均为官方发布说明的原文口径。体积方面,官方发布说明只给要素数与长度,未给总体积,故本文不提供 TB 级估计,以免臆造。当前版本的数据规模(建筑二十五亿余、地点八千八百余万、地址四亿七千五百余万)取自 2026-10-21.0 的发布说明;其中建筑一项在该版说明中标注为「无变化,沿用九月版数据重新发布」。许可分层以各主题指南的 Sources 段为据,地址主题因来源过多,仅给出分层原则与几个代表来源。与投稿预设不符处已在正文更正,主要集中在:主题数由五改为六、新增 addresses 主题;Base 网页版许可中的行政区划实际归属 Divisions;当前版本号与 schema 版本;以及与 OpenStreetMap 的关系应表述为下游合并而非替代。


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • nhanes — 共享标签:公共卫生与流行病学 / 调查数据
  • brfss — 共享标签:公共卫生与流行病学 / 调查数据
  • nhis — 共享标签:公共卫生与流行病学 / 调查数据
  • mics — 共享标签:公共卫生与流行病学 / 调查数据
  • dryad — 共享标签:公共卫生与流行病学 / 调查数据
  • chns — 共享标签:公共卫生与流行病学 / 调查数据
  • elsa — 共享标签:公共卫生与流行病学 / 调查数据
  • hunt-study — 共享标签:公共卫生与流行病学 / 调查数据
  • nsduh — 共享标签:公共卫生与流行病学 / 调查数据
  • namcs — 共享标签:公共卫生与流行病学 / 调查数据

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集