高德POI抓取

高德开放平台地址:http://lbs.amap.com/api/webservice/guide/api/search

里面有好多关于交通的接口,在使用这些接口前需要注册一下账号

本次任务主要是为了获得城市的POI数据用来做功能区的划分,同时通过一些模拟地图请求获得POI的边界

首先要获得某个城市的所有POI数据,高德提供了多种POI查询接口,在这里我使用的是多边形搜索接口

由于接口每次返回的数据存在上线,要想获得更多的POI数据只有多次请求,在这里我们首先获得想要爬取区域的左上角和右下角的坐标,然后将其分成多个矩形网格,按网格和类别对POI进行多次查询,需要注意的是坐标小数点后不能超过6位

网格划分的代码如下

# -*- coding: utf-8 -*-
import requests
import json
import sys


reload(sys)
sys.setdefaultencoding('utf-8')




# 拼接发送请求
def getUrlToGaoDe(left_lng, left_lat, right_lng, right_lat, keyword, pagenum):
    url = "http://restapi.amap.com/v3/place/polygon?key=自己申请的KEY&polygon="
    url += str(round(left_lng, 6)) + "," + str(round(left_lat, 6)) + "|" + str(round(right_lng, 6)) + "," + str(
        round(right_lat)) + "&keywords=" + keyword + "&children=1&types=&offset=20&page=" + str(pagenum) + "&extensions=all"
    response = requests.get(url)
    g_json = json.loads(response.content)
    if 'status' in g_json and int(g_json['status']) == 1:
        return g_json




left_bottom = [114.093528,31.963774];  # 设置区域左上角坐标(高德坐标) 
right_top = [114.502769,31.638143];  # 设置区域右下角坐标(高德坐标) 
part_n = 64 # 设置区域网格
x_item = (right_top[0] - left_bottom[0]) / part_n;
y_item = (right_top[1] - left_bottom[1]) / part_n;
query = ['餐饮服务','风景名胜', '公共设施', '公司企业', '购物服务', '金融保险服务', '科教文化服务',
          '商务住宅', '生活服务','体育休闲服务','医疗保健服务', '政府机构及社会团体', '住宿服务'
         ]
wo = open("E:/poi/hefei_poi_from_gaode_1101_four.txt", "ab")
for i in range(part_n):
    for j in range(part_n):
        for keyword in query:
            left_lng = left_bottom[0] + i * x_item
            left_lat = left_bottom[1] + j * y_item
            right_lng = left_bottom[0] + (i + 1) * x_item
            right_lat = left_bottom[1] + (j + 1) * y_item
            res_json = getUrlToGaoDe(left_lng, left_lat, right_lng, right_lat, keyword, 1)
            if res_json:
                total_page = total_page = int(res_json['count']) / 20 + 1
                print "%s行业数据在%f,%f,%f,%f区域,共有%d页" % (keyword,left_lng,left_lat,right_lng,right_lat,total_page)
                if int(res_json['count'])!=0:
                    for pagenum in range(1,total_page + 1):
                        print "开始翻页查询,当前第%d页" % pagenum
                        sucess_json = getUrlToGaoDe(left_lng, left_lat, right_lng, right_lat, keyword, pagenum)
                        if sucess_json and 'pois' in sucess_json and sucess_json['pois']:
                            for ss in sucess_json['pois']:
                                # print "~".join([ss['name'], ss['id'], ss['type'], ss['location'], ss['pname'], ss['cityname'],
                                #                 ss['adname']])
                                wo.write("~".join(
                                    [ss['name'], ss['id'], ss['type'], ss['location'], ss['pname'], ss['cityname'],
                                     ss['adname']]) + "\n")
                                wo.flush()
wo.close()
# for ss in res_json['pois']:
#     print ss['name']

上面的代码会获得相关POI的一些信息,在这里我们只需要POI的ID,然后通过ID去模拟高德的地图请求,就会得到相关POI的详细信息,包括POI的边界信息

response = requests.get(url_two)
    if 'too fast' in response:
        pass
    else:
        if response.status_code==200:
           res_json = json.loads(response.content,encoding="utf-8")
           if 'data' in res_json and 'poi_list' in res_json['data']:
               for rating in res_json['data']['poi_list']:
                   for ty in rating['domain_list']:
                       if 'value' in ty and 'name' in ty:
                           if '_11' in ty['value'] and ty['name'].encode('utf-8') == 'aoi':
                               arr = ty['value'].encode('utf8').split('_')
                               res_arr = []
                               name = rating['name']
                               for ss in arr:
                                   p1 = ss.split(",")
                                   res_arr.append(tr.coordinates_transfer('gcj02ll', 'bd09ll', float(p1[0]), float(p1[1])))
                               wo.write(("{\"name\":\""+name+"\",\"geo\":"+str(res_arr)+"},").encode("utf-8").replace("\'","")+"\n")
                               wo.flush()
                               print "{\"name\":\""+name+"\",\"geo\":"+str(res_arr)+"},".replace("\'","")
wo.close()

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: 高德POI是指高德地图的兴趣点(Points of Interest,POI数据。Python是一种广泛使用的编程语言。那么,Python如何与高德POI数据进行交互呢? 首先,我们可以使用Python的requests库向高德POI接口发送HTTP请求,以获取POI数据。我们需要使用高德的开发者密钥,将其作为参数添加到请求中。通过设置请求的经纬度、半径、关键词等参数,可以获取特定区域、特定类型的POI数据。 接着,我们可以使用Python的json库对返回的JSON格式数据进行解析和处理。通过解析,我们可以获取POI的名称、地址、经纬度、电话等相关信息,并根据需要进行进一步的处理和分析。 在获取到POI数据后,我们可以将其展示在地图上,借助Python的地图可视化库(如folium)实现。通过将POI的经纬度坐标添加到地图上,可以方便地查看POI分布情况,并进行可视化分析。 此外,我们还可以使用Python的机器学习和数据挖掘库对POI数据进行分析。例如,可以使用聚类算法对POI进行聚类分析,找出具有相似特征的POI群组。或者,可以使用文本挖掘技术对POI的描述文本进行情感分析,了解用户对POI的评价情况。 总之,Python提供了丰富的工具和库,可以方便地获取、解析和分析高德POI数据。通过Python的强大功能,我们可以更好地利用和分析POI数据,以满足不同领域的需求,如地理信息分析、城市规划等。 ### 回答2: Python 高德POI是一个基于Python编程语言的高德地图兴趣点服务接口。POI即兴趣点(Points of Interest),是指地图上的特定地点,例如餐馆、商场、景点等。 使用Python高德POI,我们可以通过调用相应的接口获得特定位置周边的兴趣点信息。首先,我们需要在高德地图开放平台上获取API密钥,然后使用Python的HTTP库发送HTTP请求到高德POI的接口地址,将API密钥和其他参数一起传递给接口。接口会返回一个JSON格式的响应,其中包含了周边兴趣点的相关信息,如名称、地址、经纬度等。 在Python中使用高德POI可以实现很多功能,比如查找指定位置附近的餐馆,或者根据用户输入的关键词搜索特定类型的兴趣点。我们可以根据返回的兴趣点信息,对其进行处理和分析,比如绘制地图、计算距离等。 Python高德POI的使用非常灵活,我们可以根据自己的需求定制特定的功能。此外,高德POI也提供了批量操作接口,允许我们一次性获取多个位置周围的兴趣点信息,方便进行大规模的数据处理和分析。 总而言之,Python高德POI是一个强大的工具,能够帮助我们在Python环境中轻松实现与高德地图相关的兴趣点服务。无论是进行实时地理位置数据处理,还是进行地理信息系统开发,Python高德POI都能够提供便捷而高效的解决方案。 ### 回答3: Python高德POI是一个用于访问和使用高德地图的Python库。POI代表兴趣点(Point of Interest),它是指地图上的特定位置或区域,如酒店、餐厅、景点等。 使用Python高德POI,我们可以通过API获取各种POI的详细信息。首先,我们需要在高德地图开发者平台上申请一个API密钥。然后,我们可以使用该密钥访问高德地图的API。 要使用Python高德POI,我们首先需要安装它的库文件。可以使用pip命令在命令行中运行"pip install amap"来安装。安装好之后,我们可以在Python脚本中导入amap模块,然后使用其中的函数和类进行地图操作。 例如,我们可以使用amap的search函数在指定的城市中搜索特定类型的POI。我们可以指定查询关键词和城市名称,并设置一些可选参数,如搜索半径、搜索结果数量等。执行查询后,我们可以获取到符合条件的POI的信息,如名称、地址、坐标等。 除了搜索,Python高德POI还提供了其他功能,如地点周边搜索、路径规划等。我们可以使用amap的相关函数来实现这些操作,以满足不同的需求。 总的来说,Python高德POI是一个强大的工具,可以帮助我们在Python中方便地访问和使用高德地图的POI数据。无论是开发地图导航应用程序,还是进行地理位置分析,都可以使用Python高德POI来简化我们的工作,并提供丰富的地图数据支持。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值