OpenLayers加载实时路况信息

2023-11-01 04:59

本文主要是介绍OpenLayers加载实时路况信息,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OpenLayers官方QQ群
                              群号 259159743     259159561

 

实时路况信息对于我们来说还是比较重要的,
当然实时路况的发布是需要条件的,我们可以调用别人已经发布好的实时路况
这里以北京实时路况为例,仅作学习 交流之用。请勿商用。。。。否则责任自负!

1.首先我们要有路况发布的服务。可以是瓦片形式的,也可以是wms或其他形式的服务
2.要得到当前路况的时间。
3.叠加到地图之上
4.实时刷新路况图层,这个要用到ajax

下面直接上代码
同样
一 、我们在lib\OpenLayers\Layer目录下面新建一共LTTrafficLayer2.js

新建一共OpenLayers.Layer.LTTrafficLayer2.js类继承自OpenLayers.Layer.TileCache  ,重新定义getURL方法
并添加获取获取实时路况时间戳的方法

 

/**
* 对自定义规则切割的图片进行拼装的类
*/
OpenLayers.Layer.LTTrafficLayer2 = OpenLayers.Class(OpenLayers.Layer.TileCache, {
/*获取图片的地址的定时器*/
timer : null,
mapMaxExtent: null,
initialize: function (name, url, options) {
var tempoptions = OpenLayers.Util.extend({
'format': 'image/png',
isBaseLayer: true
}, options);
OpenLayers.Layer.TileCache.prototype.initialize.apply(this, [name, url, {},
tempoptions]);
this.numZoomLevels = 6;
this.maxResolution = 152.87405654296875;
this.realtimeurl = url;
this.transitionEffect = null;
},
destroy : function() {
OpenLayers.Layer.TileCache.prototype.destroy.apply(this,arguments);
this.destroyTimer();
},refresh: function () {
if (this.visibility) {
this.clearGrid();
this.redraw();}
},
createTimer : function() {
function time() {//获取图片路径与时间戳
OpenLayers.loadURL('http://eye.bjjtw.gov.cn/Web-T_bjjt_new/query.do', {
serviceType : 'traffic',
acode : '110000',
cls : 1,
type : 0,
timestamp : Math.random()
}, this, this.success, this.failure);
}
var _time = OpenLayers.Function.bind(time, this);
_time();
this.timer = window.setInterval(_time, 60 * 1000);},destroyTimer : function(){
if (this.timer) {
window.clearInterval(this.timer);
this.timer = null;
}
},success : function(resp){
var txt = resp.responseText;
if (txt === '') {
return;
}resp = eval('(' + txt + ')');
if (resp) {
var time = resp.sTime+"";
var times=time.substring(8,10) + ":" + time.substring(10,12);
if(this.visibility){
$('traffictime').innerHTML = times;
if($('traffictime').timestmp&&$('traffictime').timestmp!=times){
$('traffictime').timestmp = times;
this.refresh();}
if(!$('traffictime').timestmp){
$('traffictime').timestmp = times;
this.refresh();
}
}
}
},
failure : function(resp) {},/**
* 按地图引擎切图规则实现的拼接方式
*/
getURL: function (bounds) {
var res = this.map.getResolution();
var bbox = this.map.getMaxExtent();
var size = this.tileSize;
//计算列号 
var tileX = Math.round((bounds.left - bbox.left) / (res * size.w));
//计算行号
var tileY = Math.round((bbox.top - bounds.top) / (res * size.h));
//当前的等级 
var tileZ = this.map.zoom;
if (tileX < 0) tileX = tileX + Math.round(bbox.getWidth() / bounds.getWidth());
if (tileY < 0) tileY = tileY + Math.round(bbox.getHeight() / bounds.getHeight());
return this.getTilePic(tileX, tileY, tileZ);
},clone: function (obj) {if (obj == null) {
obj = new OpenLayers.Layer.LTTrafficLayer2(this.name, this.url, this.options);
}
obj = OpenLayers.Layer.LTTrafficLayer2.prototype.clone.apply(this, [obj]);
return obj;
},
//请求加随机数,解决ie6下图片缓存不更新问题
getTilePic: function (tileX, tileY, tileZ) {
var dir = '';
if (tileZ > 6) {
var delta = Math.pow(2, tileZ - 5);
var rowDir = 'R' + Math.floor(tileY / delta);
var colDir = 'C' + Math.floor(tileX / delta);
dir = tileZ + "/" + rowDir + "/" + colDir + "/";
} else {
dir = tileZ + '/';
}var tileNo = tileZ + "-" + tileX + "-" + tileY;
var sUrl = this.url + dir + tileNo + '.png?r=';
var d = Math.random();
sUrl += d;
//alert(sUrl);
return sUrl;
},
CLASS_NAME: "OpenLayers.Layer.LTTrafficLayer2"
});

二、在lib文件夹下的OpenLayers.js 中加载js文件的函数中添加"OpenLayers/Layer/LTTrafficLayer2.js"   
三、新建一个html页面
添加触发实时路况的checkbox的函数onDispTraffic
function onDispTraffic(obj)
   {
       if(trafficLayer.visibility){
     trafficLayer.setVisibility(false);
     trafficLayer.destroyTimer();
     
     $('traffictime').innerHTML="";
     if($('showTraCheck').checked)
      $('showTraCheck').checked = false;   
      }else{
     trafficLayer.setVisibility(true);
     trafficLayer.createTimer();
     
     
     
     }
   
   }


四、在map容器中添加实时路况控制的div层
<div style="position:absolute; right:5px; top:5px; color:#000; z-index:1000;">
   
              <input type="checkbox"  id="showTraCheck"  /><span id="spantra"><font style="font-weight:bold;color:#000000">显示实时路况</font></span>
     <font  class="traffictext" id="traffictime" ></font>
     </div>
整体代码如下

<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"><meta name="apple-mobile-web-app-capable" content="yes"><title>OpenLayers TileCache Example</title><link rel="stylesheet" href="img/style.css" type="text/css">
<script src="lib/OpenLayers.js"></script><script type="text/javascript">
var map, layer,marker;
var layerOptions=null;
var trafficLayer;
OpenLayers.INCHES_PER_UNIT["千米"] = OpenLayers.INCHES_PER_UNIT["km"]; 
OpenLayers.INCHES_PER_UNIT["米"] = OpenLayers.INCHES_PER_UNIT["m"]; 
OpenLayers.INCHES_PER_UNIT["英里"] = OpenLayers.INCHES_PER_UNIT["mi"]; 
OpenLayers.INCHES_PER_UNIT["英寸"] = OpenLayers.INCHES_PER_UNIT["ft"]; 
function init(){map = new OpenLayers.Map( $('map'), {controls: [],
maxExtent: new OpenLayers.Bounds(-20037508,-20037508,20037508,20037508),
maxResolution:156543.03125,
numZoomLevels:19,
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
units:'m'});
var mapabc = new OpenLayers.Layer.MapABC(
"Mapabc",
["http://emap0.is.autonavi.com/appmaptile?","http://emap1.is.autonavi.com/appmaptile?","http://emap2.is.autonavi.com/appmaptile?","http://emap3.is.autonavi.com/appmaptile?"],
layerOptions
);
trafficLayer=new OpenLayers.Layer.LTTrafficLayer2("实时路况",
"http://219.232.196.52:8081/",
{isBaseLayer: false,visibility:false}
);
map.addLayers([mapabc,trafficLayer]); 
map.addControl( new OpenLayers.Control.ScaleLine({
topOutUnits:"千米",
topInUnits:"米",
bottomOutUnits:"英里",
bottomInUnits:"英寸" 
//如果底部单位为空 则不显示比例尺下部分
}));
map.addControl(new OpenLayers.Control.PanZoomBar({'zoomWorldIcon':true}));
map.addControl( new OpenLayers.Control.KeyboardDefaults());
map.setCenter(new OpenLayers.LonLat(116.397128, 39.916527).transform(
new OpenLayers.Projection("EPSG:4326"),
map.getProjectionObject()
), 11
); $('showTraCheck').checked = false;
}
OpenLayers.Util.onImageLoadErrorColor = "transparent";
//OpenLayers.Util.onImageLoadErrorColor = "pink"function onDispTraffic(obj)
{
if(trafficLayer.visibility){
trafficLayer.setVisibility(false);
trafficLayer.destroyTimer();$('traffictime').innerHTML="";
if($('showTraCheck').checked)
$('showTraCheck').checked = false; 
}else{
trafficLayer.setVisibility(true); 
trafficLayer.createTimer();}}</script>
<body οnlοad="init()"><div id="map" style="position:relative;width: 100%;height: 100%;border: 1px solid #ccc;">
<div style="position:absolute; right:5px; top:5px; color:#000; z-index:1000;"><input type="checkbox" id="showTraCheck" οnclick="onDispTraffic(this);" /><span id="spantra"><font style="font-weight:bold;color:#000000">显示实时路况</font></span>
<font class="traffictext" id="traffictime" ></font>
</div>
</div>
</body></html>

效果如下

 

更多信息 请关注openlayers中文官方站  http://www.openlayers.cn

转载于:https://www.cnblogs.com/gisvip/archive/2012/11/24/2787141.html

这篇关于OpenLayers加载实时路况信息的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/320650

相关文章

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

SpringBoot项目启动后自动加载系统配置的多种实现方式

《SpringBoot项目启动后自动加载系统配置的多种实现方式》:本文主要介绍SpringBoot项目启动后自动加载系统配置的多种实现方式,并通过代码示例讲解的非常详细,对大家的学习或工作有一定的... 目录1. 使用 CommandLineRunner实现方式:2. 使用 ApplicationRunne

SpringBoot项目删除Bean或者不加载Bean的问题解决

《SpringBoot项目删除Bean或者不加载Bean的问题解决》文章介绍了在SpringBoot项目中如何使用@ComponentScan注解和自定义过滤器实现不加载某些Bean的方法,本文通过实... 使用@ComponentScan注解中的@ComponentScan.Filter标记不加载。@C

springboot 加载本地jar到maven的实现方法

《springboot加载本地jar到maven的实现方法》如何在SpringBoot项目中加载本地jar到Maven本地仓库,使用Maven的install-file目标来实现,本文结合实例代码给... 在Spring Boothttp://www.chinasem.cn项目中,如果你想要加载一个本地的ja

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

最好用的WPF加载动画功能

《最好用的WPF加载动画功能》当开发应用程序时,提供良好的用户体验(UX)是至关重要的,加载动画作为一种有效的沟通工具,它不仅能告知用户系统正在工作,还能够通过视觉上的吸引力来增强整体用户体验,本文给... 目录前言需求分析高级用法综合案例总结最后前言当开发应用程序时,提供良好的用户体验(UX)是至关重要