使用高德API进行地址解析:省市县 --> 经纬度
官方文档:https://lbs.amap.com/api/webservice/guide/api/georegeo
参考:https://blog.csdn.net/zhusongziye/article/details/93783928
本文为原创项目
输入示例:
sample | address | date |
---|---|---|
S1 | 江苏省,南京市,溧水区 | 2022-04-12 |
S2 | 浙江省,杭州市,钱塘区 | 2022-04-18 |
S3 | 江苏省,南京市,溧水区 | 2022-04-18 |
S4 | 江苏省,南京市,溧水区 | 2022-04-11 |
S5 | 安徽省,马鞍山市,含山县 | 2022-04-15 |
其中日期格式:yyyy-MM-dd,编码格式:UTF-8
输出示例:
sample | date | lat | lon |
---|---|---|---|
S1 | 2022-04-12 | 31.651133 | 119.02828 |
S2 | 2022-04-18 | 30.270389 | 120.216211 |
S3 | 2022-04-18 | 31.651133 | 119.02828 |
S4 | 2022-04-11 | 31.651133 | 119.02828 |
S5 | 2022-04-15 | 31.735599 | 118.101421 |
代码:(注意使用自己的 高德 API key)
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# @Version : python3.7
# @Author : 雪垆
# @Project : GEE
# @File : gaode_api.py
# @Time : 2023/3/10 16:41
# @Software : PyCharm
import pandas as pd
import requests
from requests.exceptions import ReadTimeout, ConnectTimeout
from datetime import datetime
def transform(geo):
parameters = {"address": geo, "key":"xxxxxxx your key xxxxxxxxxxx" }
base = "https://restapi.amap.com/v3/geocode/geo"
loc = 0
try:
response = requests.get(base, parameters, timeout=2)
if response.status_code == 200:
answer = response.json()
loc = answer['geocodes'][0]['location']
else:
pass
except (ReadTimeout, ConnectTimeout):
pass
return loc
if __name__ == "__main__":
path = "data/xxx.data.input.csv"
data_input = pd.read_csv(path, sep=",", header=0, index_col=None, encoding='utf8')
data_result = pd.DataFrame(columns=(['sample', 'date', 'lat', 'lon']))
from tqdm import tqdm
for index, row in tqdm(data_input.iterrows()):
strdate = row["date"]
try:
a = datetime.strptime(strdate, "%Y-%m-%d %H:%M:%S")
date = datetime.strftime(a, '%Y-%m-%d')
address = row["address"]
address = address.replace(",", "") # 逗号变换,可有可无
address = address.replace(",", "")
# print(address)
loc = transform(address)
# 注意高德API返回坐标的顺序
longitude = loc.split(',')[0]
latitude = loc.split(',')[1]
new = pd.DataFrame({"sample": row["sample"], "date": date, "lat": latitude, "lon": longitude},
index=["0"])
data_result = data_result.append(new, ignore_index=True)
except:
pass
outpath = 'data/xxx.data_result.gaode.csv'
data_result.to_csv(outpath, index=False, header=True)
2023年3月13日