怎么用Python获取百度地图各点的经纬度信息

发布时间:2021-09-14 14:52:33 作者:chen
来源:亿速云 阅读:260
# 怎么用Python获取百度地图各点的经纬度信息

## 引言
在GIS开发、位置分析或路径规划等场景中,获取地理坐标(经纬度)是基础需求。百度地图作为国内主流地图服务商,提供了丰富的API接口。本文将详细介绍如何通过Python调用百度地图API批量获取地点经纬度信息。

---

## 一、准备工作

### 1.1 注册百度地图开发者账号
1. 访问[百度地图开放平台](https://lbsyun.baidu.com/)
2. 完成开发者认证(个人/企业)
3. 进入控制台创建应用,获取**AK(API Key)**

### 1.2 安装必要库
```bash
pip install requests pandas

1.3 接口选择

百度地图提供两类核心API: - 地理编码API:将地址转换为经纬度 - 地点检索API:通过关键词搜索POI点


二、地理编码API实战

2.1 基础请求示例

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}")

2.2 批量处理地址

结合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)

三、地点检索API进阶用法

3.1 矩形区域检索

通过bounds参数限定搜索范围:

def poi_search(query, region, ak):
    url = f"http://api.map.baidu.com/place/v2/search?query={query}&region={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']}")

3.2 多边形区域检索(需高级权限)

使用geotable接口实现复杂形状区域检索。


四、性能优化与注意事项

4.1 请求限流处理

百度API默认QPS为50(认证后可达更高):

import time

for address in address_list:
    get_latlng(address, ak)
    time.sleep(0.02)  # 控制请求频率

4.2 错误处理机制

完善异常捕获:

try:
    response = requests.get(url, timeout=5)
    response.raise_for_status()
except requests.exceptions.RequestException as e:
    print(f"Request failed: {e}")

4.3 坐标系说明

百度使用BD09坐标系,与WGS84/GCJ02不同,需转换时可用官方坐标转换API。


五、完整案例演示

5.1 需求场景

获取某城市所有星巴克门店的经纬度

5.2 实现代码

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}&region={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)

六、常见问题解答

Q1: 返回”AK参数不存在”怎么办?

Q2: 如何提升解析精度?

Q3: 免费额度是多少?


结语

本文演示了Python调用百度地图API的核心方法。实际应用中建议: 1. 做好数据缓存避免重复请求 2. 商业项目考虑购买企业级服务 3. 结合可视化库(如folium)进行结果展示

注意:本文代码示例需替换有效AK后使用,请遵守百度地图API使用条款。 “`

文章结构说明: 1. 从基础到进阶分步骤讲解 2. 包含实际可运行的代码片段 3. 强调注意事项和最佳实践 4. 提供完整的业务场景案例 5. 补充常见问题解决方案

可根据实际需要调整API参数或扩展更多功能模块。

推荐阅读:
  1. js如何根据百度地图提供经纬度计算两点距离
  2. python怎么通过百度地图API获取某地址的经纬度

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:spring中的依赖注入的简单介绍

下一篇:如何学习Android Studio开发

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》