Java教程

poi兴趣点数据获取

本文主要是介绍poi兴趣点数据获取,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

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

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

 

在服务平台的选项中,选择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万沙漠沙地分布矢量数据、蒸散发数据、降雨量气温蒸发数据、地表径流量、水汽压、土壤侵蚀数据等,有兴趣的去访问下。

这篇关于poi兴趣点数据获取的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!