java map 批量写到 csv_使用高德地图api进行地址批量转换并存入csv文件

该博客介绍了如何利用Python编写代码,结合高德地图API进行地址批量转换。首先在高德开放平台创建应用获取API key,然后通过编写请求函数和逻辑处理函数,将经纬度批量转换为地址,最终将结果写入CSV文件。
摘要由CSDN通过智能技术生成

申请一个web服务的key

进入高德开放平台

右上角进入控制台,进入应用管理->我的应用

41119d2522fa853d4c3e9df0bfb96d50.png

创建一个新应用

名称和类型随便填即可,自己能区分的出来

7811e5caf6d76a99fd5a7930dd1e6285.png

添加一个key

cc1b9a15b314958d0c36d36f82438e30.png

名称按照自己的要求填

服务平台需要选Web服务(因为我们本来就是请求web服务的接口)

3e62ae34e8f9394d96bc7c9c422ba575.png

之后我们就拥有了一个key值,可以直接复制拿来用

ee874750683fff7343ed3c55297743fa.png

进入高德api的地址并使用示例

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

找到右侧边的目录,点击逆地址编码的锚点,就可以找到对应的api地址:

880777aa64673cbd338b240f7422273a.png

找到下方的服务示例(正常来说我们只需要经纬度即可):

336e58578220562f3febefc75e3d32cf.png

点击运行得到示例效果:

76ddce1f9035c946e4931843ce101262.png

编写python代码进行批量转换import requests

import json

import re

import pandas as pd

import os

import csv

class AddrCoordConver:

def __init__(self):

self.headers = {

"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36"

}

self.key_list = [

"key1",

"key2",

"key3",

"key4",

"key5",

"key6",

"key7"

]

# 默认的key索引

self.key_index = 0

# 读取的索引

self.index = 0

# 默认的接口数据

self.url = 'https://restapi.amap.com/v3/geocode/regeo?output=json&location={0},{1}&key={2}&radius=1000&extensions=base'

# 用key去填充,不用再次填充

self.url = self.url.format("{}", "{}", self.key_list[0])

# 示例数据

self.coordinate_list = [

{"lng": "113.256604", "lat": "23.144121"},

{"lng": "113.58603", "lat": "22.134642"},

{"lng": "115.299897", "lat": "22.845191"},

{"lng": "119.21103", "lat": "26.025337"},

{"lng": "106.686616", "lat": "26.635816"},

{"lng": "115.60030365", "lat": "22.88867569"},

{"lng": "114.23753357", "lat": "23.17083931"},

{"lng": "110.422377", "lat": "21.203437"},

{"lng": "110.393099", "lat": "21.252336"}

]

# 接口请求函数

def request_func(self, url):

requests.adapters.DEFAULT_RETRIES = 5 # 增加重连次数

s = requests.session()

s.keep_alive = False # 关闭多余连接

responce = requests.get(url, headers=self.headers)

if responce.status_code == 200:

return responce.text

else:

return None

# 逻辑处理函数

def conversion(self, coordinate_list):

len_coordinate_list = len(coordinate_list)

for coordinate in coordinate_list[self.index:]:

trans_dict = {}

# 每次用经度和维度填充地址

api_url = self.url.format(coordinate[0], coordinate[1])

load_dict = json.loads(self.request_func(api_url))

if load_dict["status"] == "1" and load_dict["infocode"] == "10000":

trans_dict["lng"] = coordinate[0] # 经度

trans_dict["lat"] = coordinate[1] # 维度

trans_dict["address"] = load_dict["regeocode"]["formatted_address"] # 地址

if not os.path.exists('output.csv'):

with open('output.csv', 'wb') as f:

csv.writer(f)

# 将字典写入DataFrame

df = pd.DataFrame(trans_dict, index=[0])

df.to_csv('./output.csv', mode='a', encoding='utf-8', header=False, index=False)

print("index: ", self.index, trans_dict)

self.index += 1

if self.index >= len_coordinate_list:

print("数据写入完成")

exit(0)

elif load_dict["status"] == "0" and load_dict["infocode"] == "10003":

print("访问已超出日访问量, 需要更换key")

print("当前key: ", self.key_list[self.key_index])

key_old = self.key_list[self.key_index]

# key索引 +1

self.key_index += 1

# 判断是否超出列表范围

if self.key_index < len(self.key_list):

# 换一个key, print(re.search("&key=(.*?)&", self.url).group(1))

self.url = re.sub(key_old, self.key_list[self.key_index], self.url)

print("更换后的新key: ", self.key_list[self.key_index])

# 重新调用(不是重新开始,需要对地址为空进行判断,相当于可以中断)

# 开始先将 所有的数据存到sqline里面,跑完之后统一导出写入表里,就可以判断数据不为空就不用重新处理?

self.index += 1

self.conversion(coordinate_list[self.index:])

else:

print("key用完了,请联系开发者.")

exit(0)

else:

print("接口数据获取失败!")

exit(0)

# main函数

def main(self):

# .apply()

csv_data = pd.read_csv("./data_new_1k.csv", encoding="utf-8")

self.conversion(csv_data.values)

if __name__ == '__main__':

addr_coord_conver = AddrCoordConver()

addr_coord_conver.main()

本文章修改于 2019/11/01 16:16:27

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值