Flutter中基于OpenStreetMap实现免费地址自动补全是否可行?
问题解答
你完全可以通过全免费方案实现地址搜索功能,不需要申请Google、Mapbox等第三方服务商的API密钥。
可用的免费实现方案
- OSM官方Nominatim地理编码服务
这是OpenStreetMap生态官方提供的免费地理编码服务,基于OSM全量开源数据构建,支持正向地址搜索(输入地址返回匹配的经纬度及地址详情)、逆地址搜索(输入经纬度返回对应地址),无需申请密钥即可直接使用。
官方对非商用/小体量应用的调用限制为每秒1次请求,完全可以覆盖个人开发、小众应用的使用需求,使用时仅需在请求头中添加你应用的名称作为User-Agent即可。
Flutter侧无需自行封装底层请求逻辑,可直接使用开源封装库flutter_osm_nominatim快速集成。 - 自建Nominatim服务
如果后续你的应用用户量上涨,超出官方服务的调用限制,可以自行搭建Nominatim服务,所有数据都可以从OSM官方免费下载,除服务器成本外无任何额外费用,没有调用限制,也不需要任何密钥。 - 其他OSM生态免费地理编码服务
如果需要更宽松的调用限制,也可以选择Photon等同为OSM生态的免费地理编码服务,同样不需要申请密钥即可调用。
实现流程参考
- 给地址输入文本框添加防抖逻辑,比如用户输入停止300ms后再发起请求,避免产生无效请求挤占调用额度
- 发起地理编码搜索请求,解析返回的地址列表、对应经纬度等信息
- 将搜索结果列表展示在输入框下方供用户选择
- 用户选中目标地址后,调用地图SDK的视角移动方法,将地图定位到该地址的经纬度即可
当前实现的地图效果

内容的提问来源于stack exchange,提问作者Sir_Catapimba
相关产品推荐
相关产品推荐

