Here Map中如何实现批量地址的地理编码查询?
HERE Map 批量地址地理编码问题解答
核心结论
- 你目前使用的HERE Map在线地理编码接口(SearchService对应的公开接口)不支持单次请求提交多个地址,处理批量地址列表时,确实需要多次调用单地址查询函数,每次替换
q参数的地址值即可。 - 针对超大批量地址处理场景,HERE面向企业付费用户提供了专门的批量地理编码服务,支持单次上传全量地址、异步返回所有结果,无需循环调用接口,可自行联系官方咨询相关权限。
批量调用注意事项
- 注意控制请求频率:HERE Map针对不同开发者套餐设置了不同的QPS(每秒请求数)上限,直接无限制并发请求会触发429频率限制错误,建议根据自身套餐配置设置请求间隔或者控制并发数。
- 建议添加失败重试逻辑:部分地址可能因为格式不规范、网络波动等原因查询失败,可在
onError回调中添加重试机制,避免遗漏地址结果。
批量查询实现示例
// 待处理地址列表 const addressList = [ 'Place Armes, 78000 Versailles, Francia', // 补充其他地址... ] /** * 批量地理编码查询 * @param {Object} platform HERE Map初始化后的platform实例 * @param {Array} addressList 待查询地址数组 * @param {Number} delay 每次请求间隔时间,单位毫秒,默认1000ms * @returns {Array} 所有地址的查询结果数组 */ async function batchGeocode(platform, addressList, delay = 1000) { const resultList = [] for (const address of addressList) { await new Promise((resolve) => { const geocoder = platform.getSearchService() geocoder.geocode( { q: address }, (successRes) => { resultList.push({ address: address, success: true, data: successRes }) setTimeout(resolve, delay) }, (errorRes) => { resultList.push({ address: address, success: false, error: errorRes }) setTimeout(resolve, delay) } ) }) } return resultList } // 调用示例 batchGeocode(platform, addressList).then(allResult => { // 处理所有地址的查询结果 console.log(allResult) })
内容的提问来源于stack exchange,提问作者Gabriel Castillo
相关产品推荐
相关产品推荐

