抓取“矢量”的实时交通流量数据

1. 引言

最近老师有一个需求,就是想要抓取实时的矢量交通流量数据来做分析,类似于百度地图,高德地图的“实时路况”那种。平时的网络抓取工作一般是抓取网页上现成的数据,但是交通流量数据只有栅格的切片,没有矢量数据,而且数据购买的费用一年就好几十W,基本不可能拿得出。实验室的师兄们都有事情忙,所以这个苦逼的任务自然摊派到我的头上。

图1. 高德和百度地图的实时路况数据

因为网络上现成的数据只有切片数据,因此这个问题就转化为了如何将切片数据矢量化。如果直接用ArcGIS Engine将栅格数据转换为矢量数据,基本不可能,首先计算量太大,再次是转换的矢量数据不准确,更重要的是,每次转换出来的矢量道路是不一样的,没法做分析。但是我们注意到,交通流量切片它有两个特性:

a) 它也属于一种地图切片,因此可以使用地图切片算法来计算出每张切片的经纬度;

b) 它是一张透明的PNG图片,以四种颜色表示交通拥堵情况,我只需要将每段路的颜色识别出来,判断交通拥堵状况,就能够完成“矢量化”的工作了。

接下来的工作就可以分为以下几步:

a) 准备一份详细某城市的矢量道路数据;

b) 下载这个城市交通流量切片,并且拼合成一张大图片;

c) 在栅格上标记需要检测颜色的象元,并且计算这些象元的经纬度;

d) 将每条路的矢量数据与象元一一匹配,并且检测交通流量状况,写入数据库。

2. 地图切片系统与实时交通流量

地图切片又叫地图瓦片,这方面的文章和机制已经很成熟了,详细算法内容可以参考这篇文章http://blog.csdn.net/mygisforum/article/details/7582449。本文以高德切片为例,高德实时交通流量则采用动态切片的形式,但是与一般的切片系统稍微有点不同,切片的缩放等级zoom越小,缩放层级越大,是反着来的。

当然,我们也可以不同自己算,推荐使用https://github.com/BruTile/BruTile类库

3. 主要思路

高德的交通流量数据(图1.(a))总体来说还是非常简单的,用“绿”、“黄”、“红”三种颜色,表示交通的拥堵状况,相近道路的分隔还是比较明显。但是直接把切片转换为矢量是非常不现实的。不过我有北京市提供的非常详细的矢量数据(图2.(b)),如果把交通流量切片和矢量数据匹配起来,就可以生成实时的交通流量矢量数据了,最后交通流量数据以切片或者以矢量发布都没问题。所以现在最主要的工作就是找到匹配交通流量切片和矢量数据的中间件。

图2. 交通流量切片与矢量数据

高德切片数据虽然是以编码的方式组织的,但是每个图片、每个像素都有严格且固定的坐标,只要挑选出一部分有值的像素,将像素安装公式转换为点阵,然后把每个点与一条矢量道路匹配起来,即给每个点添加一个RouteId字段。图3(a)为我生成的一部分点阵,图3(b)为点阵的属性表,包含x,y,routeid三个字段。具体步骤如下:

a) 每隔一段时间下载交通流量切片数据,存放在本地文件夹中;

b) 根据点阵数据读取指定的切片的指定的像素,判断该像素颜色,得到拥堵情况;

c) 根据拥堵情况和RouteId生成交通流量表,包含RouteId和Traffic两个字段;

d) 把交通流量表和矢量数据根据RouteId相匹配,就得到了矢量交通流量数据;

e) 使用切片工具将矢量数据生成天津师大需要的切片数据。

 

图3.(a) 交通流量切片数据和矢量道路数据和点阵叠加,(b)点阵的属性表

这是我使用程序抓取2014年12月5号晚上8点左右的交通流量数据,然后对北京四环的交通流量进行矢量化。从结果看出,交通流量总体的趋势是相似的,但是一些细节地方会有一些不同。矢量化的结果取决于点阵的精细程度。

图4.(a) 交通流量切片数据 (b)生成的矢量交通流量数据

4. 总结

当时是抱着完成任务的心态做这件事情的,所以整个事情也做的很粗糙,代码写的很乱,还是厚着脸皮把代码共享出来吧,https://github.com/xiaoqqchen/TrafficSpider 。各位看官轻喷,以后有时间再整理。

时间: 2024-10-31 21:41:36

抓取“矢量”的实时交通流量数据的相关文章

[python]初试页面抓取——抓取沪深股市交易龙虎榜数据

[python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import gzipimport http.cookiejar import urllib.request import urllib.parse import json import os import time import datetime def getOpener(head): # deal with

通过tcpdump抓取 指定 ip 端口 的网络数据,并通过wireshark分析网络数据,很实用

抓取来源ip port 端口的数据,tcp协议,并保存到文件 tcpdump -w dataSrc.pcap -i bond0 src net ip and port port 抓取目的ip port 端口的数据 tcpdump -w dataDst.pcap -i bond0 dst net ip and port port 抓取往返ip port 端口的数据 tcpdump -w dataAll.pcap -i bond0 host net ip and port port 以上命令将网络抓

点滴积累【C#】---抓取页面中想要的数据

效果: 描述:此功能是抓取外国的一个检测PM2.5的网站.实时读取网站的数据,然后保存到数据库里面.每隔一小时刷新一次. 地址为:http://beijing.usembassy-china.org.cn/070109air.html 筛选后的地址为:http://utils.usembassy.gov/feed2js/feed2js.php?src=http%3A%2F%2Fwww.stateair.net%2Fweb%2Frss%2F1%2F1.xml&desc=1&num=7&

「实例操作」抓取耐克中国官网数据转淘宝数据包-1 获取商品链接

最近接了个单子,要抓耐克中国的数据,把里面的商品转化成淘宝数据包,可以直接上传宝贝 客户提出了3个要求: 1:批量下载全网站商品: 2:定期更新网站新品: 3:批量更新淘宝库存,检查网站数据 这边先确定思路 第一是要抓取这些商品的列表, 第二是抓取单品的信息, 第三是把信息按照淘宝数据包格式输出. 这样就解决了第一个要求, 第二个邀请是抓取新品,这个要求可以这样理解,定期抓取所以链接,并保存下来,如果有的新的链接,那就是新品, 第三个要求更新库存,这个要有淘宝接口,我朋友那边有,借用下即可 ==

Java HttpURLConnection 抓取网页内容 解析gzip格式输入流数据并转换为String格式字符串

最近GFW为了刷存在感,搞得大家是头晕眼花,修改hosts 几乎成了每日必备工作. 索性写了一个小程序,给办公室的同事们分享,其中有个内容 就是抓取网络上的hosts,废了一些周折. 我是在一个博客上抓取的.但是这位朋友的博客应该是在做防盗链,但他的方式比较简单就是5位数的一个整形随机数.这里折腾一下就ok了. 要命的是他这个链接的流类型 居然是gzip.这个郁闷好久,一直以为是编码格式导致解析不出来结果,后来发现是gzip搞的. 主要的一段代码做个记录吧. 1 /** 2 * 网络工具类 用于

抓取Iphone上app的网络数据

这一小节主要记录下我在使用青花瓷(charles)进行手机联结mac并进行抓包时遇到的问题,主要是青花瓷软件的相关设置. 由于苹果公司对app数据安全性的强制要求,目前市面上很多app的接口都使用https.所以现在单纯的拿青花瓷来直接抓取手机上app的数据显然是行不通了.如果想要截取到完好的https数据,需要以下几步: 一.在mac端安装charles的证书:打开charles,Help->SSL Proxying->Install Charles Root Certifacate,会自动

利用Python抓取亚马逊评论列表数据

前段时间,我家妹子公司老板叫她去将法国亚马逊评论列表的前100页共1000个评论用户的联系方式找出来.1000个用户,要一个个的去看再记录下来,而且并不是每个评论用户都会将个人的联系方式留下来.那么问题来了,这样费时费力的工作如果人工去做的话,那么就是花了两天的时间也就找了前30页的数据(还有别的工作要做),然后累的够呛的.本着心疼的原则(程序猿能找到妹子就很不错了,所以得心疼着),就想帮着她做点事. 我本身的工作是做游戏客户端开发的,主要使用的开发语言是lua和c++,并没有接触过网页.网站相

java使用htmlunit工具抓取js中加载的数据

htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度也是非常迅速的.采用的是Rhinojs引擎.模拟js运行. 说白了就是一个浏览器,这个浏览器是用Java写的无界面的浏览器,正因为其没有界面,因此执行的速度还是可以滴,HtmlUnit提供了一系列的API,这些API可以干的功能比较多,如表单的填充,表单的提交,模仿点击链接,由于内置了Rhinojs

Java豆瓣电影爬虫——抓取电影详情和电影短评数据

一直想做个这样的爬虫:定制自己的种子,爬取想要的数据,做点力所能及的小分析.正好,这段时间宝宝出生,一边陪宝宝和宝妈,一边把自己做的这个豆瓣电影爬虫的数据采集部分跑起来.现在做一个概要的介绍和演示. 动机 采集豆瓣电影数据包括电影详情页数据和电影的短评数据. 电影详情页如下图所示 需要保存这些详情字段如导演.编剧.演员等还有图中右下方的标签. 短评页面如下图所示 需要保存的字段有短评所属的电影名称,每条评论的详细信息如评论人名称.评论内容等. 数据库设计 有了如上的需求,需要设计表,其实很简单,