zoukankan      html  css  js  c++  java
  • Python调用百度地图和高德地图API批量获取国内城市地址经纬度坐标

    1 数据准备

    经过尝试,百度地图API需要输入城市中文名称才能获取对应经纬度坐标,因此先将英文的城市名称转为中文

    一共347个城市

    由于在测试过程中发现高德和百度地图API分别有几个城市的地址无法获取经纬度,但是恰好能够互补,因此使用两种API联合获取347个国内城市的经纬度

    需要注意的是该经纬度不是WGS84经纬度,有一定偏差,但是关系不大。

    2 高德地图API

    1 先注册成为开发者

    https://lbs.amap.com/  

    查看地理编码的输入和返回参数:

    https://lbs.amap.com/api/webservice/guide/api/georegeo

     代码如下:

    import requests
    import json
    import pprint
    import pandas as pd
    import csv
    import pprint
    
    key='**********' #填入自己的key
    #构建函数
    def getlnglat(address):
        url='https://restapi.amap.com/v3/geocode/geo'
        params = {'key':key,
              'address':address}
        res = requests.get(url, params)
        json_data = json.loads(res.text)
        return json_data
    
    #打开cs
    inpath=r"H:2Course0DATA表格cityname.xlsx"
    outpath=r"H:2Course0DATA表格citylnglat_Gaode.xlsx"
    df = pd.read_excel(inpath,encoding = 'UTF-8')
    df['lng'] = 'collng'#创建新列存放经度
    df['lat'] = 'collat'#创建新列存放纬度
    for i in df.values:
        b = i[2]  #第一列的地址 .strip("'")
        ind=i[0]
        print(b)
        json_data=getlnglat(b)
        i[7] = json_data['geocodes'][0]['location']#获取经纬度
        df['lng'][ind]=float(i[7].split(",")[0])#经度
        df['lat'][ind]=float(i[7].split(",")[1])#纬度
        pprint.pprint(json_data)
    df.to_excel(outpath)

    输出结果为:

     

    3 百度地图API

     参考另一篇文章:https://www.cnblogs.com/icydengyw/p/11795998.html

    代码如下:

    import requests,csv
    import pandas as pd
    import json
    import requests
    import json
    import pprint
    ak = '*******'#ak需要去百度地图申请
    
    def getlnglat(address):
        url = 'http://api.map.baidu.com/geocoder/v2/?address={}&output=json&ak={}'.format(address,ak)
        res = requests.get(url)
        json_data = json.loads(res.text)
        return json_data
    
    inpath=r'H:2Course0DATA表格cityname.xlsx'
    outpath=r'H:2Course0DATA表格citylinlat_Baidu.xlsx'
    df = pd.read_excel(inpath,encoding = 'UTF-8')
    df['lng'] = 'collng'#创建新列存放经度
    df['lat'] = 'collat'#创建新列存放纬度
    for i in df.values:
        b = i[2]  #第一列的地址 
        print(b)
        ind=i[0]
        json_data=getlnglat(b)
        i[7] = json_data['result']['location']['lng']#获取经度并写入
        i[8] = json_data['result']['location']['lat']#获取纬度并写入
        df['lng'][ind]=float(i[7])
        df['lat'][ind]=float(i[8])
        print(i)
    df
    df.to_excel(outpath)

    运行结果:

     

  • 相关阅读:
    LuoguP1016 旅行家的预算 (贪心)
    LuoguP2254 [NOI2005]瑰丽华尔兹 (单调队列优化DP)(用记忆化过了。。。)
    LuoguP2876 [USACO07JAN]解决问题Problem Solving (区间DP)(未完成)
    Luogu3275 [SCOI2011]糖果 (差分约束)
    Luogu1993 小K的农场 (差分约束)
    Luogu4427 [BJOI2018]求和 (树上差分)
    LuoguP1516 青蛙的约会 (Exgcd)
    POJ3903Stock Exchange (LIS)
    LuoguP1020 导弹拦截 (LIS)
    线性筛
  • 原文地址:https://www.cnblogs.com/icydengyw/p/13961837.html
Copyright © 2011-2022 走看看