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

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

目的

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

过程

网上资源

网上也有一部分在线的网站已经实现了的,但是不是很准。
比如:https://map.yanue.net/
在这里插入图片描述
这种呢,部分地区还行,但是有一些是无法识别准确的?
怎么搞呢?

思考

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

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

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

说干就干

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

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

在这里插入图片描述

look一下怎么实现噻?

在这里插入图片描述
欧了,拼接字符串就好了嘛~

代码语言选择

用啥子语言搞嘞?

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,大功告成撒~

小结

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

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MrZhangBaby

请博主喝杯奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值