||
最近在做保护生物学的论文,查论文的过程中发现之前的麋鹿分布图是手绘的,看起来真的是。。。,因此我决定重新画一下这个图。
这个地图的绘制我分为两个部分:(一)调用百度API查找地点的经纬度,(二)用python的basemap模块绘制分布图。
我手录了麋鹿数据(点击下载)。
在使用百度地图之前,我们需要先注册、申请一个百度地图的API,具体操作见教程。
import json
from urllib.request import urlopen, quote
import requests
import pandas as pd
pd.set_option('display.max_columns', None)
# 显示所有的行
def getlnglat(address):
url = 'http://api.map.baidu.com/geocoder/v2/'
output = 'json'
ak = '99flG4xrb8OrWR2fOGBfLxqB9DdkhC90'
# 这个是申请的百度地图API的密码
add = quote(address)
#由于本文城市变量为中文,为防止乱码,先用quote进行编码
uri = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + ak
req = urlopen(uri)
res = req.read().decode()
#将其他编码的字符串解码成unicode
temp = json.loads(res)
#对json数据进行解析
return temp
milu = pd.read_excel('miludistrbute.xlsx')
milu['lat'] = None
milu['lon'] = None
# 添加经纬度的两列,在R里面可以不用提前做俩空的列的,直接添加就行了,但是python里还是要加。
for i in range(0,len(milu.index)):
if 'result' in getlnglat(milu.iloc[i][3]):
# 这个是防止有些地址查询不到,就会被迫中断循环
milu['lon'][i] = getlnglat(milu.iloc[i][3])['result']['location']['lng']
milu['lat'][i] = getlnglat(milu.iloc[i][3])['result']['location']['lat']
print(milu.iloc[i])
else:
continue
milu.to_excel('milu1.xlsx')
# 最后保存一下这个数据
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-20 07:39
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社