迁移

在仅需地理编码的场景下迁出 Mapbox 静态地图和瓦片

Mapbox 常常被整体采用:地理编码、静态地图图片、矢量瓦片和 Mapbox GL 渲染库,全部使用同一个访问令牌和同一个账户。当项目需要完整的地图技术栈时,这种捆绑是合理的,但它会让范围更窄的迁移变得复杂,因为只想更换地理编码服务商的团队可能会发现,地理编码调用和地图渲染代码共享配置、令牌,甚至是同一个请求封装函数。

这类迁移真正的第一步不是技术性的,而是划定范围。明确决定地图瓦片和静态地图图片继续留在 Mapbox,只把地理编码调用迁到别处,可以避免一种常见的失败模式:在边界不清的情况下开始迁移,最终把同时涉及两方面的代码改了一半。

My Geocode 是一个地理编码、IP、时区、海拔和邮政编码查询 API。它不渲染地图瓦片或静态地图图片,因此不能替代 Mapbox 集成中的那一部分,只能替代地址查询部分。它的 Mapbox 兼容主机复现了 Mapbox Geocoding 返回的 GeoJSON FeatureCollection 结构,包括 centerplace_namecontext 字段,唯一的区别是版权、条款和隐私文字。参考详情见 /compatibility/mapbox/

实用的拆分步骤:

  • 找出代码库中读取 Mapbox 访问令牌的每一处,并确定该调用点执行的是地理编码、瓦片渲染还是两者兼有,因为有些封装函数历来会在一次调用中把地址查询和地图预览合在一起
  • 让专门用于地理编码的调用改用独立的主机和独立的密钥,同时让瓦片和静态地图调用继续指向 Mapbox,保留其现有令牌不变
  • 确认前端地图组件没有假定地理编码结果和地图瓦片来自相同的坐标参考或投影约定,这种情况很少成为问题,但值得快速检查一下

地理编码兼容主机的身份验证使用密钥,可通过 X-API-KeyAuthorization: Bearer、HTTP Basic 认证或查询参数发送。不用密钥每天有 2,500 次免费请求,每个密钥每天另有 2,500 次免费请求,按网络计算,之后按每次请求 €0.0001 使用预付额度,或使用每月 €50 的 Unlimited 密钥,包括这个端点在内的所有端点都适用相同费率。

同时使用两家服务商,一家负责地图渲染,一家负责地址查询,是一种稳定的长期配置,而不是需要消除的临时状态。许多生产应用有意把地图和地理编码分给不同的供应商,因为这两种能力的成本驱动因素和技术要求都不同,没有必要仅仅因为一开始是这样就把它们合并到同一个账户下。