Commit a6e5b855b8a7e2f3b03daa44a40a7405dd8c9593

Authored by 潘钊
1 parent 20d60a35

update...

src/main/java/com/bsth/data/schedule/DayOfSchedule.java
@@ -138,7 +138,7 @@ public class DayOfSchedule implements CommandLineRunner { @@ -138,7 +138,7 @@ public class DayOfSchedule implements CommandLineRunner {
138 //dataRecovery(); 138 //dataRecovery();
139 139
140 //翻班线程 140 //翻班线程
141 - Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS); 141 +// Application.mainServices.scheduleWithFixedDelay(scheduleRefreshThread, 15, 240, TimeUnit.SECONDS);
142 //入库 142 //入库
143 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS); 143 // Application.mainServices.scheduleWithFixedDelay(schedulePstThread, 60, 30, TimeUnit.SECONDS);
144 //班次误点扫描 144 //班次误点扫描
src/main/java/com/bsth/service/gps/GpsServiceImpl.java
@@ -11,7 +11,10 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo; @@ -11,7 +11,10 @@ import com.bsth.entity.realcontrol.ScheduleRealInfo;
11 import com.bsth.repository.CarParkRepository; 11 import com.bsth.repository.CarParkRepository;
12 import com.bsth.repository.StationRepository; 12 import com.bsth.repository.StationRepository;
13 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository; 13 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
14 -import com.bsth.service.gps.entity.*; 14 +import com.bsth.service.gps.entity.GpsOutbound_DTO;
  15 +import com.bsth.service.gps.entity.GpsSpeed_DTO;
  16 +import com.bsth.service.gps.entity.HistoryGps_DTO;
  17 +import com.bsth.service.gps.entity.Road_DTO;
15 import com.bsth.util.DateUtils; 18 import com.bsth.util.DateUtils;
16 import com.bsth.util.TransGPS; 19 import com.bsth.util.TransGPS;
17 import com.bsth.util.TransGPS.Location; 20 import com.bsth.util.TransGPS.Location;
@@ -28,6 +31,7 @@ import java.lang.reflect.Field; @@ -28,6 +31,7 @@ import java.lang.reflect.Field;
28 import java.sql.Connection; 31 import java.sql.Connection;
29 import java.sql.PreparedStatement; 32 import java.sql.PreparedStatement;
30 import java.sql.ResultSet; 33 import java.sql.ResultSet;
  34 +import java.text.DecimalFormat;
31 import java.util.*; 35 import java.util.*;
32 36
33 @Service 37 @Service
@@ -538,11 +542,25 @@ public class GpsServiceImpl implements GpsService { @@ -538,11 +542,25 @@ public class GpsServiceImpl implements GpsService {
538 List<GpsSpeed_DTO> speedList = speeds(nbbm, st, et); 542 List<GpsSpeed_DTO> speedList = speeds(nbbm, st, et);
539 //越界数据 543 //越界数据
540 List<GpsOutbound_DTO> outboundList = outbounds(nbbm, st, et); 544 List<GpsOutbound_DTO> outboundList = outbounds(nbbm, st, et);
  545 + //计算里程
  546 + List<HistoryGps_DTO> effList = new ArrayList<>();
  547 + for(HistoryGps_DTO gps : list){
  548 + if(gps.getLat() != 0 && gps.getLon() != 0)
  549 + effList.add(gps);
  550 + }
  551 + double sum = 0, dist;
  552 + for (int i = 0; i < effList.size() - 1; i++) {
  553 + dist = GeoUtils.getDistance(effList.get(i).getPoint(), effList.get(i + 1).getPoint());
  554 + //点位相同时,dist会NaN
  555 + if(String.valueOf(dist).matches("^[0.0-9.0]+$"))
  556 + sum += dist;
  557 + }
541 558
542 rs.put("status", ResponseCode.SUCCESS); 559 rs.put("status", ResponseCode.SUCCESS);
543 - rs.put("list", removeDuplicate(list)); 560 + rs.put("list", removeDuplicate(effList));
544 rs.put("speedList", speedList); 561 rs.put("speedList", speedList);
545 rs.put("outboundList", outboundList); 562 rs.put("outboundList", outboundList);
  563 + rs.put("sumMileage", new DecimalFormat(".##").format(sum / 1000));
546 } catch (Exception e) { 564 } catch (Exception e) {
547 logger.error("", e); 565 logger.error("", e);
548 rs.put("status", ResponseCode.ERROR); 566 rs.put("status", ResponseCode.ERROR);
@@ -571,7 +589,7 @@ public class GpsServiceImpl implements GpsService { @@ -571,7 +589,7 @@ public class GpsServiceImpl implements GpsService {
571 int weekYear = weekCal.get(Calendar.WEEK_OF_YEAR); 589 int weekYear = weekCal.get(Calendar.WEEK_OF_YEAR);
572 //设备号 590 //设备号
573 String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm); 591 String deviceId = BasicData.deviceId2NbbmMap.inverse().get(nbbm);
574 - String sql = "select vehicle,line,up_down,lon,lat,timestamp from bsth_c_outbound where weeks_year="+weekYear+" and vehicle=? and timestamp>? and timestamp<?"; 592 + String sql = "select vehicle,line,up_down,lon,lat,timestamp from bsth_c_outbound where weeks_year=" + weekYear + " and vehicle=? and timestamp>? and timestamp<?";
575 return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st, et)); 593 return GpsOutbound_DTO.create(new JdbcTemplate(DBUtils_MS.getDataSource()).queryForList(sql, deviceId, st, et));
576 } 594 }
577 595
src/main/java/com/bsth/service/gps/entity/HistoryGps_DTO.java
@@ -29,8 +29,8 @@ public class HistoryGps_DTO { @@ -29,8 +29,8 @@ public class HistoryGps_DTO {
29 return list; 29 return list;
30 } 30 }
31 31
32 - private double gcj_lon;  
33 - private double gcj_lat; 32 + //private double gcj_lon;
  33 + //private double gcj_lat;
34 34
35 private double bd_lon; 35 private double bd_lon;
36 private double bd_lat; 36 private double bd_lat;
@@ -82,7 +82,7 @@ public class HistoryGps_DTO { @@ -82,7 +82,7 @@ public class HistoryGps_DTO {
82 return (this.getDeviceId() + "_" + (inout_stop_info==null?this.getStopNo():inout_stop_info.getStopName()) + "_" + this.getTs() + "_" + this.getLon() + "_" + this.getLat()); 82 return (this.getDeviceId() + "_" + (inout_stop_info==null?this.getStopNo():inout_stop_info.getStopName()) + "_" + this.getTs() + "_" + this.getLon() + "_" + this.getLat());
83 } 83 }
84 84
85 - public double getGcj_lon() { 85 +/* public double getGcj_lon() {
86 return gcj_lon; 86 return gcj_lon;
87 } 87 }
88 88
@@ -96,7 +96,7 @@ public class HistoryGps_DTO { @@ -96,7 +96,7 @@ public class HistoryGps_DTO {
96 96
97 public void setGcj_lat(double gcj_lat) { 97 public void setGcj_lat(double gcj_lat) {
98 this.gcj_lat = gcj_lat; 98 this.gcj_lat = gcj_lat;
99 - } 99 + }*/
100 100
101 public double getBd_lon() { 101 public double getBd_lon() {
102 return bd_lon; 102 return bd_lon;
src/main/resources/static/real_control_v2/fragments/line_schedule/context_menu/lj_zrw.html
@@ -97,6 +97,8 @@ @@ -97,6 +97,8 @@
97 <span class="uk-badge uk-badge-danger">直放</span> 97 <span class="uk-badge uk-badge-danger">直放</span>
98 {{else if sch.bcType == "major"}} 98 {{else if sch.bcType == "major"}}
99 <span class="uk-badge uk-badge-danger">放站</span> 99 <span class="uk-badge uk-badge-danger">放站</span>
  100 + {{else if sch.bcType == "region"}}
  101 + <span class="uk-badge">区间</span>
100 {{/if}} 102 {{/if}}
101 {{if sch.sflj}} 103 {{if sch.sflj}}
102 <span class="uk-badge uk-badge-danger">临加</span> 104 <span class="uk-badge uk-badge-danger">临加</span>
src/main/resources/static/real_control_v2/fragments/line_schedule/sch_table.html
@@ -72,6 +72,8 @@ @@ -72,6 +72,8 @@
72 <span class="uk-badge uk-badge-danger">直放</span> 72 <span class="uk-badge uk-badge-danger">直放</span>
73 {{else if sch.bcType == "major"}} 73 {{else if sch.bcType == "major"}}
74 <span class="uk-badge uk-badge-danger">放站</span> 74 <span class="uk-badge uk-badge-danger">放站</span>
  75 + {{else if sch.bcType == "region"}}
  76 + <span class="uk-badge">区间</span>
75 {{/if}} 77 {{/if}}
76 {{if sch.sflj}} 78 {{if sch.sflj}}
77 <span class="uk-badge uk-badge-danger">临加</span> 79 <span class="uk-badge uk-badge-danger">临加</span>
@@ -119,6 +121,8 @@ @@ -119,6 +121,8 @@
119 <span class="uk-badge uk-badge-danger">直放</span> 121 <span class="uk-badge uk-badge-danger">直放</span>
120 {{else if bcType == "major"}} 122 {{else if bcType == "major"}}
121 <span class="uk-badge uk-badge-danger">放站</span> 123 <span class="uk-badge uk-badge-danger">放站</span>
  124 + {{else if bcType == "region"}}
  125 + <span class="uk-badge">区间</span>
122 {{/if}} 126 {{/if}}
123 {{if sflj}} 127 {{if sflj}}
124 <span class="uk-badge uk-badge-danger">临加</span> 128 <span class="uk-badge uk-badge-danger">临加</span>
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
@@ -818,8 +818,17 @@ input[type=checkbox].disabled{ @@ -818,8 +818,17 @@ input[type=checkbox].disabled{
818 height: 100%; 818 height: 100%;
819 } 819 }
820 820
  821 +.map-container.show_tools{
  822 + height: calc(100% - 63px);
  823 + margin-top: 63px;
  824 +}
  825 +
821 #map-playback2-modal .uk-modal-close{ 826 #map-playback2-modal .uk-modal-close{
822 z-index: 11; 827 z-index: 11;
  828 + background: #ff3333;
  829 + opacity: 1;
  830 + border-radius: 15px;
  831 + color: white;
823 } 832 }
824 833
825 .map-wrap-tools .ct-progress-bar{ 834 .map-wrap-tools .ct-progress-bar{
@@ -828,6 +837,7 @@ input[type=checkbox].disabled{ @@ -828,6 +837,7 @@ input[type=checkbox].disabled{
828 width: 100%; 837 width: 100%;
829 bottom: 0; 838 bottom: 0;
830 cursor: pointer; 839 cursor: pointer;
  840 + overflow: hidden;
831 /*border-top: 5px solid white;*/ 841 /*border-top: 5px solid white;*/
832 } 842 }
833 843
@@ -866,7 +876,7 @@ input[type=checkbox].disabled{ @@ -866,7 +876,7 @@ input[type=checkbox].disabled{
866 .map-wrap-tools .btns>.multi-items{ 876 .map-wrap-tools .btns>.multi-items{
867 display: inline-block; 877 display: inline-block;
868 vertical-align: top; 878 vertical-align: top;
869 - background: #e7e4e4; 879 + background: #f1f1f1;
870 padding: 7px 15px; 880 padding: 7px 15px;
871 margin: 12px 5px; 881 margin: 12px 5px;
872 border-radius: 5px; 882 border-radius: 5px;
@@ -899,4 +909,16 @@ input[type=checkbox].disabled{ @@ -899,4 +909,16 @@ input[type=checkbox].disabled{
899 font-size: 22px; 909 font-size: 22px;
900 color: #8b8686; 910 color: #8b8686;
901 margin-right: 10px; 911 margin-right: 10px;
  912 +}
  913 +
  914 +.play_back_form_shade{
  915 + background: rgb(196, 194, 194);
  916 + position: absolute;
  917 + width: 98%;
  918 + height: 205px;
  919 + left: 2%;
  920 + z-index: 99;
  921 + top: 0;
  922 + opacity: .2;
  923 + display: none;
902 } 924 }
903 \ No newline at end of file 925 \ No newline at end of file
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v2/main.html
@@ -10,7 +10,8 @@ @@ -10,7 +10,8 @@
10 </div> 10 </div>
11 11
12 </div> 12 </div>
13 - <div class="uk-width-medium-2-10 uk-height-viewport z-depth-viewport "> 13 + <div class="uk-width-medium-2-10 uk-height-viewport z-depth-viewport " style="position: relative;">
  14 + <div class="play_back_form_shade uk-animation-scale"></div>
14 <form class="uk-form uk-form-horizontal playBackForm"> 15 <form class="uk-form uk-form-horizontal playBackForm">
15 <div class="uk-grid"> 16 <div class="uk-grid">
16 <div class="uk-width-1-1"> 17 <div class="uk-width-1-1">
@@ -18,7 +19,9 @@ @@ -18,7 +19,9 @@
18 <label class="uk-form-label">车辆编码</label> 19 <label class="uk-form-label">车辆编码</label>
19 <div class="uk-form-controls"> 20 <div class="uk-form-controls">
20 <div class="uk-autocomplete uk-form autocomplete-nbbm"> 21 <div class="uk-autocomplete uk-form autocomplete-nbbm">
21 - <input name="nbbm" required/> 22 + <div class="uk-autocomplete uk-form autocomplete-nbbm">
  23 + <input name="nbbm" required/>
  24 + </div>
22 </div> 25 </div>
23 </div> 26 </div>
24 </div> 27 </div>
@@ -137,35 +140,33 @@ @@ -137,35 +140,33 @@
137 <div class="map-wrap-tools uk-animation-slide-top"> 140 <div class="map-wrap-tools uk-animation-slide-top">
138 <div class="btns"> 141 <div class="btns">
139 <span class="ct_btn play_btn"></span> 142 <span class="ct_btn play_btn"></span>
140 - <span class="ct_btn clock">  
141 - 08:20.10  
142 - </span> 143 + <span class="ct_btn clock"></span>
143 <div class="multi-items"> 144 <div class="multi-items">
144 - <form class="uk-form"> 145 + <form class="uk-form speed_form">
145 <label> 146 <label>
146 - <input type="radio" name="playSpeed"> x1 147 + <input type="radio" name="playSpeed" value="1"> x1
147 </label> 148 </label>
148 <label> 149 <label>
149 - <input type="radio" name="playSpeed"> x5 150 + <input type="radio" name="playSpeed" value="5"> x5
150 </label> 151 </label>
151 <label> 152 <label>
152 - <input type="radio" name="playSpeed"> x10 153 + <input type="radio" name="playSpeed" value="10"> x10
153 </label> 154 </label>
154 <label> 155 <label>
155 - <input type="radio" name="playSpeed"> x20 156 + <input type="radio" name="playSpeed" value="20"> x20
156 </label> 157 </label>
157 </form> 158 </form>
158 </div> 159 </div>
159 <div class="multi-items"> 160 <div class="multi-items">
160 - <form class="uk-form"> 161 + <form class="uk-form buffer_area_form">
161 <label> 162 <label>
162 - <input type="checkbox"> 站点 163 + <input type="checkbox" name="drawPoint"> 站点
163 </label> 164 </label>
164 <label> 165 <label>
165 - <input type="checkbox"> 缓冲区 166 + <input type="checkbox" name="drawBuffArea"> 缓冲区
166 </label> 167 </label>
167 <label> 168 <label>
168 - <input type="checkbox"> 站点名称 169 + <input type="checkbox" name="stationName"> 站点名称
169 </label> 170 </label>
170 <label> 171 <label>
171 停车场 <i class="uk-icon-angle-down"></i> 172 停车场 <i class="uk-icon-angle-down"></i>
@@ -173,7 +174,7 @@ @@ -173,7 +174,7 @@
173 </form> 174 </form>
174 </div> 175 </div>
175 <span class="ct_btn text-panel"> 176 <span class="ct_btn text-panel">
176 - <span>约12.58公里,1258个GPS点</span><br> 177 + <span>共约 <span class="sum_mileage"></span> 公里,<span class="count_point"></span> 个GPS点</span><br>
177 <a class="export-excel"><i class="uk-icon-file-excel-o"></i> 导出轨迹</a> 178 <a class="export-excel"><i class="uk-icon-file-excel-o"></i> 导出轨迹</a>
178 </span> 179 </span>
179 </div> 180 </div>
@@ -211,7 +212,7 @@ @@ -211,7 +212,7 @@
211 212
212 <script id="multi_inout_info_cont_temp" type="text/html"> 213 <script id="multi_inout_info_cont_temp" type="text/html">
213 {{each list as item i}} 214 {{each list as item i}}
214 - <dl> 215 + <dl data-id="{{item.id}}">
215 <dd>{{item.stopName}}</dd> 216 <dd>{{item.stopName}}</dd>
216 <dd>{{item.in_time_str}}</dd> 217 <dd>{{item.in_time_str}}</dd>
217 <dd>{{item.out_time_str}}</dd> 218 <dd>{{item.out_time_str}}</dd>
@@ -221,6 +222,17 @@ @@ -221,6 +222,17 @@
221 {{/each}} 222 {{/each}}
222 </script> 223 </script>
223 224
  225 + <script id="inout_info_cont_temp" type="text/html">
  226 + <dl data-id="{{id}}">
  227 + <dd>{{stopName}}</dd>
  228 + <dd>{{in_time_str}}</dd>
  229 + <dd></dd>
  230 + <dd></dd>
  231 + <dd></dd>
  232 + </dl>
  233 + </script>
  234 +
  235 +
224 <script id="abnormal_table_cont_temp" type="text/html"> 236 <script id="abnormal_table_cont_temp" type="text/html">
225 {{each array as item i}} 237 {{each array as item i}}
226 <dl> 238 <dl>
@@ -242,15 +254,8 @@ @@ -242,15 +254,8 @@
242 var modal = '#map-playback2-modal', gpsArray; 254 var modal = '#map-playback2-modal', gpsArray;
243 255
244 $(modal).on('init', function (e, data) { 256 $(modal).on('init', function (e, data) {
245 - try {  
246 - //初始化地图  
247 - map = new BMap.Map($('.map-container', modal)[0]);  
248 - //中心点和缩放级别  
249 - map.centerAndZoom(new BMap.Point(gb_map_consts.center_point.lng, gb_map_consts.center_point.lat), 16);  
250 - map.enableScrollWheelZoom();  
251 - } catch (e) {  
252 - console.log(e);  
253 - } 257 + //初始化地图
  258 + mapObj.initMap();
254 259
255 //固定表头 260 //固定表头
256 gb_ct_table.fixedHead($('.road_table_wrap', modal)); 261 gb_ct_table.fixedHead($('.road_table_wrap', modal));
@@ -261,6 +266,11 @@ @@ -261,6 +266,11 @@
261 266
262 //表单初始值 267 //表单初始值
263 searchForm.init(data); 268 searchForm.init(data);
  269 +
  270 + //车辆 autocomplete
  271 + $.get('/basic/cars', function (rs) {
  272 + gb_common.carAutocomplete($('.autocomplete-nbbm', modal), rs);
  273 + });
264 }); 274 });
265 275
266 /** 276 /**
@@ -306,95 +316,122 @@ @@ -306,95 +316,122 @@
306 */ 316 */
307 var searchForm = (function () { 317 var searchForm = (function () {
308 318
309 - var f = $('.playBackForm', modal);  
310 -  
311 - var init = function (data) {  
312 - //设置初始值  
313 - /*if (data.nbbm)  
314 - $('[name=nbbm]', f).val(data.nbbm);  
315 - var st = moment().subtract(2, 'hour');  
316 - if (data.st)  
317 - st = moment(data.st, 'YYYY-MM-DD HH:mm');  
318 - $('[name=sDate]', f).val(st.format('YYYY-MM-DD'));  
319 - $('[name=sTime]', f).val(st.format('HH:mm'));  
320 - var et = moment();  
321 - if (data.et)  
322 - et = moment(data.et, 'YYYY-MM-DD HH:mm');  
323 - $('[name=eDate]', f).val(et.format('YYYY-MM-DD'));  
324 - $('[name=eTime]', f).val(et.format('HH:mm'));*/  
325 -  
326 -  
327 - $('[name=nbbm]', f).val('W0A-018');  
328 - $('[name=sDate]', f).val('2017-04-06');  
329 - $('[name=sTime]', f).val('04:49');  
330 -  
331 - $('[name=eDate]', f).val('2017-04-06');  
332 - $('[name=eTime]', f).val('09:49');  
333 - //搜索事件  
334 - $('button[type=submit]', f).on('click', search);  
335 - };  
336 -  
337 - var setNbbm = function (v) {  
338 - $('[name=nbbm]', f).val(v);  
339 - };  
340 -  
341 - var ONE_DAY = 60 * 60 * 24;  
342 - var MIN_SPACE = 60;  
343 - var search = function (e) {  
344 - e.stopPropagation();  
345 - var data = f.serializeJSON();  
346 -  
347 - //校验时间间隔  
348 - var fs = 'YYYY-MM-DDHH:mm';  
349 - var st = parseInt(moment(data.sDate + data.sTime, fs).format('X'));  
350 - var et = parseInt(moment(data.eDate + data.eTime, fs).format('X'));  
351 -  
352 - if (et < st)  
353 - notify_err('结束时间不能小于开始时间');  
354 - else if ((et - st) > ONE_DAY)  
355 - notify_err('最大间隔24小时!');  
356 - else if ((et - st) < MIN_SPACE)  
357 - notify_err('最小间隔1分钟!');  
358 - else {  
359 - $.ajax({  
360 - url: '/gps/history_v2/' + data.nbbm,  
361 - traditional: true,  
362 - data: {st: st, et: et},  
363 - success: function (rs) {  
364 - gpsArray = rs.list;  
365 - if (!rs || rs.length == 0) {  
366 - notify_err('没有搜索到轨迹数据!');  
367 - return;  
368 - }  
369 -  
370 - //排序  
371 - gpsArray.sort(function (a, b) {  
372 - return parseInt((a.ts - b.ts) + '' + (a.stop_no - b.stop_no));  
373 - });  
374 - //行车轨迹  
375 - trailTableObj.showInitData(gpsArray);  
376 - //到离站信息  
377 - inOutStationTableObj.showInitData(gpsArray);  
378 - //异常信息  
379 - abnormalTableObj.showInitData(rs['outboundList'], rs['speedList']);  
380 - //show 工具条  
381 - mapTools.show();  
382 - } 319 + var f = $('.playBackForm', modal);
  320 +
  321 + var init = function (data) {
  322 + //设置初始值
  323 + if (data.nbbm)
  324 + $('[name=nbbm]', f).val(data.nbbm);
  325 + var st = moment().subtract(2, 'hour');
  326 + if (data.st)
  327 + st = moment(data.st, 'YYYY-MM-DD HH:mm');
  328 + $('[name=sDate]', f).val(st.format('YYYY-MM-DD'));
  329 + $('[name=sTime]', f).val(st.format('HH:mm'));
  330 + var et = moment();
  331 + if (data.et)
  332 + et = moment(data.et, 'YYYY-MM-DD HH:mm');
  333 + $('[name=eDate]', f).val(et.format('YYYY-MM-DD'));
  334 + $('[name=eTime]', f).val(et.format('HH:mm'));
  335 +
  336 +
  337 + /*$('[name=nbbm]', f).val('W0A-018');
  338 + $('[name=sDate]', f).val('2017-04-06');
  339 + $('[name=sTime]', f).val('04:49');
  340 +
  341 + $('[name=eDate]', f).val('2017-04-06');
  342 + $('[name=eTime]', f).val('09:49');*/
  343 + //搜索事件
  344 + $('button[type=submit]', f).on('click', search);
  345 + };
  346 +
  347 + var setNbbm = function (v) {
  348 + $('[name=nbbm]', f).val(v);
  349 + };
  350 +
  351 + var ONE_DAY = 60 * 60 * 24;
  352 + var MIN_SPACE = 60;
  353 + var search = function (e) {
  354 + e.stopPropagation();
  355 + var data = f.serializeJSON();
  356 +
  357 + //校验时间间隔
  358 + var fs = 'YYYY-MM-DDHH:mm';
  359 + var st = parseInt(moment(data.sDate + data.sTime, fs).format('X'));
  360 + var et = parseInt(moment(data.eDate + data.eTime, fs).format('X'));
  361 +
  362 + if (et < st)
  363 + notify_err('结束时间不能小于开始时间');
  364 + else if ((et - st) > ONE_DAY)
  365 + notify_err('最大间隔24小时!');
  366 + else if ((et - st) < MIN_SPACE)
  367 + notify_err('最小间隔1分钟!');
  368 + else {
  369 + show_wait_modal('搜索数据...');
  370 + $.ajax({
  371 + url: '/gps/history_v2/' + data.nbbm,
  372 + traditional: true,
  373 + data: {st: st, et: et},
  374 + success: function (rs) {
  375 + hide_wait_modal();
  376 + //重置相关对象
  377 + playObj.reset();
  378 + mapObj.reset();
  379 +
  380 + gpsArray = rs.list;
  381 + if (!gpsArray || gpsArray.length == 0) {
  382 + notify_err('没有搜索到轨迹数据!');
  383 + return;
  384 + }
  385 +
  386 + //排序
  387 + gpsArray.sort(function (a, b) {
  388 + return parseInt((a.ts - b.ts) + '' + (a.stop_no - b.stop_no));
383 }); 389 });
  390 + //行车轨迹
  391 + trailTableObj.showInitData(gpsArray);
  392 + //到离站信息
  393 + inOutStationTableObj.showInitData(gpsArray);
  394 + //异常信息
  395 + abnormalTableObj.showInitData(rs['outboundList'], rs['speedList']);
  396 + //show 工具条
  397 + mapTools.show(rs);
  398 + //地图
  399 + mapObj.initData(rs);
  400 + //play 对象
  401 + playObj.init(rs);
  402 + //设置导出文件名称
  403 + mapTools.setExcelName();
384 } 404 }
385 - return false;  
386 - };  
387 - return {  
388 - init: init,  
389 - setNbbm: setNbbm  
390 - };  
391 - })(); 405 + });
  406 + }
  407 + return false;
  408 + };
  409 +
  410 + //遮罩
  411 + var shade = $('.play_back_form_shade', modal);
  412 + var showShade = function () {
  413 + shade.show();
  414 + };
  415 + var hideShade = function () {
  416 + shade.hide();
  417 + };
  418 +
  419 + return {
  420 + init: init,
  421 + setNbbm: setNbbm,
  422 + showShade: showShade,
  423 + hideShade: hideShade
  424 + };
  425 + })();
392 426
393 /** 427 /**
394 * 行车轨迹表格 428 * 行车轨迹表格
395 */ 429 */
396 var trailTableObj = (function () { 430 var trailTableObj = (function () {
397 431
  432 + var $tbody = $('.gps-road-info .ct_table_body', modal);
  433 + var $wrap = $('.road_table_wrap', modal);
  434 + var initFlag, gpsArray;
398 var showInitData = function (list) { 435 var showInitData = function (list) {
399 var array = []; 436 var array = [];
400 for (var i = 0, gps; gps = list[i++];) { 437 for (var i = 0, gps; gps = list[i++];) {
@@ -412,11 +449,41 @@ @@ -412,11 +449,41 @@
412 } 449 }
413 450
414 var htmlStr = template('gps_road_info_cont_temp', {array: array}); 451 var htmlStr = template('gps_road_info_cont_temp', {array: array});
415 - $('.gps-road-info .ct_table_body', modal).html(htmlStr); 452 + $tbody.html(htmlStr);
  453 + initFlag = true;
  454 + gpsArray = list;
  455 + };
  456 +
  457 + var prev;
  458 + var add = function (gps, i) {
  459 + if(i == 0)
  460 + return;
  461 + if(initFlag){
  462 + //清理初始化的数据
  463 + $tbody.html('');
  464 + initFlag = false;
  465 + }
  466 + if (!gps.road)
  467 + return;
  468 + var code = gps.road.road_CODE;
  469 + if (!prev || code != prev.road.road_CODE) {
  470 + $tbody.append(template('gps_road_info_cont_temp', {array: [gps]}));
  471 + }
  472 + else{
  473 + var dds = $tbody.find('dl[data-code=' + code + ']').last().find('dd');
  474 + $(dds[0]).text(gps.timeStr);
  475 + $(dds[1]).text(gps.speed);
  476 + }
  477 + prev = gps;
  478 + $wrap.scrollTop($wrap[0].scrollHeight);
416 }; 479 };
417 480
418 return { 481 return {
419 - showInitData: showInitData 482 + showInitData: showInitData,
  483 + add : add,
  484 + gpsArray : function () {
  485 + return gpsArray;
  486 + }
420 }; 487 };
421 })(); 488 })();
422 489
@@ -426,17 +493,16 @@ @@ -426,17 +493,16 @@
426 */ 493 */
427 var inOutStationTableObj = (function () { 494 var inOutStationTableObj = (function () {
428 495
429 - var data, f, prev; 496 + var data, f, prev, initFlag;
  497 + var $wrap = $('.inout_table_wrap', modal);
  498 + var $tbody = $('.ct_table_body', $wrap);
430 var showInitData = function (list) { 499 var showInitData = function (list) {
431 clear(); 500 clear();
432 data = []; 501 data = [];
433 -  
434 $.each(list, function (i, gps) { 502 $.each(list, function (i, gps) {
435 -  
436 prev = data[data.length - 1]; 503 prev = data[data.length - 1];
437 if (gps['inout_stop'] == -1) 504 if (gps['inout_stop'] == -1)
438 return true; 505 return true;
439 -  
440 if (gps['inout_stop'] == 0) { 506 if (gps['inout_stop'] == 0) {
441 //连续进站信号,取第一个 507 //连续进站信号,取第一个
442 if(prev && prev['out_ts'] == null 508 if(prev && prev['out_ts'] == null
@@ -451,37 +517,62 @@ @@ -451,37 +517,62 @@
451 data.push(f); 517 data.push(f);
452 } 518 }
453 }); 519 });
454 -  
455 //格式化时间 520 //格式化时间
456 - $.each(data, function () { 521 + $.each(data, function (i) {
457 if (this.in_ts) 522 if (this.in_ts)
458 this.in_time_str = moment(this.in_ts).format('HH:mm.ss'); 523 this.in_time_str = moment(this.in_ts).format('HH:mm.ss');
459 if (this.out_ts) 524 if (this.out_ts)
460 this.out_time_str = moment(this.out_ts).format('HH:mm.ss'); 525 this.out_time_str = moment(this.out_ts).format('HH:mm.ss');
  526 + //id
  527 + this.id = 'in_out_' + i;
461 }); 528 });
462 -  
463 var htmlStr = template('multi_inout_info_cont_temp', {list: data}); 529 var htmlStr = template('multi_inout_info_cont_temp', {list: data});
464 - $('.inout_table_wrap .ct_table_body', modal).html(htmlStr); 530 + $tbody.html(htmlStr);
  531 + initFlag = true;
  532 + len = data.length;
465 }; 533 };
466 534
467 - var add = function (gps) { 535 + var inoutIndex=0, len, item;
  536 + var add = function (gps, i) {
  537 + if(i == 0)
  538 + return;
  539 + if(initFlag)
  540 + clear();
  541 +
  542 + var $dl;
  543 + for(j = inoutIndex; j < len; j++){
  544 + item = data[j];
  545 + $dl = $tbody.find('dl[data-id='+item.id+']');
  546 + if(gps.ts >= item.in_ts && $dl.length==0){
  547 + $tbody.append(template('inout_info_cont_temp', item));
  548 + inoutIndex = j;
  549 + }
468 550
  551 + if(gps.ts >= item.out_ts){
  552 + var dds = $dl.find('dd');
  553 + if($dl.length==0)
  554 + $tbody.append(template('inout_info_cont_temp', item));
  555 + else
  556 + $(dds[2]).text(item.out_time_str);
  557 + inoutIndex = j;
  558 + }
  559 + else {
  560 + break;
  561 + }
  562 + }
  563 + $wrap.scrollTop($wrap[0].scrollHeight);
469 }; 564 };
470 565
471 var clear = function () { 566 var clear = function () {
472 - 567 + $tbody.html('');
  568 + initFlag = false;
473 }; 569 };
474 570
475 var createIn = function (gps) { 571 var createIn = function (gps) {
476 var info = gps['inout_stop_info']; 572 var info = gps['inout_stop_info'];
477 - return {  
478 - in_ts: info.ts,  
479 - stopNo: info.stopNo,  
480 - stopName: info.stopName  
481 - } 573 + return {in_ts: info.ts, stopNo: info.stopNo, stopName: info.stopName}
482 }; 574 };
483 575
484 -  
485 var matchOut = function (prevInfo, gps) { 576 var matchOut = function (prevInfo, gps) {
486 var oi = gps['inout_stop_info']; 577 var oi = gps['inout_stop_info'];
487 if(prevInfo && prevInfo.stopName == oi.stopName){ 578 if(prevInfo && prevInfo.stopName == oi.stopName){
@@ -489,16 +580,13 @@ @@ -489,16 +580,13 @@
489 return null; 580 return null;
490 } 581 }
491 else { 582 else {
492 - return {  
493 - out_ts: oi.ts,  
494 - stopNo: oi.stopNo,  
495 - stopName: oi.stopName  
496 - } 583 + return {out_ts: oi.ts,stopNo: oi.stopNo,stopName: oi.stopName}
497 } 584 }
498 }; 585 };
499 586
500 return { 587 return {
501 - showInitData: showInitData 588 + showInitData: showInitData,
  589 + add: add
502 }; 590 };
503 })(); 591 })();
504 592
@@ -521,6 +609,11 @@ @@ -521,6 +609,11 @@
521 this.et_str = moment(this.et).format('HH:mm.ss'); 609 this.et_str = moment(this.et).format('HH:mm.ss');
522 }); 610 });
523 611
  612 + //排序
  613 + array.sort(function (a, b) {
  614 + return a.st - b.st;
  615 + });
  616 +
524 var htmlStr = template('abnormal_table_cont_temp', {array: array}); 617 var htmlStr = template('abnormal_table_cont_temp', {array: array});
525 $('.abnormal_table .ct_table_body', modal).html(htmlStr); 618 $('.abnormal_table .ct_table_body', modal).html(htmlStr);
526 }; 619 };
@@ -539,19 +632,381 @@ @@ -539,19 +632,381 @@
539 if($(this).hasClass('play')){ 632 if($(this).hasClass('play')){
540 //暂停 633 //暂停
541 $(this).removeClass('play'); 634 $(this).removeClass('play');
  635 + playObj.pause();
  636 + searchForm.hideShade();
542 } 637 }
543 else { 638 else {
544 //播放 639 //播放
545 $(this).addClass('play'); 640 $(this).addClass('play');
  641 + playObj.play();
  642 + playObj.fixedToCenter();
  643 + searchForm.showShade();
546 } 644 }
547 }); 645 });
548 646
549 - var show = function () { 647 + //播放速度
  648 + $('.speed_form input[name=playSpeed]', modal).on('click', function () {
  649 + playObj.setConf('playSpeed', $(this).val());
  650 + });
  651 +
  652 + //空间数据
  653 + $('.buffer_area_form input[type=checkbox]', modal).on('click', function () {
  654 + playObj.setConf($(this).attr('name'), $(this)[0].checked);
  655 + mapObj.refreshOverlay();
  656 + });
  657 +
  658 + //进度条
  659 + var step, $scale = $('.ct-progress-bar .scale', modal);
  660 + var upProgressBar = function (i) {
  661 + $scale.css('width', step * (i + 1));
  662 + };
  663 +
  664 + //导出
  665 + $('.export-excel', modal).on('click', function () {
  666 + var base64Str = gb_map_play_back.listToExcel(trailTableObj.gpsArray());
  667 + $(this).attr('href', base64Str);
  668 + });
  669 +
  670 + var setExcelName = function () {
  671 + var f = $('.playBackForm', modal);
  672 + var fileName = ($('[name=nbbm]', f).val() + '轨迹数据' + $('[name=sDate]', f).val() + $('[name=sTime]', f).val() + '至' + $('[name=eDate]', f).val() + $('[name=eTime]', f).val() + '.xls').replace(new RegExp(/-/g),'').replace(new RegExp(/:/g),'');
  673 + $('.export-excel', modal).attr('download', fileName);
  674 + };
  675 +
  676 + var gpsArray;
  677 + var show = function (rs) {
550 $('.map-wrap-tools').show(); 678 $('.map-wrap-tools').show();
  679 + $('.map-container', modal).addClass('show_tools');
  680 + //总里程
  681 + $('.text-panel .sum_mileage', modal).text(rs.sumMileage);
  682 +
  683 + var size = rs.list.length;
  684 + $('.text-panel .count_point', modal).text(size);
  685 + step = $('.ct-progress-bar', modal).width() / size;
  686 +
  687 + //console.log('stepstep', step);
  688 + };
  689 +
  690 + return {
  691 + show: show,
  692 + upProgressBar: upProgressBar,
  693 + setExcelName: setExcelName
  694 + }
  695 + })();
  696 +
  697 + /**
  698 + * 地图相关
  699 + */
  700 + var mapObj = (function () {
  701 + var map;
  702 + var initMap = function () {
  703 + //初始化地图
  704 + map = new BMap.Map($('.map-container', modal)[0]);
  705 + //中心点和缩放级别
  706 + map.centerAndZoom(new BMap.Point(gb_map_consts.center_point.lng, gb_map_consts.center_point.lat), 16);
  707 + map.enableScrollWheelZoom();
  708 + }
  709 +
  710 + var storage = window.localStorage;
  711 + var routes;//路段
  712 + var stations;//站点
  713 + var parks;//停车场
  714 +
  715 + var initData = function (rs) {
  716 + var gpsArray = rs.list;
  717 + if(!gpsArray || gpsArray.length==0)
  718 + return;
  719 + var lineCode = gpsArray[0].lineId;
  720 + //从地图模块获取站点数据
  721 + stations = gb_map_spatial_data.getStationArray(lineCode);
  722 + //从地图模块获取停车场数据
  723 + parks = gb_map_spatial_data.carparkArray();
  724 + //从localStorage 获取路段
  725 + routes = JSON.parse(storage.getItem(lineCode + '_route'));
  726 + routes = [routes.up_bd, routes.down_bd];
  727 + };
  728 +
  729 +
  730 + /**
  731 + * 更新车辆位置
  732 + */
  733 + var gpsMarker;
  734 + var updateCar = function (gps) {
  735 + if(!gpsMarker){
  736 + gpsMarker = new BMap.Marker(new BMap.Point(gps.bd_lon, gps.bd_lat));
  737 + var width = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);
  738 + gpsMarker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));
  739 + gpsMarker.disableMassClear();//禁止marker被清除
  740 + gpsMarker.setTop(true);
  741 + map.addOverlay(gpsMarker);
  742 + //居中
  743 + map.panTo(gpsMarker.getPosition());
  744 + }
  745 + else{
  746 + gpsMarker.setPosition(new BMap.Point(gps.bd_lon, gps.bd_lat));
  747 + var width = gb_map_imap.calcGpsMarkerWidth(gps.nbbm);
  748 + gpsMarker.setIcon(new BMap.Icon(gb_map_imap.createCarIconRotation(gps, width), new BMap.Size(width, 75)));
  749 + }
  750 +
  751 + //更新路段底图
  752 + if(gps.upDown!=roadUpdown){
  753 + switchPolyline(gps.upDown);
  754 + //清除轨迹线
  755 + trailArray = [];
  756 + }
  757 + };
  758 +
  759 + /**
  760 + * 绘制轨迹线
  761 + */
  762 + var trailArray=[], trailPolyline;
  763 + var updateTrailLine = function () {
  764 + trailArray.push(gpsMarker.getPosition());
  765 + if(!trailPolyline){
  766 + trailPolyline = new BMap.Polyline(trailArray, {strokeWeight: 3, strokeColor: '#000000'});
  767 + trailPolyline.disableMassClear();//禁止trailPolyline被清除
  768 + map.addOverlay(trailPolyline);
  769 + }
  770 + else{
  771 + trailPolyline.setPath(trailArray);
  772 + }
  773 + };
  774 +
  775 + /**
  776 + * 绘制路段底图(包括站点)
  777 + */
  778 + var roadUpdown=-1;
  779 + var switchPolyline = function (upDown) {
  780 + if(typeof(upDown) == "undefined")
  781 + upDown = roadUpdown;
  782 +
  783 + map.clearOverlays();
  784 + //路段
  785 + drawRoadPolyline(upDown);
  786 + //站点
  787 + if(playObj.getConf().drawPoint)
  788 + drawStationPoint(upDown);
  789 + //缓冲区
  790 + if(playObj.getConf().drawBuffArea)
  791 + drawStationBfArea(upDown);
  792 + //站点名称
  793 + if(playObj.getConf().stationName)
  794 + drawStationName(upDown);
  795 + roadUpdown = upDown;
  796 + };
  797 +
  798 + /**
  799 + * 根据走向绘制路段
  800 + */
  801 + var drawRoadPolyline = function (upDown) {
  802 + var colour = gb_map_config.getConfig().section.color;
  803 + var plConfig = {strokeWeight: 12, strokeColor: upDown?colour.down:colour.up, strokeOpacity: .4}, pos;
  804 + $.each(routes[upDown], function (i, item) {
  805 + pos = [];
  806 + $.each(item.split(','), function () {
  807 + temps = this.split(' ');
  808 + pos.push(new BMap.Point(temps[0], temps[1]));
  809 + });
  810 + map.addOverlay(new BMap.Polyline(pos, plConfig));
  811 + });
  812 + };
  813 +
  814 + /**
  815 + * 根据走向绘制站点点位
  816 + */
  817 + var drawStationPoint = function (upDown) {
  818 + var array = stations[upDown], psm;
  819 + $.each(array, function () {
  820 + //坐标转换
  821 + var coord = TransGPS.wgsToBD(this.lat, this.lon);
  822 + this.bd_lat = coord.lat;
  823 + this.bd_lon = coord.lng;
  824 + psm = new BMap.Marker(new BMap.Point(this.bd_lon, this.bd_lat));
  825 + psm.setTitle(this.stationName);
  826 + map.addOverlay(psm);
  827 + psm.setIcon(new BMap.Icon(gb_map_imap.createStationPointIcon(), new BMap.Size(12, 12)));
  828 + });
  829 + };
  830 +
  831 + /**
  832 + * 为站点绘制缓冲区
  833 + */
  834 + var drawStationBfArea = function (upDown) {
  835 + var array = stations[upDown];
  836 + $.each(array, function () {
  837 + if(this.shapesType=='r')
  838 + drawCircle(new BMap.Point(this.bd_lon, this.bd_lat), this.radius);
  839 + else if(this.shapesType=='d')
  840 + drawPolygon(this);
  841 + });
551 }; 842 };
552 843
  844 + /**
  845 + * 绘制站点名称
  846 + */
  847 + var drawStationName = function (upDown) {
  848 + var style = {backgroundColor: "rgba(255, 255, 255, 0.69)",color : "black", borderColor: "black", fontSize : "12px", height : "16px", lineHeight : "16px", fontFamily:"微软雅黑"}
  849 + var array = stations[upDown];
  850 + $.each(array, function () {
  851 + var width = this.stationName.length * 12;
  852 + var label = new BMap.Label(this.stationName, {
  853 + position:new BMap.Point(this.bd_lon, this.bd_lat),
  854 + offset: new BMap.Size(-(width / 2), -27)
  855 + });
  856 + label.setStyle(style);
  857 + map.addOverlay(label);
  858 + });
  859 + };
  860 + var drawCircle = function (point, radius) {
  861 + var circle = new BMap.Circle(point, radius);
  862 + circle.setStrokeColor('#000000');
  863 + circle.setStrokeWeight(1);
  864 + map.addOverlay(circle);
  865 + };
  866 +
  867 + var drawPolygon = function () {
  868 +
  869 + };
  870 +
  871 + /**
  872 + * 重置
  873 + */
  874 + var reset = function () {
  875 + if(trailPolyline)
  876 + trailPolyline.enableMassClear();
  877 + if(gpsMarker)
  878 + gpsMarker.enableMassClear();
  879 + map.clearOverlays();
  880 + roadUpdown = -1;
  881 + trailArray=[];
  882 + trailPolyline = null;
  883 + gpsMarker = null;
  884 + };
  885 +
  886 + /**
  887 + * 居中车辆,超出边界时
  888 + */
  889 + var toCenterByBounds = function () {
  890 + var markerIsVisible = BMapLib.GeoUtils.isPointInRect(gpsMarker.getPosition(),map.getBounds());
  891 + if(!markerIsVisible)
  892 + map.panTo(gpsMarker.getPosition());
  893 + };
  894 + return {
  895 + initData: initData,
  896 + updateCar: updateCar,
  897 + initMap: initMap,
  898 + updateTrailLine: updateTrailLine,
  899 + refreshOverlay: switchPolyline,
  900 + toCenterByBounds: toCenterByBounds,
  901 + reset: reset
  902 + }
  903 + })();
  904 +
  905 + /**
  906 + * 播放相关
  907 + * @type {{}}
  908 + */
  909 + var playObj = (function () {
  910 + var conf = {
  911 + playSpeed: 1,//播放速度
  912 + drawPoint: 1,//绘制站点
  913 + drawBuffArea: 1 ,//缓冲区
  914 + stationName: 0, //站点名称
  915 + carPark: [] //停车场
  916 + };
  917 +
  918 + var gpsArray;//gps点位集合
  919 + var init = function (rs) {
  920 + gpsArray = rs.list;
  921 + if(!gpsArray || gpsArray.length==0)
  922 + return;
  923 +
  924 + len = gpsArray.length;
  925 + //渲染配置信息
  926 + renderConfig();
  927 + //播放第一个点
  928 + run();
  929 + };
  930 +
  931 + var renderConfig = function () {
  932 + $('.speed_form [name=playSpeed][value='+conf.playSpeed+']', modal)[0].checked = true;
  933 + $('.buffer_area_form input[type=checkbox]', modal).each(function () {
  934 + var name = $(this).attr('name');
  935 + $(this)[0].checked = conf[name];
  936 + });
  937 + };
  938 +
  939 + /**
  940 + * 播放函数
  941 + */
  942 + var runTimer; //播放定时器
  943 + var toCenterTimer;//居中定时器
  944 + var index = 0; //gps下标
  945 + var play = function () {
  946 + if(!run())
  947 + runTimer = setTimeout(play, 1000 / conf.playSpeed);
  948 + };
  949 +
  950 + /**
  951 + * 定时居中
  952 + */
  953 + var fixedToCenter = function () {
  954 + toCenterTimer = setInterval(function () {
  955 + mapObj.toCenterByBounds();
  956 + }, 500);
  957 + };
  958 +
  959 + var pause = function () {
  960 + clearInterval(runTimer);
  961 + runTimer = null;
  962 + clearInterval(toCenterTimer);
  963 + toCenterTimer = null;
  964 + };
  965 +
  966 + var clock = $('.ct_btn.clock', modal), gps, len;
  967 + var run = function () {
  968 + if(index == len){
  969 + $('.map-wrap-tools .play_btn', modal).removeClass('play');
  970 + pause();
  971 + notify_succ('本次轨迹回放已结束!');
  972 + return true;
  973 + }
  974 + gps = gpsArray[index];
  975 + //更新GPS点位
  976 + mapObj.updateCar(gps);
  977 + //绘制轨迹线
  978 + mapObj.updateTrailLine();
  979 + //时间文本
  980 + clock.text(gps.timeStr);
  981 + //输出行车轨迹
  982 + trailTableObj.add(gps, index);
  983 + //输出到离站信息
  984 + inOutStationTableObj.add(gps, index);
  985 + //进度条
  986 + mapTools.upProgressBar(index);
  987 + index ++;
  988 + };
  989 +
  990 + /**
  991 + * 重置
  992 + */
  993 + var reset = function () {
  994 + index = 0;
  995 + gpsArray = null;
  996 + pause();
  997 + };
553 return { 998 return {
554 - show: show 999 + init: init,
  1000 + getConf: function () {
  1001 + return conf;
  1002 + },
  1003 + setConf: function (k, v) {
  1004 + conf[k] = v;
  1005 + },
  1006 + play: play,
  1007 + fixedToCenter: fixedToCenter,
  1008 + pause: pause,
  1009 + reset: reset
555 } 1010 }
556 })(); 1011 })();
557 })(); 1012 })();
src/main/resources/static/real_control_v2/mapmonitor/js/gps_tree.js
@@ -203,7 +203,6 @@ var gb_map_gps_tree = (function () { @@ -203,7 +203,6 @@ var gb_map_gps_tree = (function () {
203 if(this.nbbm.indexOf(v) != -1){ 203 if(this.nbbm.indexOf(v) != -1){
204 rs.push({ 204 rs.push({
205 value: this.nbbm, 205 value: this.nbbm,
206 - lineName: '青浦1路',  
207 stationName: this.stationName?this.stationName:'', 206 stationName: this.stationName?this.stationName:'',
208 dateStr: this.dateStr 207 dateStr: this.dateStr
209 }); 208 });
src/main/resources/static/real_control_v2/mapmonitor/js/map/iMap.js
@@ -34,6 +34,7 @@ var gb_map_imap = (function () { @@ -34,6 +34,7 @@ var gb_map_imap = (function () {
34 busIcon: '/real_control_v2/assets/imgs/bus1-R.png', 34 busIcon: '/real_control_v2/assets/imgs/bus1-R.png',
35 _color: color, 35 _color: color,
36 createCarIconRotation: createCarIconRotation, 36 createCarIconRotation: createCarIconRotation,
  37 + createStationPointIcon: createStationPointIcon,
37 createStationIcon: createStationIcon, 38 createStationIcon: createStationIcon,
38 call: function (f, opts) { 39 call: function (f, opts) {
39 var instance = maps[currentMap].instance; 40 var instance = maps[currentMap].instance;
@@ -86,7 +87,7 @@ var gb_map_imap = (function () { @@ -86,7 +87,7 @@ var gb_map_imap = (function () {
86 87
87 88
88 //绘制车辆icon 带角度标示 89 //绘制车辆icon 带角度标示
89 - function createCarIconRotation(gps, w) { 90 +/* function createCarIconRotation(gps, w) {
90 if (!w) 91 if (!w)
91 w = 70; 92 w = 70;
92 93
@@ -119,6 +120,81 @@ var gb_map_imap = (function () { @@ -119,6 +120,81 @@ var gb_map_imap = (function () {
119 ctx.restore(); 120 ctx.restore();
120 121
121 return canvas.toDataURL(); 122 return canvas.toDataURL();
  123 + }*/
  124 +
  125 + function createCarIconRotation(gps, w) {
  126 + if (!w)
  127 + w = 70;
  128 +
  129 + var canvas = $('<canvas></canvas>')[0];
  130 + canvas.width = w;
  131 + canvas.height = 64;
  132 + var ctx = canvas.getContext('2d');
  133 +
  134 + var colours = color(gps);
  135 +
  136 + ctx.roundRect(0, 0, w, 19, 4).stroke();
  137 + ctx.fillStyle = colours.bgColor;
  138 + ctx.fill();
  139 + //文字
  140 + ctx.font = "14px arial";
  141 + ctx.fillStyle = "#fff";
  142 + ctx.fillText(gps.nbbm, 2, 14);
  143 +
  144 + //角度图标
  145 + //var img = new Image();
  146 + //img.src = rotationIcon(colours.bgColor);
  147 + ctx.save();
  148 + ctx.translate(canvas.width / 2, canvas.height / 2);
  149 + ctx.rotate(gps.direction * Math.PI / 180);
  150 + //ctx.drawImage(img, -img.width / 2, -img.width / 2);
  151 + /**
  152 + * 绘制角度图标
  153 + */
  154 + ctx.beginPath();
  155 + ctx.strokeStyle = colours.bgColor;
  156 + var circle = {
  157 + x: 0, //圆心的x轴坐标值
  158 + y: 0, //圆心的y轴坐标值
  159 + r: 12 //圆的半径
  160 + };
  161 + var d = 12.5;
  162 + //绘制圆形
  163 + ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);
  164 + //按照指定的路径绘制弧线
  165 + ctx.stroke();
  166 + ctx.fillStyle = "#ffffff";
  167 + ctx.fill();
  168 + //下方矩形
  169 + ctx.beginPath();
  170 + ctx.fillStyle = colours.bgColor;
  171 + ctx.fillRect(5 - d, 16 - d, 15, 4);
  172 + ctx.rect(5 - d, 11 - d, 7.5, 8);
  173 + ctx.rect(12.5 - d, 11 - d, 7.5, 8);
  174 + ctx.strokeStyle = colours.bgColor;
  175 + ctx.stroke();
  176 + //上方三角形
  177 + ctx.beginPath();
  178 + ctx.fillStyle = "#111111";
  179 + ctx.moveTo(12.5 - d, 3 - d);
  180 + ctx.lineTo(6.5 - d, 7.5 - d);
  181 + ctx.lineTo(18.5 - d, 7.5 - d);
  182 + ctx.closePath();
  183 + ctx.fill();
  184 +
  185 + ctx.restore();
  186 + return canvas.toDataURL();
  187 + }
  188 +
  189 + //绘制站点点位icon
  190 + function createStationPointIcon() {
  191 + var canvas = $('<canvas></canvas>')[0];
  192 + var ctx = canvas.getContext('2d');
  193 + ctx.beginPath();
  194 + ctx.arc(6,6,6,0,2*Math.PI);
  195 + ctx.fillStyle = '#000000';
  196 + ctx.fill();
  197 + return canvas.toDataURL();
122 } 198 }
123 199
124 200
@@ -136,7 +212,7 @@ var gb_map_imap = (function () { @@ -136,7 +212,7 @@ var gb_map_imap = (function () {
136 y: 12.5, //圆心的y轴坐标值 212 y: 12.5, //圆心的y轴坐标值
137 r: 12 //圆的半径 213 r: 12 //圆的半径
138 }; 214 };
139 - //以canvas中的坐标点(100,100)为圆心,绘制一个半径为50px的圆形 215 + //绘制圆形
140 ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true); 216 ctx.arc(circle.x, circle.y, circle.r, 0, Math.PI * 2, true);
141 //按照指定的路径绘制弧线 217 //按照指定的路径绘制弧线
142 ctx.stroke(); 218 ctx.stroke();
src/main/resources/static/real_control_v2/mapmonitor/js/playback.js
@@ -29,7 +29,7 @@ var gb_map_play_back = (function () { @@ -29,7 +29,7 @@ var gb_map_play_back = (function () {
29 ' <table border="1">' + 29 ' <table border="1">' +
30 ' <tr><th>序号</th><th>车辆</th><th>所在道路</th><th>经度</th><th>纬度</th><th>时间</th><th>速度</th></tr>' + 30 ' <tr><th>序号</th><th>车辆</th><th>所在道路</th><th>经度</th><th>纬度</th><th>时间</th><th>速度</th></tr>' +
31 ' {{each list as gps i}}' + 31 ' {{each list as gps i}}' +
32 - ' <tr><td>{{i+1}}</td><td>{{gps.nbbm}}</td><td>{{gps.road.ROAD_NAME}}</td><td>{{gps.bd_lon}}</td><td>{{gps.bd_lat}}</td><td>{{gps.timeStr2}}</td><td>{{gps.speed}}</td></tr>' + 32 + ' <tr><td>{{i+1}}</td><td>{{gps.nbbm}}</td><td>{{gps.road.road_NAME}}</td><td>{{gps.bd_lon}}</td><td>{{gps.bd_lat}}</td><td>{{gps.timeStr}}</td><td>{{gps.speed}}</td></tr>' +
33 ' {{/each}}' + 33 ' {{/each}}' +
34 ' </table>' + 34 ' </table>' +
35 ' </body>' + 35 ' </body>' +
src/main/resources/static/real_control_v2/mapmonitor/js/spatial_data.js
@@ -328,6 +328,12 @@ var gb_map_spatial_data = (function () { @@ -328,6 +328,12 @@ var gb_map_spatial_data = (function () {
328 refresh: refresh, 328 refresh: refresh,
329 init: init, 329 init: init,
330 getCheckedStation:getCheckedStation, 330 getCheckedStation:getCheckedStation,
331 - gteCheckedCarpark: gteCheckedCarpark 331 + gteCheckedCarpark: gteCheckedCarpark,
  332 + getStationArray: function (lineCode) {
  333 + return lineStationArr[lineCode];
  334 + },
  335 + carparkArray: function () {
  336 + return carparkArr;
  337 + }
332 }; 338 };
333 })(); 339 })();
334 \ No newline at end of file 340 \ No newline at end of file