实习篇 - 调用腾讯地图API实现地址经纬度相互转换

任务:根据所给公司名称及地址查询其经纬度。

任务细节:

1、给的是word文档,为了方便脚本处理,转移到Excel中。python读取公司名称和地址。(百度很多方法)

2、调用腾讯地图API

      地址解析(地址转坐标)    ,该文档有详细的调用细节。简单来说就是需要三个东西:开发者key、地址和区域(可以不要)。

      开发者key,是调用脚本的一个通行证,可以百度一下如何申请。

      地址就是通过文件获取的公司地址,区域是地址所在的大区,例如北京,广州深圳等,区域可以不写。代码如下:

developer_key = "ZIUBZ-EK2WX-7FY4Y-TBVXN-LJRS2-SGB2A" #API控制台KEY管理中的KEY, 申请的开发者key
def address_to_coordinate(address, region=''):
    parameters = {'address': address, 'key': developer_key, 'region': region}
    base = "http://apis.map.qq.com/ws/geocoder/v1/?"  # 地址解析,地址转坐标
    response = requests.get(base, parameters)
    answer = response.json()
    if(answer['status'] == 0):  #数据采集成功
       data = {
            'lng':answer['result']['location']["lng"], # 经度
            'lat':answer['result']['location']["lat"]  # 纬度
        }
    else:
       data = {'lng':'error', 'lat':'error', 'error':answer['status']}

    print(data)
    return data, answer['status']

      可以看到将上述的三个参数传入,直接按照脚本请求结果,若查询成功则返回字典的answer['status'] == 0,否则自行查阅错误关键字。对传回数据进行解析,获取经纬度存储到data.

3、将结果写入Excel,这个百度很简单

整体代码:


import requests
developer_key = "ZIUBZ-EK2WX-7FY4Y-TBVXN-LJRS2-SGB2A" #API控制台KEY管理中的KEY, 申请的开发者key

# 通过地址获取经纬度
def address_to_coordinate(address, region_test=''):
    parameters = {'address': address, 'key': developer_key, 'region': region_test}
    base = "http://apis.map.qq.com/ws/geocoder/v1/?"  # 地址解析,地址转坐标
    response = requests.get(base, parameters)
    answer = response.json()
    if(answer['status'] == 0):  #数据采集成功
       data = {
            'lng':answer['result']['location']["lng"], # 经度
            'lat':answer['result']['location']["lat"]  # 纬度
        }
    else:
       data = {'lng':'error', 'lat':'error', 'error':answer['status']}

    print(data)
    return data, answer['status']


import pandas as pd
from pandas import DataFrame
import time

def readExcel(filename, sheetname):
    data = pd.read_excel(filename, sheetname)
    # print(data)
    # 通过地址获取经纬度,并修改
    for index in range(0, len(data)):
        # 开发者并发有限制,根据情况来设置
        time.sleep(0.2)
        # print(data.loc[index])
        address = data.loc[index, '公司']   # 切割具体地址
        region_x = data.loc[index, '区域']  # 切割具体区域
        lng_lat, state = address_to_coordinate(address, region_x)
        data.loc[index, '方式'] = 'comepy'
        if not state == 0: # 若查询错误,更改为实际地址
            address = data.loc[index, '地址']  # 切割具体地址
            lng_lat, state = address_to_coordinate(address, region_x)
            data.loc[index, '方式'] = 'address'
        data.loc[index, '经度'] = lng_lat['lng']
        data.loc[index, '纬度'] = lng_lat['lat']
    # print(data)
    # 保存修改
    DataFrame(data).to_excel(filename, sheet_name=sheetname, index=False, header=True)


if __name__ == '__main__':
    # address_to_coordinate("江苏省苏州市吴中区长蠡路99号")
    filename = '/Users/didi/Documents/xumengwen/map_xy.xlsx'
    sheetname = 'Sheet1'
    readExcel(filename, sheetname)


 

你可能感兴趣的:(实习,数据挖掘,python)