抓取“矢量”的实时交通流量数据
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 ...
随机推荐
- swift实现ios类似微信输入框跟随键盘弹出的效果
封面(图文无关) 为什么要做这个效果 在聊天app,例如微信中,你会注意到一个效果,就是在你点击输入框时输入框会跟随键盘一起向上弹出,当你点击其他地方时,输入框又会跟随键盘一起向下收回,二者完全无缝连 ...
- codevs 2451 互不侵犯(状丫dp)
/* 好神奇好神奇...表示自己要学的还很多 注意到n<=9 不是搜索就是状丫 搜索+剪枝 70分 枚举放或者不放 这里用状丫 f[i][j][k] 表示前i行 放了j个国王 i行的状态是k的方 ...
- Linux服务的管理
1.Linux服务的介绍 系统服务 --某些服务的服务的对象是Linux系统本身,或者Linux系统系统用户,这类服务我们称为系统服务(System Service) 网络服务 --提供给网络中的其他 ...
- HDU3757
题意:一些团队因为任务要去避难所,并且每个避难所必须要有团队在,避难所的数量小于等于团队的数量, 团队去避难所的消耗油量与路程成正比,求解最小耗油量.题目来源:2010 Northeastern Eu ...
- -webkit-appearance改变任何元素的浏览器默认风格
前段时间,公司有个紧急发布会,需要在移动端做一个邀请函的页面.但是在实现下拉框的时候,IOS和安卓展示的效果总是不一样.经过我一番查找,偶然间发现了-webkit-appearance这个样式属性.后 ...
- android bindService()
bindService简介 Service一般用于不用显示,运行在后台的服务. startService 是我们最常用的启动Service的方法.而如何让service与其他组件通信呢?一般在一个进程 ...
- eclipse中build path 中JDK与java compiler compliance level的问题(转)
roject facets做什么用? http://baike.baidu.com/view/6257360.htm,其实我感觉,就是让我们在创建项目时候,可以独立定义一个有一个模板供我们使用,在里面 ...
- iOS9.3 Could not find Developer Disk Image 真机调试错误解决办法
昨天手机系统升级9.3,到了公司真机测试的时候发现Xcode(7.2.1)报错:Could not find Developer Disk Image , 这是因为我的Xcode7.2中还没有支持9. ...
- 认识html标签
让我们通过一个网页的学习,来对html标签有一个初步理解. 平常大家说的上网就是浏览各种各式各样的网页,这些网页都是由html标签组成的. 下面就是一个简单的网页.效果图如下: 我们来分析一下,这个网 ...
- centos安装redis-3.2.3
这次介绍的是在虚拟机centos下安装redis-3.2.3 首先进入官网http://redis.io/download