无需API密钥根据地名获取经纬度的可行方法有哪些?
无需API密钥获取地名经纬度方案说明
你目前在用的OpenStreetMap Nominatim服务已经是该场景下的最优选择之一,对大学这类公共POI的匹配准确率足够高,使用成本也最低。如果要适配批量查询多所大学的需求,可以对现有代码做简单优化,每次请求加1秒以上的间隔避免触发公共接口限流,也可以增加limit=1参数减少无效返回数据,优化后的示例代码如下:
import requests import urllib.parse import time # 待查询的大学列表 university_list = ['Universität Wien', '复旦大学', '斯坦福大学'] for uni_name in university_list: url = f'https://nominatim.openstreetmap.org/search/{urllib.parse.quote(uni_name)}?format=json&limit=1' resp = requests.get(url).json() if resp: print(f"{uni_name} 纬度:{resp[0]['lat']},经度:{resp[0]['lon']}") # 公共接口限流规避 time.sleep(1.2)
其他可行实现方案
- Nominatim第三方公共镜像:很多社区维护的Nominatim镜像也不需要API密钥即可调用,用法和官方接口完全一致,仅需替换请求域名即可,适合官方接口访问受限的场景。
- 离线地理编码库部署:如果查询量特别大,不想受公共接口的限流规则限制,可以自行本地部署Nominatim或者Geonames离线库,全程不需要调用外部接口,也没有密钥要求,性能上限由本地服务器配置决定。
- Geonames免费接口:注册免费普通账号后即可调用,不需要申请付费API密钥,单小时有1000次的免费查询额度,针对全球高校类POI的覆盖度比较高,适合中等批量的查询需求。
内容的提问来源于stack exchange,提问作者LJG
相关产品推荐
相关产品推荐

