ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

poi兴趣点数据获取

2022-03-18 23:02:21  阅读:209  来源: 互联网

标签:sheet write 获取 result poi poilist 数据 兴趣


 数据下载链接:百度云下载链接

由于小论文方向为电动汽车的路径规划,所以需要用到充电站的数据,因此需要从高德地图上爬充电站数据。本文学习自这篇文章

高德有一个开放平台,点击进入,注册(登录)(有了账号之后返回首页)-控制台-应用管理-我的应用-添加,接下来会出现如下界面:

 

在服务平台的选项中,选择Web服务,这一步很重要!

选完之后可以在界面中得到你的key

接下来需要知道需要查询城市以及POI分类的代码,进入此界面下载参考文档

在之前所说的参考文章中,我找到了作者用来爬数据的代码

from urllib.parse import quote
from urllib import request
import json
import xlwt
 
 
# 根据城市名称和分类关键字获取poi数据
def getpois(cityname, keywords):
    i = 1
    poilist = []
    while True:  # 使用while循环不断分页获取数据
        result = getpoi_page(cityname, keywords, i)
        # print(result)
        result = json.loads(result)  # 将字符串转换为json
        if result['count'] == '0':
            break
        hand(poilist, result)
        i = i + 1
    return poilist
 
 
# 数据写入excel
def write_to_excel(poilist, cityname, classfield):
    # 一个Workbook对象,这就相当于创建了一个Excel文件
    book = xlwt.Workbook(encoding='utf-8', style_compression=0)
    sheet = book.add_sheet(classfield, cell_overwrite_ok=True)
 
    # 第一行(列标题)
    sheet.write(0, 0, 'id')
    sheet.write(0, 1, 'name')
    sheet.write(0, 2, 'location')
    sheet.write(0, 3, 'pname')
    sheet.write(0, 4, 'pcode')
    sheet.write(0, 5, 'cityname')
    sheet.write(0, 6, 'citycode')
    sheet.write(0, 7, 'adname')
    sheet.write(0, 8, 'adcode')
    sheet.write(0, 9, 'address')
    sheet.write(0, 10, 'type')
    sheet.write(0, 11, 'typecode')
    sheet.write(0, 12, 'gridcode')
    sheet.write(0, 13, 'entr_location')
    sheet.write(0, 14, 'timestamp')
    sheet.write(0, 15, 'tel')
    sheet.write(0, 16, 'postcode')
    sheet.write(0, 17, 'tag')
    sheet.write(1, 18, 'shopid')
    sheet.write(1, 19, 'shopinfo')
 
    for i in range(len(poilist)):
        # 每一行写入
        sheet.write(i + 1, 0, poilist[i]['id'])
        sheet.write(i + 1, 1, poilist[i]['name'])
        sheet.write(i + 1, 2, poilist[i]['location'])
        sheet.write(i + 1, 3, poilist[i]['pname'])
        sheet.write(i + 1, 4, poilist[i]['pcode'])
        sheet.write(i + 1, 5, poilist[i]['cityname'])
        sheet.write(i + 1, 6, poilist[i]['citycode'])
        sheet.write(i + 1, 7, poilist[i]['adname'])
        sheet.write(i + 1, 8, poilist[i]['adcode'])
        sheet.write(i + 1, 9, poilist[i]['address'])
        sheet.write(i + 1, 10, poilist[i]['type'])
        sheet.write(i + 1, 11, poilist[i]['typecode'])
        sheet.write(i + 1, 12, poilist[i]['gridcode'])
        sheet.write(i + 1, 13, poilist[i]['entr_location'])
        sheet.write(i + 1, 14, poilist[i]['timestamp'])
        sheet.write(i + 1, 15, poilist[i]['tel'])
        sheet.write(i + 1, 16, poilist[i]['postcode'])
        sheet.write(i + 1, 17, poilist[i]['tag'])
        sheet.write(i + 1, 18, poilist[i]['shopid'])
        sheet.write(i + 1, 19, poilist[i]['shopinfo'])
 
    # 最后,将以上操作保存到指定的Excel文件中
    book.save(r'' + cityname + "_" + classfield + '.xls')
 
 
# 将返回的poi数据装入集合返回
def hand(poilist, result):
    # result = json.loads(result)  # 将字符串转换为json
    pois = result['pois']
    for i in range(len(pois)):
        poilist.append(pois[i])
 
 
# 单页获取pois
def getpoi_page(cityname, keywords, page):
    req_url = poi_search_url + "?key=" + amap_web_key + '&extensions=all&keywords=' + quote(
        keywords) + '&city=' + quote(cityname) + '&citylimit=true' + '&offset=25' + '&page=' + str(
        page) + '&output=json'
    data = ''
    with request.urlopen(req_url) as f:
        data = f.read()
        data = data.decode('utf-8')
    return data
 
 
if __name__ == '__main__':
    # 获取城市分类数据
 
    amap_web_key = '你的key'  # 申请的key
    city_list = ["北京市"]  #可以修改对应的城市名或者代码
    poi_list = ['充电站']  #可以修改对应的POI分类名或者代码
 
    poi_search_url = "http://restapi.amap.com/v3/place/text"
    poi_boundary_url = "https://ditu.amap.com/detail/get/detail"
 
    # TODO 需要爬取的POI所属的城市名,以及分类名. (中文名或者代码都可以,代码详见高德地图的POI分类编码表)
    # TODO POI与城市编码网址 https://lbs.amap.com/api/webservice/download
    for city in city_list:
        for poi in poi_list:
            pois = getpois(city, poi)
            # 将数据写入excel
            write_to_excel(pois, city, poi)
    print('写入成功')

最后,为什么说之前申请的时候选择服务平台很重要呢

因为我最开始申请的时候选择的是web端,然后使用相应的key时运行代码一直出现下面的问题:

 重新申请“web服务平台”类型的key就可以解决这个问题啦! 

更多GIS教程学习与数据获取,可以关注​地理科学生态网

​地理科学数据网 www.csdn.store中富含各种地理科学数据,比如道路网数据、NPP净初级生产力数据、土地利用数据(二级分类)、乡镇边界、NDVI数据、地铁站点、气象数据(降雨量、气温、蒸散量、辐射、湿度、日照时数、风速)、径流量数据、30米土地利用二级分类数据、12.5米高精度DEM高程、2020年行政区划、10、30米NDVI数据、30m精度NPP净初级生产力、夜间灯光数据、统计年鉴、道路网、水系、景区医院等poi、三级流域矢量边界、地质灾害分布数据、30m土壤理化性质数据集、30mGDP柵格数据、30m人口柵格数据、30m精度植被类型数据、30m精度连续年份土地利用数据、GPP初级生产力数据、农田作物类型分布数据、自然保护区分布数据、高精度遥感影像数据、1:10万沙漠沙地分布矢量数据、蒸散发数据、降雨量气温蒸发数据、地表径流量、水汽压、土壤侵蚀数据等,有兴趣的去访问下。

标签:sheet,write,获取,result,poi,poilist,数据,兴趣
来源: https://blog.csdn.net/Remote_Sensinger/article/details/123586407

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有