利用python,根据地址查询所属街道(高德地图)

 

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

第一步:根据地址获取其坐标(高德地理编码)

第二步:根据坐标获取其详细地址信息(高德逆地理编码)

第三步:结果输出到CSV文件中(犹豫我是批量查询,所以每查询一万次就写入一次数据)

1-29w.csv文件格式如下:

 输出结果文件如下:

 完整代码如下:代码中key秘钥是本人自己的,如果你需要执行,请替换上你自己的秘钥

申请地址:高德开放平台 | 高德地图API

import requests
import pandas as pd
from urllib.parse import urlencode



def parse(): #读文件
    #total_data = pd.read_csv('data.csv',index_col=1,header=1,usecols=['yhbh','yddz'],delimiter=',')
    total_data = pd.read_csv('1-29w.csv',index_col = False)
   
    #for i in range(len(total_data)):
    
    #data = np.array(total_data) 
    yhbh_list=total_data['yhbh']
    yddz_list=total_data['yddz']
    return yhbh_list,yddz_list
    #total_list_data = total_data['yddz']
    #return total_list_data


def search_location(address): #根据地址搜索坐标
    params = {
           'key': 'ceb4faac0f812edab24d1855b8b26b7c',
           'address': address,
           'city': '广东'
              }
    base_url = 'https://restapi.amap.com/v3/geocode/geo?'+str(urlencode(params,encoding='UTF-8'))
    #response = requests.get(url=base_url, params=params)
    response = requests.get(url=base_url)
    json_data = response.json()
    #print(json_data)
    if json_data['status'] == '1' and len(json_data['geocodes']) > 0:
        #print(json_data['geocodes'][0]['location']) #高德坐标
        # 利用location搜索township
        township_str = search_address_detail(location=json_data['geocodes'][0]['location']) #调用函数
        #print('township_str:'+str(township_str))
        return township_str 
    else:
        return '获取地址高德坐标失败'
    
   


def search_address_detail(location): #输入高德坐标,搜索
    params = {#'location': location,
              'key': 'ceb4faac0f812edab24d1855b8b26b7c',
              'radius':'50',
              'batch':'false',
              'roadlevel':'0',
              'extensions':'all'
              }
    
    base_url = 'https://restapi.amap.com/v3/geocode/regeo?'+str(urlencode(params,encoding='UTF-8'))+str('&location='+str(location))
    response = requests.get(url=base_url)
    json_data = response.json()
    if json_data['status'] == '1':
        if json_data['regeocode']['addressComponent']['township']:
            return json_data['regeocode']['addressComponent']['township'] #返回街道信息
        else:
            return '请求根据高德坐标获取街道信息成功,但没有查询到街道信息'
    else:
        return '请求根据高德坐标获取街道信息失败'
    #return 'errorSearchAddress', json_data


if __name__ == '__main__':
    df = pd.DataFrame(columns=['yhbh', 'yddz', 'jiedao'])
    yhbh_list,yddz_list = parse() #读取文件
    #address_list=['深圳市南山区珠光村']
    index = 0
    yddz_len=len(yddz_list)
    try:
        for i in range(len(yddz_list)):   
            # 搜索location      
            township_str= search_location(yddz_list[i])
            #将查询的数据插入到dataframe中,以便后面输出到csv文件中
            df.loc[index] = [yhbh_list[i],yddz_list[i], township_str]
        
            print('文件有%s条数据,成功请求了%s条数据,街道信息为:%s'%(yddz_len,index,township_str))
            if i%10000==0 and i!=0: #每查询一万条数据,就输出到csv文件中,采取追加方式输出
                df.to_csv('jiedao1-29w.csv',mode='a', index=0,header=False)#第2个开始,就不需要表头了
                print('第%s个一万条数据,输出csv成功'%(i+1))
                df=df.drop(index=df.index)#清空dataframe数据,避免重复输出前面插入df的数据
        
            elif i%10000==0 and i==0:
                df.to_csv('jiedao1-29w.csv',mode='a', index=0) #输出第一个文件需要带有表头
                print('第%s个一万条数据,输出csv成功'%(i+1))
                df=df.drop(index=df.index)#清空dataframe数据,避免重复输出前面插入df的数据
            index = index + 1
      
        df.to_csv('jiedao1-29w.csv',mode='a', index=0,header=False)
        print('最后一个一万条数据,输出csv成功')
    except Exception as e:  #如果报错了,报错之前查询的数据,也输出到CSV文件中
        print('报错信息:'+str(e))
        df.to_csv('jiedao1-29w.csv',mode='a', index=0,header=False)
        print('报错了,存储CSV成功')
    

  • 6
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值