Black007的个人博客分享 http://blog.sciencenet.cn/u/Black007

博文

麋鹿分布图制作(一)——调用百度API查询地名的坐标

已有 2428 次阅读 2019-6-10 19:57 |个人分类:数据分析|系统分类:科研笔记

最近在做保护生物学的论文,查论文的过程中发现之前的麋鹿分布图是手绘的,看起来真的是。。。,因此我决定重新画一下这个图。

这个地图的绘制我分为两个部分:(一)调用百度API查找地点的经纬度,(二)用python的basemap模块绘制分布图。

我手录了麋鹿数据(点击下载)

在使用百度地图之前,我们需要先注册、申请一个百度地图的API,具体操作见教程


  1. import json

  2. from urllib.request import urlopen, quote

  3. import requests

  4. import pandas as pd

  5. pd.set_option('display.max_columns', None)

  6. # 显示所有的行

  7. def getlnglat(address):

  8.    url = 'http://api.map.baidu.com/geocoder/v2/'

  9.    output = 'json'

  10.    ak = '99flG4xrb8OrWR2fOGBfLxqB9DdkhC90'

  11.    # 这个是申请的百度地图API的密码

  12.    add = quote(address)

  13.    #由于本文城市变量为中文,为防止乱码,先用quote进行编码

  14.    uri = url + '?' + 'address=' + add  + '&output=' + output + '&ak=' + ak

  15.    req = urlopen(uri)

  16.    res = req.read().decode()

  17.    #将其他编码的字符串解码成unicode

  18.    temp = json.loads(res)

  19.    #对json数据进行解析

  20.    return temp

  21. milu = pd.read_excel('miludistrbute.xlsx')

  22. milu['lat'] = None

  23. milu['lon'] = None

  24. # 添加经纬度的两列,在R里面可以不用提前做俩空的列的,直接添加就行了,但是python里还是要加。

  25. for i in range(0,len(milu.index)):

  26.    if 'result' in getlnglat(milu.iloc[i][3]):

  27.    # 这个是防止有些地址查询不到,就会被迫中断循环

  28.        milu['lon'][i] = getlnglat(milu.iloc[i][3])['result']['location']['lng']

  29.        milu['lat'][i] = getlnglat(milu.iloc[i][3])['result']['location']['lat']

  30.        print(milu.iloc[i])

  31.    else:

  32.        continue

  33. milu.to_excel('milu1.xlsx')

  34. # 最后保存一下这个数据





https://blog.sciencenet.cn/blog-3412381-1184193.html

上一篇:介绍一些真菌常用的网站
下一篇:麋鹿分布图制作(二)—— 用Python和R在地图上打点
收藏 IP: 111.200.100.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-11-20 07:39

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部