欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python调用高德API实现地址转经纬度

程序员文章站 2022-06-04 16:21:31
...

python调用高德API实现地址转经纬度

目的

为了获取批量地址的经纬度而生的代码~

过程

网上资源

网上也有一部分在线的网站已经实现了的,但是不是很准。
比如:https://map.yanue.net/
python调用高德API实现地址转经纬度
这种呢,部分地区还行,但是有一些是无法识别准确的?
怎么搞呢?

思考

关键字:地址、经纬度、批量?

地址和经纬度能够让你想到什么?
地图?百度地图?高德地图?

批量能让你想到什么?
程序、脚本、代码实现呗?

说干就干

由于之前小编搞过高德API,那咱去查一下撒~
翻一下接口,就找到了~

接口如下:
https://lbs.amap.com/api/webservice/guide/api/georegeo

python调用高德API实现地址转经纬度

look一下怎么实现噻?

python调用高德API实现地址转经纬度
欧了,拼接字符串就好了嘛~

代码语言选择

用啥子语言搞嘞?

java、python?

搞个脚本就好了呀,所以选择了python

参考代码如下:

初版
import requests
import pandas as pd
import csv
data = pd.read_csv('c.csv',engine='python')#导入地址的csv文件
data = data['Address']#选择地址列
lis = []
def gaode():
    for i in data:
        para = {
            'key':'507f03ab300b8aa0225a0924e7d12100',
            'address':i,
            'city':'河南省洛阳市'
        }
        url = 'https://restapi.amap.com/v3/geocode/geo?'
        req = requests.get(url,para)
        req = req.json()
        if req['infocode']=='10000':
            try:
                w = req['geocodes'][0]['formatted_address']
                z = req['geocodes'][0]['location']
                print(w)
                print(z)
                d = (w, z)
                lis.append(d)
            except Exception as e:
                print (e)
            continue

    t = ['位置','经纬度']
    with open('tset.csv', 'w', newline='')as f:
        writer = csv.writer(f)
        writer.writerow(t)
        writer.writerows(lis)
if __name__ == '__main__':
    gaode()

有BUG~

什么bug呢?批量太多了,就不好使了~

因为是是读取文件,全部放到集合里头了,并且一次性写入~

那么怎么解决呢?

批量,批量,批量撒

新增批量参数

import requests
import pandas as pd
import csv
data = pd.read_csv('a.csv',engine='python')#导入地址的csv文件
data = data['Address']#选择地址列
lis = []
def gaode(cnt):
    flag = 0
    # 写表头
    writerCsv(0,lis)

    print(len(data))

    # 遍历数据,调用接口,写数据
    for i in data:
        para = {
            'key':'507f03ab300b8aa0225a0924e7d12100',
            'address':i
            #'city':'河南省洛阳市'
        }
        url = 'https://restapi.amap.com/v3/geocode/geo?'
        req = requests.get(url,para)
        req = req.json()
        print(req)
        if req['infocode']=='10000':
            try:
                w = req['geocodes'][0]['formatted_address']
                z = req['geocodes'][0]['location']
                # print(w)
                # print(z)
                d = (w, z)
                lis.append(d)
                flag = flag + 1
            except Exception as e:
                print (e)
            # continue
            if flag == cnt:
                # print(lis)
                writerCsv(1, lis)
                lis.clear()
                flag = 0
            else:
                continue
    # print(lis)
    writerCsv(1,lis)
def writerCsv(flag, list):
    if flag == 0 :
        t = ['位置','经纬度']
        # with open('地址02_经纬度坐标.csv', 'w', newline='')as f:
        with open('nanyang_经纬度坐标.csv', 'a+', newline='')as f:
            writer = csv.writer(f)
            writer.writerow(t)
            # writer.writerows(list)
    else:
        with open('nanyang_经纬度坐标.csv', 'a+', newline='')as f:
            writer = csv.writer(f)
            writer.writerows(list)

if __name__ == '__main__':
    gaode(500)

ok,大功告成撒~

小结

其实代码没有那么难,你要知道自己想要什么,逐渐去完善就好了~

时刻记得自己目标,不要跑偏了就好啦~

相关标签: Python python