String.prototype.startWith = function (compareStr) { return this.indexOf(compareStr) == 0; } /** * 查看日志的WebSocket * @param {type} wsurl * @returns {LogWebSocket} */ function LogWebSocket(wsurl,call) { var ws = null; //判断当前浏览器是否支持WebSocket if ('WebSocket' in window) { ws = new WebSocket(wsurl); } else if ('MozWebSocket' in window) { ws = new MozWebSocket(wsurl); } else { alert('您的浏览器不支持 websocket 连接,请换一个浏览器,例如:Chrome,Firefox'); } //this.map = map //连接发生错误的回调方法 ws.onerror = function (event) { //setMessageInnerHTML(event.data); console.log("发生错误。。。"); }; //连接成功建立的回调方法 ws.onopen = function (event) { //setMessageInnerHTML(event.data); console.log("客户端已连接。。。"); }; //接收到消息的回调方法 ws.onmessage = function (event) { if (event.data === undefined) { return; } var msgdata = JSON.parse(event.data); if (msgdata.type == "location") { var date = msgdata.data.date; var time = msgdata.data.time; var qa = msgdata.data.fixQuality; var pos = msgdata.data.position; var sp = msgdata.data.speed; if (qa) { var datetime = new Date(date.year, date.month - 1, date.day, time.hour, time.minutes, time.seconds); var result = new Date(datetime.getTime() + 8 * 3600 * 1000); $("#timeinfo").text(result.Format('yyyy-MM-dd HH:mm:ss')); $("#loninfo").text(pos.longitude.toFixed(6)); $("#latinfo").text(pos.latitude.toFixed(6)); $("#altinfo").text(pos.altitude.toFixed(2) + " m"); $("#speedinfo").text(sp.toFixed(2) + " km/h"); var newLonlat = GPS.gcj_encrypt(pos.latitude, pos.longitude); var _center = ol.proj.fromLonLat([newLonlat.lon,newLonlat.lat]); //var f = BIGMap.getMarkersLayer().getSource().getFeatureById("gps01"); if(typeof call === 'function'){ call({lon:pos.longitude.toFixed(6),lat:pos.latitude.toFixed(6),alt:pos.altitude.toFixed(2),sp:sp.toFixed(2),time:result.Format('yyyy-MM-dd HH:mm:ss')}); } /*if(!f){ BIGMap.addMarker([newLonlat.lon,newLonlat.lat],pos.altitude,null,"",true).setId("gps01"); map.getView().setZoom(16); }else{ f.getGeometry().setCoordinates(_center); } map.getView().setCenter(_center);*/ } } else if (msgdata.type == "satellite") { if (msgdata.data.info) { $("#satinfo").text(msgdata.data.info.length); } } //setMessageInnerHTML(event.data); }; //连接关闭的回调方法 ws.onclose = function (event) { ws.send("stop"); }; //监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。 window.onbeforeunload = function () { ws.send("stop"); ws.close(); }; //设置全局变量 this.websocket = ws; } //关闭连接 LogWebSocket.prototype.closeWebSocket = function () { this.websocket.close(); }; //发送消息 LogWebSocket.prototype.sendMsg = function (msg) { this.websocket.send(msg); }; //消息记录数 var lineCount = 0; var gpsCount = 0; //将消息显示在网页上 function setMessageInnerHTML(message) { if (message === undefined) { return; } var msg = JSON.parse(message); if (msg.type == "location") { if (gpsCount < 200) { $("#basicinfo div").append(message).append("
"); $("#basicinfo").scrollTop($("#basicinfo div").height() - $("#basicinfo").height()); gpsCount++; } else { $("#basicinfo div").html(" ").append("
"); gpsCount = 0; } } else if (msg.type == "satellite") { if (lineCount < 200) { $("#detailinfo div").append(message).append("
"); // 滚动条滚动到最低部 $("#detailinfo").scrollTop($("#detailinfo div").height() - $("#detailinfo").height()); lineCount++; } else { $("#detailinfo div").html(" ").append("
"); lineCount = 0; } } else { console.log(message); } } Date.prototype.Format = function (fmt) { var o = { "M+": this.getMonth() + 1, "d+": this.getDate(), "H+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "S+": this.getMilliseconds() }; //因为date.getFullYear()出来的结果是number类型的,所以为了让结果变成字符串型,下面有两种方法: if (/(y+)/.test(fmt)) { //第一种:利用字符串连接符“+”给date.getFullYear()+"",加一个空字符串便可以将number类型转换成字符串。 fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length)); } for (var k in o) { if (new RegExp("(" + k + ")").test(fmt)) { //第二种:使用String()类型进行强制数据类型转换String(date.getFullYear()),这种更容易理解。 fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[k]).substr(String(o[k]).length))); } } return fmt; };