您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# 怎么用Python获取百度地图各点的经纬度信息
## 引言
在GIS开发、位置分析或路径规划等场景中,获取地理坐标(经纬度)是基础需求。百度地图作为国内主流地图服务商,提供了丰富的API接口。本文将详细介绍如何通过Python调用百度地图API批量获取地点经纬度信息。
---
## 一、准备工作
### 1.1 注册百度地图开发者账号
1. 访问[百度地图开放平台](https://lbsyun.baidu.com/)
2. 完成开发者认证(个人/企业)
3. 进入控制台创建应用,获取**AK(API Key)**
### 1.2 安装必要库
```bash
pip install requests pandas
百度地图提供两类核心API: - 地理编码API:将地址转换为经纬度 - 地点检索API:通过关键词搜索POI点
import requests
def get_latlng(address, ak):
url = f"http://api.map.baidu.com/geocoding/v3/?address={address}&output=json&ak={ak}"
response = requests.get(url)
result = response.json()
if result["status"] == 0:
location = result["result"]["location"]
return location["lng"], location["lat"]
else:
print(f"Error: {result.get('message')}")
return None, None
# 使用示例
ak = "您的AK" # 替换为实际AK
address = "北京市海淀区上地十街10号"
lng, lat = get_latlng(address, ak)
print(f"经度: {lng}, 纬度: {lat}")
结合Pandas实现CSV文件批量处理:
import pandas as pd
def batch_geocoding(file_path, ak):
df = pd.read_csv(file_path)
results = []
for addr in df["address"]: # 假设CSV有address列
lng, lat = get_latlng(addr, ak)
results.append({"address": addr, "lng": lng, "lat": lat})
return pd.DataFrame(results)
# 输出结果到新文件
result_df = batch_geocoding("addresses.csv", ak)
result_df.to_csv("geocoded_results.csv", index=False)
通过bounds
参数限定搜索范围:
def poi_search(query, region, ak):
url = f"http://api.map.baidu.com/place/v2/search?query={query}®ion={region}&output=json&ak={ak}"
response = requests.get(url)
return response.json()
# 搜索北京市的咖啡馆
results = poi_search("咖啡馆", "北京", ak)
for item in results["results"]:
print(f"{item['name']}: {item['location']['lng']},{item['location']['lat']}")
使用geotable
接口实现复杂形状区域检索。
百度API默认QPS为50(认证后可达更高):
import time
for address in address_list:
get_latlng(address, ak)
time.sleep(0.02) # 控制请求频率
完善异常捕获:
try:
response = requests.get(url, timeout=5)
response.raise_for_status()
except requests.exceptions.RequestException as e:
print(f"Request failed: {e}")
百度使用BD09坐标系,与WGS84/GCJ02不同,需转换时可用官方坐标转换API。
获取某城市所有星巴克门店的经纬度
def get_all_pois(query, region, ak, page_size=20):
all_pois = []
page_num = 0
while True:
url = f"http://api.map.baidu.com/place/v2/search?query={query}®ion={region}&page_size={page_size}&page_num={page_num}&ak={ak}"
data = requests.get(url).json()
if not data.get("results"):
break
all_pois.extend(data["results"])
page_num += 1
return pd.DataFrame([
{
"name": poi["name"],
"address": poi.get("address", ""),
"lng": poi["location"]["lng"],
"lat": poi["location"]["lat"]
} for poi in all_pois
])
# 执行并保存
starbucks_df = get_all_pois("星巴克", "上海", ak)
starbucks_df.to_excel("starbucks_shanghai.xlsx", index=False)
city
本文演示了Python调用百度地图API的核心方法。实际应用中建议: 1. 做好数据缓存避免重复请求 2. 商业项目考虑购买企业级服务 3. 结合可视化库(如folium)进行结果展示
注意:本文代码示例需替换有效AK后使用,请遵守百度地图API使用条款。 “`
文章结构说明: 1. 从基础到进阶分步骤讲解 2. 包含实际可运行的代码片段 3. 强调注意事项和最佳实践 4. 提供完整的业务场景案例 5. 补充常见问题解决方案
可根据实际需要调整API参数或扩展更多功能模块。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。