利用百度地图API进行地理编码

本文介绍了如何使用百度地图、高德地图和腾讯地图的API获取给定地址的经纬度,包括参数设置、精度评估和申请APIkey的过程。通过示例展示了如何通过Python脚本批量获取小区坐标,并处理可能出现的精度问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在之前的项目中,遇到给定小区或者零售户的地址,获取他们经纬度的需求,借助百度地图、高德地图等地图平台,提供的API可以实现该目的。

坐标获取平台

百度地图:逆地理编码 gc | 百度地图API SDK

高德地图:地理/逆地理编码-API文档-开发指南-Web服务 API | 高德地图API

腾讯地图:WebService API | 腾讯位置服务

高德、腾讯地图坐标系转百度坐标系:

Web服务API | 百度地图API SDK

百度地图示例

数据样例

调用地图接口时要传入相应的参数,这里优先使用省、市、区、小区名称合成参数列,作为接口传入的参数,样例数据见下方截图。该关键列无法解析坐标,或精度差,可以使用省、市、区、地址合成参数列。

获取key

地图平台提供的接口,需要申请对应的key才能使用,key的申请参考对应地图平台提供的帮助文档。个人申请key的调用次数受限,可以企业的名义申请,调用次数较多,基本满足需要。

百度地图坐标获取

利用百度地图进行小区坐标获取(坐标的获取以百度为主),会返回小区的经度、纬度、精度、类型。精度数值为1-100,越高则表明坐标误差越小。对应含义见下图。

类型表示该坐标对应的地址类型,当类型为地产小区、门址、商务大厦且精度大于90则判定该坐标合格可以使用。

# 导库
import json
from urllib.request import urlopen, quote
import requests
import pandas as pd
import numpy as np
import datetime
import time
from fake_useragent import UserAgent


# 获取经纬度坐标,坐标精度
def getlnglat(address):
    ua = UserAgent()

    ua_get = ua.random

    header_get = {
        'User-Agent': ua_get,
        'Connection': "close"
    }
    # 百度提供的接口
    url = 'http://api.map.baidu.com/geocoding/v3/?address='
    # 数据
    output = 'json'
    #KEY要去百度地图开发者平台申请
    ak = 'key'
    # 通过百度创建应用得到ak,记得写为浏览器端,然后写*
    address = quote(str(address))
    uri = url + address + '&output=' + output + "&ak=" + ak
    try:
        req = requests.get(uri, headers=header_get).text
        #         print( req)

        # res = req.read().decode()
        time.sleep(0.1)
        # print(res)
        temp = json.loads(req)
        if temp['status'] == 0:
            # 精度
            lat = temp['result']['location']['lat']
            # 纬度
            lng = temp['result']['location']['lng']

            #  百度地图解析结果精度判断以字段comprehension的值为依据
            acc = temp['result']['comprehension']
            use = temp['result']['level']
        else:
            lat = 0
            lng = 0
            acc = "无"
            use = '无'
        # return lat, lng,acc
        return lat, lng, acc, use


    except Exception as e:
        print(e)
        #         print(data['地址1'].iloc[i])
        time.sleep(3)
        getlnglat(address)

#需要采集坐标的小区数据,数据案例见文件夹下“小区样表.xlsx”
data = pd.read_excel('地址样表.xlsx')

# data['地址']=data['area_name']+data['com_name']
# 坐标获取的进度条
def process_bar(percent, start_str='', end_str='', total_length=0):
    bar = ''.join(["\033[31m%s\033[0m" % '   '] * int(percent * total_length)) + ''
    bar = '\r' + start_str + bar.ljust(total_length) + ' {:0>4.1f}%|'.format(percent * 100) + end_str
    print(bar, end='', flush=True)


jwd = []
# 获取所有的小区经纬
shuju = len(data['地址'])
for i in range(shuju):
    time.sleep(0.1)
    end_str = '100%'
    process_bar(i / (shuju), start_str='', end_str=end_str, total_length=15)
    a = getlnglat(data['地址'].iloc[i])
    #     print(a)
    jwd.append(a)
data['经纬度'] = jwd

# 保存
data.to_excel('QYJJSJ.xlsx')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值