Openstreetmap作为开源社区地图,它提供了很多方便获取的地图信息,如地图POI信息,实现了很多谷歌MAP等大厂地图API一样的功能,且完全免费开源,为普通研究者提供了很好的数据信息来源。

本次实验的任务是为了获取纽约市交通局为了更好地监管纽约市的出租车服务行业而划分的出租车服务区,该区域划分异于各种现有地图上的区域划分,因此很难通过仅仅通过区划名字来获取对应地区的POI,因此我在获取TSZ区域的POI信息时,按照如下几步进行开展:

目录

获取NYC-TSZ区域的shapefile文件

利用QGIS来对获取TSZ区域的边界信息

通过OVERPY调用overpass API来获取这些区域的POI信息


获取NYC-TSZ区域的shapefile文件

纽约市出租车区域划分信息在纽约市TLC官网商可以直接下载

NYC-TLC官网:TLC Trip Record Data - TLC (nyc.gov)

总体把纽约市划分成了5个大区:具体如下

可见如此的区划十分复杂,很难直接通过矩形搜索或者圆形搜索获取精准的POI信息。

后来我们发现TLC还提供了这些区域的shapefile文件,于是我们想到了利用免费且开源的QGIS(Quantum Geographic information system)地图信息系统来进行区域边界信息的获取。

利用QGIS来对获取TSZ区域的边界信息

QGIS下载和安装

QGIS官网:Welcome to the QGIS project!

在官网直接点击下载按钮,安装包比较大,可能会下载比较久,且有可能需要翻墙。

直接点击安装后即可

然后直接点击打开该软件,将TSZ的shapefile文件直接拖入软件中,即可打开。

此时的图层信息还没有包括区域的边界信息,我们需要点击layer菜单,点击Open Attribute Table,找到Open Field Calculator,并创建一个field,类型为字符串类型,表达式设置为geom_to_wkt($geometry)。点击确定

此时系统便会生成一个新图层,这个图层便成功保存了每个TSZ区域的边界经纬度信息。记住要提前把坐标系转为WGS 84坐标系。

右击该图层,然后点击export,把该区域导出csv文件,方便后续对这些信息进行使用pandas处理。

通过OVERPY调用overpass API来获取这些区域的POI信息

import pandas as pd
import overpy
import time
import logging# 配置日志输出处理状态
logging.basicConfig(filename='example.log', level=logging.DEBUG, format='%(asctime)s %(levelname)s: %(message)s')#数据读入 和 预处理,仅保留经纬度信息
file_name = 'Manhattan_ZONES.csv'
data =  pd.read_csv(file_name)
polygon_str_list = data.loc[:,['fid', 'geometry']]
num = len(polygon_str_list)
for i in range(num):polygon_str_list.geometry[i] = polygon_str_list.geometry[i][16:-3].replace(',','')
#print(polygon_str_list)# 构建Overpass API查询语句
overpass_url = 'http://overpass-api.de/api/interpreter'
#食物大类
Sustenance = "'amenity'~'restaurant|bar|pub|biergarten|cafe|fast_food|food_court|ice_cream'"
#教育大类
Education = "'amenity'~'college|driving_school|kindergarten|language_school|library|toy_library|training|music_school|school|traffic_park|university'"
#医疗大类
Healthcare = "'amenity'~'baby_hatch|clinic|dentist|doctors|hospital|nursing_home|pharmacy|social_facility|veterinary'"
#娱乐艺术
Entertainment_Arts_Culture = "'amenity'~'arts_centre|brothel|casino|cinema|community_centre|conference_centre|events_venue|exhibition_centre|music_venue|nightclub|planetarium|public_bookcase|social_centre|theatre'"
#公共服务
Public_Service = "'amenity'~'courthouse|fire_station|police|post_box|post_depot|post_office|prison|ranger_station|townhall'"
#金融服务
Financial = "'amenity'~'atm|bank|bureau_de_change'"
#居民住所
Acconmendation = "'building'~'apartments|barracks|bungalow|detached|dormitory|hotel|house'"
#宗教建筑
Religious = "'building'~'cathedral|chapel|church|religious|mosque|temple'"
#交通站点
Station = "'building'~'train_station|transportation|church|religious|mosque|temple'"
#运动场所
Sports = "'building'~'stadium|sports_hall|riding_hall'"point_types = [Sustenance,Education,Healthcare,Entertainment_Arts_Culture,Public_Service,Financial,Acconmendation,Religious,Station,Sports]query_template = '''
node[%s](poly:"%s");
out center;
'''
api = overpy.Overpass()#多维数组字典
'''end_dict = {'fid':[],'Sustenance':[],'Education':[],'Healthcare':[],'Entertainment_Arts_Culture':[],'Public_Service':[],'Financial':[],'Acconmendation':[],'Religious':[],'Station':[],'Sports':[]
}'''
#正式开始爬取
use_time_list=[]
region_num = 0
with open("test.csv",'w') as f:#逐个区域读取相应的POI信息,写入csv文件for row_index, row in polygon_str_list.iterrows():region_num += 1t1 = time.time()end_str = str(row.fid)#print(row.geometry)#获取区域编号#获取区域边界多边形信息,并进行格式处理,方便放入query语句中使用POLY参数polygon_str = row.geometrypolygon_list = polygon_str.split(' ')for i in range(len(polygon_list)-1):polygon_list[i],polygon_list[i+1]=polygon_list[i+1],polygon_list[i]i = i+1polygon_str = ' '.join(polygon_list)#对该区域查找对应POI,由于不断的API请求可能会产生异常,因此使用异常处理技术解决,并写入日志。for point_type in point_types:state = 1while (state < 10):try:query = query_template % (point_type,polygon_str) #print(query)results = api.query(query)end_num = len(results.nodes)end_str = end_str +','+ str(end_num)#print(end_str)time.sleep(1)state = 11logging.info("成功查找")except Exception as e:state += 1logging.error("操作失败,错误信息:%s",str(e))end_str = end_str +'\n'print(end_str)f.write(end_str)t2 = time.time()use_time = t2-t1use_time_list.append(use_time)logging.info('第%s个区域已完成,用时:%s',str(region_num),str(use_time))

获取并统计了Manhattan地区的10个类别的POI统计信息

NYC-TSZ区域POI信息爬取-OVERPY相关推荐

  1. 生成osm文件_超酷城市肌理!地理数据信息爬取方法大全(B篇)DEM+POI+OSM

    WENWEN:这一弹是对第一弹的补充和深化讲解,上一弹请点击常用的地理数据信息爬取方法大全(前期场地信息获取第一弹),关于DEM获取地形地理空间数据云提交任务一直在排队的问题,这个应该是官网的问题,不 ...

  2. 百度地图POI数据爬取,突破百度地图API爬取数目“400条“的限制11。

    1.POI爬取方法说明 1.1AK申请 登录百度账号,在百度地图开发者平台的API控制台申请一个服务端的ak,主要用到的是Place API.检校方式可设置成IP白名单,IP直接设置成了0.0.0.0 ...

  3. 12306车站信息爬取(4)——添加车票的票价信息

    在前三篇文章的基础上: 12306车站信息爬取(1)--输入条件的判断,包括出发站,到达站,和出发时间,并获取车次信息的链接 12306车站信息爬取(2)--输入出发站,到达站和出发时间,获取车次信息 ...

  4. python网易云热歌榜歌曲信息爬取(iframe框架内数据爬取,src为空)

    为一线医护人员加油! 为武汉加油! 为中国加油! 为世界加油! 此爬虫是本人参考了了一位前辈的文章,并修改和优化了代码: 1.改为python3环境: 2.优化了抓取的歌曲时长中带一长串小数的问题: ...

  5. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  6. 【2020-10-27】 scrapy爬虫之猎聘招聘信息爬取

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! scrapy爬虫之猎聘招聘信息爬取 1.项目场景 目标网址:https://www.liepin.com/zhao ...

  7. 基于python的汽车信息爬取与可视化分析系统

    温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从某汽车门户网站采集汽车数据,并利用 Flask + Echarts 前后端框 ...

  8. 广西人才网实习信息爬取与数据库存储实战

    广西人才网实习信息爬取与数据库存储实战 https://www.gxrc.com/ 大家好,我是W 项目介绍:本项目为CrawlSpider结合MySQL.MongoDB爬取求职网站信息的项目,目标是 ...

  9. Python 爬虫 中国行政区划信息爬取 (初学者)

    Python 爬虫 中国行政区划信息爬取 (初学者) 背景 环境准备 代码片段 1.定义地址信息对象 2.地址解析对象 2.1 获取web信息 2.2 web信息解析 2.3 区划信息提取 2.4 省 ...

最新文章

  1. 自动驾驶中实时车道检测和警报
  2. netstat 命令(Linux)
  3. svn 1.8.11 命令行提交新添加文件错误
  4. 剑指offer(C++)-JZ78:把二叉树打印成多行(数据结构-树)
  5. docker配置 nacos_Docker下Nacos配置应用开发
  6. 当js中的for循环遇到延时器或者定时器时需要注意的问题(这里有个大坑)
  7. 一、数学建模层次分析法(AHP)【清风数学建模个人笔记】
  8. 如何用计算机进行机械制图,机械制图与机械CAD的有机结合的探究
  9. 一加手机怎么root权限_一加手机怎么解除root权限
  10. 亮宁机器人套件_十大可编程机器人教育套件
  11. webMethods入门简介
  12. Youtube羽翼丰满 欲摆脱运营商自建移动版网站
  13. 引用 CPU : 什么是超频,怎么给CPU超频?
  14. 湖北省2019.3全国计算机等级考试,湖北2019年3月全国计算机等级考试报名系统
  15. 7-14 电话聊天狂人 (25 分)
  16. Jetpack Room 使用及原理解析
  17. OpenFOAM-v2006重叠网格挖洞问题研究以及overset代码解析(二)PATCH是什么类型的patch?
  18. 新版标准日本语中级_第二十八课
  19. 数仓维度表的作用和好处
  20. 微信小程序绑定银行卡

热门文章

  1. Ext Js简单面板及工具栏的创建使用
  2. 预应力筋的准确运用和预应力资料的维护
  3. jstack实战死循环与死锁
  4. 【LInux】基础开发工具的使用
  5. CTF | CTF-Web 捉迷藏
  6. 税收法律制度概述(国家的特征、税收法律关系、税法要素)、增 值 税(增值税简介、增值税税率、增值税税率、免征项目、增值税的计算 )
  7. PPet —— 点进来送你一个桌面宠物,让单身码农不再孤单~~
  8. html 什么是行内元素,行内元素是什么?
  9. tgp饥荒服务器修改人数,饥荒联机版房间人数上限修改图文教程
  10. 《北大经典讲座》——谈读书