cesium-examples/map/libs/logws.js

154 lines
5.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 连接请换一个浏览器例如ChromeFirefox');
}
//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("<br>");
$("#basicinfo").scrollTop($("#basicinfo div").height() - $("#basicinfo").height());
gpsCount++;
} else {
$("#basicinfo div").html(" ").append("<br>");
gpsCount = 0;
}
} else if (msg.type == "satellite") {
if (lineCount < 200) {
$("#detailinfo div").append(message).append("<br>");
// 滚动条滚动到最低部
$("#detailinfo").scrollTop($("#detailinfo div").height() - $("#detailinfo").height());
lineCount++;
} else {
$("#detailinfo div").html(" ").append("<br>");
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;
};