如何从多组经纬度(lat,lng)数据中获取唯一城市列表?
批量经纬度逆地理编码提取唯一城市方案
核心优化思路
针对700用户、单用户约1000条经纬度的海量数据,先减少需要处理的经纬度数量,再高效调用API提取城市,避免逐个请求的低效问题。
分步实现
数据库层去重经纬度
直接在存储用户位置的数据库中执行去重查询,过滤掉重复的经纬度组合:SELECT DISTINCT lat, lng FROM user_location_records;同一城市内的经纬度会高度重复,这一步能将待处理数据量压缩到原有的几十分之一甚至更少。
批量调用逆地理编码API
- 优先使用API的批量请求能力(Google Maps Geocoding API支持批量提交多个经纬度点,需遵循官方请求格式限制),减少HTTP请求次数。
- 解析API返回的
address_components字段,筛选类型为locality(城市)或administrative_area_level_2(部分地区对应城市级)的组件,提取其中的long_name或short_name作为城市名称。
最终城市去重
将所有提取到的城市名称存入集合(如Python的set、Java的HashSet),利用集合自动去重的特性,直接得到唯一城市列表。
关键注意点
- API配额与成本:Google Maps API有调用配额和计费规则,批量处理前确认配额充足;若成本敏感,可考虑免费替代服务。
- 经纬度精度优化:对经纬度做精度截断(如保留4位小数),进一步合并地理位置极近的点,减少不必要的API调用。
- 异常处理:部分偏远区域的经纬度可能无法解析出城市,需添加逻辑跳过这些点或设置默认标识。
内容的提问来源于stack exchange,提问作者Rohit
相关产品推荐
相关产品推荐

