迁移

从 OpenStreetMap Nominatim 迁移

Nominatim 在地理编码选项中处于一个特殊位置,因为它既是一款可以自行运行的开源软件,又有一个任何人都可以直接查询的公共演示实例,该实例受使用政策约束,要求提供描述性的 User-Agent 请求头并合理控制请求频率,而不是使用正式的 API 密钥。它的 JSON 响应包含一个 display_name 字符串、一对以字符串而非数字表示的 latlon,以及一个采用 OpenStreetMap 自身标签约定的 address 对象,例如 roadsuburbpostcode

当流量增长到超出共享社区资源所能承受的范围时,团队往往会在公共实例上碰壁。自托管 Nominatim 是一个真实可行但很繁重的选择:它需要下载并导入庞大的全球或区域 OpenStreetMap 数据提取文件,持续更新这些数据,并无限期地自行运行服务器基础设施。以基础设施和维护工作换取掌控权,这种取舍值得在决定走哪条路之前坦诚面对。

My Geocode 的 Nominatim 兼容主机完全复现 display_namelatlon 和地址字段结构,与 Nominatim 自身输出的区别仅在于版权、条款和隐私文字。参考详情见 /compatibility/nominatim/。针对公共 Nominatim 实例编写的代码,包括其字符串类型的坐标字段,应当无需改动即可解析兼容主机的响应。

这次迁移中实际会变化的内容:

  • 不再需要受共享使用政策约束的 User-Agent 请求头;身份验证改用密钥,通过 X-API-Key 请求头、Authorization: Bearer 请求头、HTTP Basic 认证或查询参数发送
  • 可预期的每日配额,取代未明确说明的共享资源速率限制:不用密钥每天免费 2,500 次请求,每个密钥每天另有 2,500 次免费请求,按网络计算
  • 无需运行基础设施,也无需维护 OpenStreetMap 数据提取文件,这些都由托管服务负责

超出免费配额后,按每次请求 €0.0001 使用预付额度,或使用每月 €50 的 Unlimited 密钥,所有端点(包括这个兼容主机)与平台上的其他端点价格相同。

对于特别看重 Nominatim 以开放地理数据为基础的团队,值得了解的是:基于 OpenStreetMap 约定的字段命名,例如 suburbpostcode,而不是更通用的术语,在这个兼容主机的结构中得以保留,因此您的代码已经预期的地址词汇在迁移之后仍然适用。