抓取“矢量”的实时交通流量数据
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 。各位看官轻喷,以后有时间再整理。
抓取“矢量”的实时交通流量数据的更多相关文章
- [python]初试页面抓取——抓取沪深股市交易龙虎榜数据
[python]抓取沪深股市交易龙虎榜数据 python 3.5.0下运行 没做自动建立files文件夹,需要手动在py文件目录下建立files文件夹后运行 #coding=utf-8 import ...
- 点滴积累【C#】---抓取页面中想要的数据
效果: 描述:此功能是抓取外国的一个检测PM2.5的网站.实时读取网站的数据,然后保存到数据库里面.每隔一小时刷新一次. 地址为:http://beijing.usembassy-china.org. ...
- 如何抓取基于https协议的webservice数据包
方法一:基于Fiddler2等第三方工具(需要在Java端禁用SSL安全检查) 原文拷贝自http://blog.csdn.net/zmxj/article/details/6327775,向原作者表 ...
- 使用HttpClient 4.3.4 自动登录并抓取中国联通用户基本信息和账单数据,GET/POST/Cookie
一.什么是HttpClient? HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 JDK 的 ...
- Fiddler基本原理与抓取Andriod与IOS的App数据包
Fiddler基本原理 Fiddler数据包的原理是Fiddler将自己设置为一个代理服务器,默认监听127.0.0.1:8888端口同时将浏览器的HTTP.HTTPS协议设置为使用代理服务器也就是使 ...
- Java HttpURLConnection 抓取网页内容 解析gzip格式输入流数据并转换为String格式字符串
最近GFW为了刷存在感,搞得大家是头晕眼花,修改hosts 几乎成了每日必备工作. 索性写了一个小程序,给办公室的同事们分享,其中有个内容 就是抓取网络上的hosts,废了一些周折. 我是在一个博客上 ...
- 使用python抓取知乎日报的API数据
使用 urllib2 抓取数据时,最简单的方法是: import urllib2, json def getStartImage(): stream = urllib2.urlopen('http:/ ...
- android端从服务器抓取的几种常见的数据的处理方式
1.图片 public void look(View v) { String path = et_path.getText().toString(); try { URL url = new URL( ...
- Wireshark抓取本地Tcp包(任何数据包)
没有任何一个程序员在做项目的时候不会遇到网络编程的问题,要解决这些问题除了对各种网络协议深入了解之外,还需要掌握各种网络分析工具的用法,不用多说wireshark绝对是这方面的翘楚,可惜的是,wire ...
随机推荐
- UML解惑:图说UML中的六大关系--转
UML定义的关系主要有六种:依赖.类属.关联.实现.聚合和组合.这些类间关系的理解和使用是掌握和应用UML的关键,而也就是这几种关系,往往会让初学者迷惑.这里给出这六种主要UML关系的说明和类图描述, ...
- divmod(a,b)函数
python每日一函数 - divmod数字处理函数 divmod(a,b)函数 中文说明: divmod(a,b)方法返回的是a//b(除法取整)以及a对b的余数 返回结果类型为tuple 参数: ...
- 小学生之浅谈Struts2与struts1的运行机制
Struts1工作原理图: 1.初始化:struts框架的总控制器ActionServlet是一个Servlet,它在web.xml中配置成自动启动的Servlet,在启动时总控制器会读取配置文件(s ...
- css文件和js文件后面带一个问号
经常看一些网站页面源代码中的css文件和js文件后面带一个问号,后面跟着一连串数字或字符,这是干什么用的? 这个方法我也用过,而且很好用?,它的作用有两个:1.作为版本号,让自己方便记忆.查找:2.作 ...
- oracle单行函数之通用函数
NVL (a,b) --当a=null时,返回b,否则返回a NVL2 (a, b, c) -- 当a=null时,返回c,否则返回b NULLIF (expr1, expr2) --当a=b时,返回 ...
- 网页通用的测试用例(出处:: 51Testing-- lxp1119216)
此题的考察目的:面试者是否熟悉各种测试方法,是否有丰富的Web测试经验, 是否了解Web开发,以及设计Test case的能力 这个题目还是相当有难度的, 一般的人很难把这个题目回答好. 首先,你要了 ...
- jquery中的html()、text()、val()的区别
1.html(),text(),val()三种方法都是用来读取选定元素的内容: html()是用来读取元素的HTML内容(包括其Html标签),text()用来读取元素的纯文本内容,包括其后代元素 ...
- 发布一款仿天猫产品放大镜JQuery插件
效果如下图: 1.原图 2.放大镜效果: 插件源码如下: /* * * JQUERY 简洁无极放大镜插件-zoomer * Author:盛世游侠 * QQ:418873053 * Date:2013 ...
- 数据库和Doctrine(转载自http://www.111cn.net/phper/332/85987.htm)
对于任何应用程序来说最为普遍最具挑战性的任务,就是从数据库中 读取和持久化数据信息.尽管symfony完整的框架没有默认集成ORM,但是symfony标准版,集成了很多程序,还自带集成了Doctrin ...
- Destoon后台修改公司会员资料信息的必填项限制修改
/template/default/member/edit.htm module\member\admin\template\member_edit.tpl.php module\member\adm ...