Commit 7eaee32900284a43672ffddf340088c1c6eddaa2
1 parent
01cc9e07
update
Showing
20 changed files
with
629 additions
and
419 deletions
src/main/java/com/bsth/data/BasicData.java
| ... | ... | @@ -308,9 +308,9 @@ public class BasicData implements CommandLineRunner { |
| 308 | 308 | if (StringUtils.isEmpty(jobCode)) |
| 309 | 309 | continue; |
| 310 | 310 | |
| 311 | - if (jobCode.indexOf("-") != -1) { | |
| 311 | + /*if (jobCode.indexOf("-") != -1) { | |
| 312 | 312 | jobCode = jobCode.split("-")[1]; |
| 313 | - } | |
| 313 | + }*/ | |
| 314 | 314 | if (p.getPosts() != null) { |
| 315 | 315 | if (p.getPosts().equals("1")) |
| 316 | 316 | jsyTempMap.put(jobCode, p); | ... | ... |
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| 1 | 1 | package com.bsth.service.realcontrol.impl; |
| 2 | 2 | |
| 3 | -import java.text.DecimalFormat; | |
| 4 | -import java.text.ParseException; | |
| 5 | -import java.text.SimpleDateFormat; | |
| 6 | -import java.util.ArrayList; | |
| 7 | -import java.util.Collection; | |
| 8 | -import java.util.Collections; | |
| 9 | -import java.util.Date; | |
| 10 | -import java.util.HashMap; | |
| 11 | -import java.util.HashSet; | |
| 12 | -import java.util.Iterator; | |
| 13 | -import java.util.List; | |
| 14 | -import java.util.Map; | |
| 15 | -import java.util.Set; | |
| 16 | - | |
| 17 | -import com.bsth.entity.realcontrol.LineConfig; | |
| 18 | -import org.apache.commons.lang3.StringUtils; | |
| 19 | -import org.joda.time.format.DateTimeFormat; | |
| 20 | -import org.joda.time.format.DateTimeFormatter; | |
| 21 | -import org.slf4j.Logger; | |
| 22 | -import org.slf4j.LoggerFactory; | |
| 23 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 24 | -import org.springframework.stereotype.Service; | |
| 25 | - | |
| 26 | 3 | import com.alibaba.fastjson.JSONArray; |
| 27 | 4 | import com.alibaba.fastjson.JSONObject; |
| 28 | 5 | import com.bsth.common.ResponseCode; |
| ... | ... | @@ -39,6 +16,7 @@ import com.bsth.entity.Cars; |
| 39 | 16 | import com.bsth.entity.Line; |
| 40 | 17 | import com.bsth.entity.Personnel; |
| 41 | 18 | import com.bsth.entity.realcontrol.ChildTaskPlan; |
| 19 | +import com.bsth.entity.realcontrol.LineConfig; | |
| 42 | 20 | import com.bsth.entity.realcontrol.ScheduleRealInfo; |
| 43 | 21 | import com.bsth.entity.schedule.CarConfigInfo; |
| 44 | 22 | import com.bsth.entity.schedule.EmployeeConfigInfo; |
| ... | ... | @@ -54,17 +32,25 @@ import com.bsth.security.util.SecurityUtils; |
| 54 | 32 | import com.bsth.service.SectionRouteService; |
| 55 | 33 | import com.bsth.service.impl.BaseServiceImpl; |
| 56 | 34 | import com.bsth.service.realcontrol.ScheduleRealInfoService; |
| 57 | -import com.bsth.util.DateUtils; | |
| 58 | -import com.bsth.util.ReportRelatedUtils; | |
| 59 | -import com.bsth.util.ReportUtils; | |
| 60 | -import com.bsth.util.TimeUtils; | |
| 61 | -import com.bsth.util.TransGPS; | |
| 35 | +import com.bsth.util.*; | |
| 62 | 36 | import com.bsth.util.TransGPS.Location; |
| 63 | 37 | import com.bsth.websocket.handler.SendUtils; |
| 64 | 38 | import com.google.common.base.Splitter; |
| 65 | 39 | import com.google.common.collect.ArrayListMultimap; |
| 66 | 40 | import com.google.common.collect.Lists; |
| 67 | 41 | import com.google.common.collect.Multimap; |
| 42 | +import org.apache.commons.lang3.StringUtils; | |
| 43 | +import org.joda.time.format.DateTimeFormat; | |
| 44 | +import org.joda.time.format.DateTimeFormatter; | |
| 45 | +import org.slf4j.Logger; | |
| 46 | +import org.slf4j.LoggerFactory; | |
| 47 | +import org.springframework.beans.factory.annotation.Autowired; | |
| 48 | +import org.springframework.stereotype.Service; | |
| 49 | + | |
| 50 | +import java.text.DecimalFormat; | |
| 51 | +import java.text.ParseException; | |
| 52 | +import java.text.SimpleDateFormat; | |
| 53 | +import java.util.*; | |
| 68 | 54 | |
| 69 | 55 | @Service |
| 70 | 56 | public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInfo, Long> |
| ... | ... | @@ -289,6 +275,10 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 289 | 275 | rs.put("msg", "驾驶员工号不能为空!"); |
| 290 | 276 | return rs; |
| 291 | 277 | } |
| 278 | + //截取工号 | |
| 279 | + if(t.getsGh().indexOf("-") != -1){ | |
| 280 | + t.setsGh(t.getsGh().split("-")[1]); | |
| 281 | + } | |
| 292 | 282 | |
| 293 | 283 | t.setScheduleDateStr(schDate); |
| 294 | 284 | t.setScheduleDate(sdfyyyyMMdd.parse(schDate)); |
| ... | ... | @@ -454,12 +444,16 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf |
| 454 | 444 | |
| 455 | 445 | @Override |
| 456 | 446 | public void adjustDriver(ScheduleRealInfo schedule, String driver, String driverName) { |
| 447 | + if(driver.indexOf("-") != -1) | |
| 448 | + driver = driver.split("-")[1]; | |
| 457 | 449 | schedule.setjGh(driver); |
| 458 | 450 | schedule.setjName(driverName); |
| 459 | 451 | } |
| 460 | 452 | |
| 461 | 453 | @Override |
| 462 | 454 | public void adjustConductor(ScheduleRealInfo schedule, String conductor, String conductorName) { |
| 455 | + if(conductor.indexOf("-") != -1) | |
| 456 | + conductor = conductor.split("-")[1]; | |
| 463 | 457 | schedule.setsGh(conductor); |
| 464 | 458 | schedule.setsName(conductorName); |
| 465 | 459 | } | ... | ... |
src/main/resources/static/real_control_v2/css/line_schedule.css
| ... | ... | @@ -101,11 +101,11 @@ |
| 101 | 101 | } |
| 102 | 102 | |
| 103 | 103 | .line-schedule-table dl dt:nth-of-type(5), .line-schedule-table dl dd:nth-of-type(5) { |
| 104 | - width: 11%; | |
| 104 | + width: 10%; | |
| 105 | 105 | } |
| 106 | 106 | |
| 107 | 107 | .line-schedule-table dl dt:nth-of-type(6), .line-schedule-table dl dd:nth-of-type(6) { |
| 108 | - width: calc(15% + 8px); | |
| 108 | + width: calc(13% + 18px); | |
| 109 | 109 | /*color: #676767;*/ |
| 110 | 110 | } |
| 111 | 111 | |
| ... | ... | @@ -114,7 +114,7 @@ |
| 114 | 114 | } |
| 115 | 115 | |
| 116 | 116 | .line-schedule-table dl dt:nth-of-type(8), .line-schedule-table dl dd:nth-of-type(8) { |
| 117 | - width: calc(48% - 228px); | |
| 117 | + width: calc(51% - 238px); | |
| 118 | 118 | } |
| 119 | 119 | |
| 120 | 120 | .line-schedule-table dl dt:nth-of-type(9), .line-schedule-table dl dd:nth-of-type(9) { |
| ... | ... | @@ -253,7 +253,7 @@ span.fcsj-diff { |
| 253 | 253 | } |
| 254 | 254 | |
| 255 | 255 | .tl-wd{ |
| 256 | - background: #e2e2a0; | |
| 256 | + background: #caca4f; | |
| 257 | 257 | } |
| 258 | 258 | |
| 259 | 259 | .tl-xxsd{ | ... | ... |
src/main/resources/static/real_control_v2/css/north.css
| 1 | 1 | .north { |
| 2 | - background: linear-gradient(to right ,#595959, #7b7b7b,#595959); | |
| 3 | 2 | height: 120px; |
| 4 | 3 | position: relative; |
| 5 | 4 | transition: all .3s ease; |
| ... | ... | @@ -9,6 +8,10 @@ |
| 9 | 8 | background: linear-gradient(to right, #082F4A, #125688, #0a3f64); |
| 10 | 9 | } |
| 11 | 10 | |
| 11 | +.north.monitor{ | |
| 12 | + background: linear-gradient(to right ,#595959, #7b7b7b,#595959); | |
| 13 | +} | |
| 14 | + | |
| 12 | 15 | .north.scok-colse { |
| 13 | 16 | background: linear-gradient(to right, #924040, #ce6262, #924040) !important; |
| 14 | 17 | } | ... | ... |
src/main/resources/static/real_control_v2/js/common.js
| ... | ... | @@ -150,6 +150,7 @@ var gb_common = (function() { |
| 150 | 150 | 'type': 'device', |
| 151 | 151 | 'device': this.deviceId |
| 152 | 152 | }, |
| 153 | + 'data': {lineId: this.lineId, upDown: this.upDown}, | |
| 153 | 154 | 'icon': 'uk-icon-bus' |
| 154 | 155 | }); |
| 155 | 156 | }); |
| ... | ... | @@ -157,7 +158,7 @@ var gb_common = (function() { |
| 157 | 158 | } |
| 158 | 159 | |
| 159 | 160 | return treeData; |
| 160 | - } | |
| 161 | + }; | |
| 161 | 162 | |
| 162 | 163 | var lineAutocomplete = function(element) { |
| 163 | 164 | //construction data | ... | ... |
src/main/resources/static/real_control_v2/js/data/data_basic.js
| ... | ... | @@ -51,6 +51,8 @@ var gb_data_basic = (function () { |
| 51 | 51 | var data=[],name; |
| 52 | 52 | for(var jobCode in rs){ |
| 53 | 53 | name=rs[jobCode]; |
| 54 | + /*if(jobCode.indexOf("-")!=-1) | |
| 55 | + jobCode=jobCode.split('-')[1];*/ | |
| 54 | 56 | data.push({ |
| 55 | 57 | value: jobCode+'/'+name, |
| 56 | 58 | fullChars: pinyin.getFullChars(name).toUpperCase(), | ... | ... |
src/main/resources/static/real_control_v2/js/data/data_gps.js
src/main/resources/static/real_control_v2/js/line_schedule/sch_table.js
| ... | ... | @@ -77,7 +77,7 @@ var gb_schedule_table = (function() { |
| 77 | 77 | content: { |
| 78 | 78 | text: function(e) { |
| 79 | 79 | var lineCode=$(e.target).parents('li.line_schedule').data('id') |
| 80 | - ,id=$(e.target).parent().data('id') | |
| 80 | + ,id=$(e.target).parents('dl').data('id') | |
| 81 | 81 | ,sch=line2Schedule[lineCode][id]; |
| 82 | 82 | return temps['sfsj_sch-detail-temp'](sch); |
| 83 | 83 | } | ... | ... |
src/main/resources/static/real_control_v2/js/utils/svg_chart.js
| ... | ... | @@ -223,13 +223,11 @@ var gb_svg_chart = (function() { |
| 223 | 223 | var svgs = $('.line-chart[data-code=' + lineCode + ']'), |
| 224 | 224 | data = gb_data_gps.gpsByLineCode(lineCode); |
| 225 | 225 | |
| 226 | - var list=[]; | |
| 227 | - //过滤数据,起终点站附加 方向标识 | |
| 226 | + var list=[]; | |
| 227 | + //过滤无站点字段的数据 | |
| 228 | 228 | $.each(data, function(){ |
| 229 | 229 | if(!this.stopNo || this.stopNo=='') |
| 230 | 230 | return true; |
| 231 | - if(this.sEPoint) | |
| 232 | - this.stopNo=this.stopNo+'_'+this.upDown; | |
| 233 | 231 | list.push(this); |
| 234 | 232 | }); |
| 235 | 233 | |
| ... | ... | @@ -241,9 +239,7 @@ var gb_svg_chart = (function() { |
| 241 | 239 | marker_clusterer(this, lineCode); |
| 242 | 240 | }); |
| 243 | 241 | |
| 244 | - | |
| 245 | - //marker_clusterer(lineCode); | |
| 246 | - } | |
| 242 | + }; | |
| 247 | 243 | |
| 248 | 244 | var draw_gps = function(svg, data) { |
| 249 | 245 | //remove merge_hide class | ... | ... |
src/main/resources/static/real_control_v2/js/utils/svg_chart_tooltip.js
| 1 | 1 | /* 线路模拟图 tooltip */ |
| 2 | 2 | |
| 3 | -var gb_svg_tooltip = (function() { | |
| 3 | +var gb_svg_tooltip = (function () { | |
| 4 | 4 | |
| 5 | 5 | var temps; |
| 6 | - $.get('/real_control_v2/fragments/home/tooltip.html', function(dom) { | |
| 6 | + $.get('/real_control_v2/fragments/home/tooltip.html', function (dom) { | |
| 7 | 7 | temps = gb_common.compileTempByDom(dom); |
| 8 | 8 | }); |
| 9 | 9 | |
| 10 | 10 | // normal gps tooltip |
| 11 | - $(document).on('mouseenter', 'svg .gps-wrap rect', function() { | |
| 11 | + $(document).on('mouseenter', 'svg .gps-wrap rect', function () { | |
| 12 | 12 | var rect = $(this); |
| 13 | - if(rect.attr('aria-describedby')) | |
| 14 | - return; | |
| 13 | + if (rect.attr('aria-describedby')) | |
| 14 | + return; | |
| 15 | 15 | var gps = gb_data_gps.findOne($(this).attr('_id').split('_')[1]); |
| 16 | 16 | $(this).qtip({ |
| 17 | 17 | show: { |
| ... | ... | @@ -19,7 +19,7 @@ var gb_svg_tooltip = (function() { |
| 19 | 19 | delay: 300 |
| 20 | 20 | }, |
| 21 | 21 | content: { |
| 22 | - text: function() { | |
| 22 | + text: function () { | |
| 23 | 23 | return temps['tooltip_gps_temp'](gps); |
| 24 | 24 | } |
| 25 | 25 | }, |
| ... | ... | @@ -35,13 +35,13 @@ var gb_svg_tooltip = (function() { |
| 35 | 35 | delay: 300 |
| 36 | 36 | }, |
| 37 | 37 | events: { |
| 38 | - hidden: function(event, api) { | |
| 38 | + hidden: function (event, api) { | |
| 39 | 39 | rect.dblclick(null); |
| 40 | 40 | rect.removeAttr('fiexd-tip'); |
| 41 | 41 | //destroy dom |
| 42 | 42 | $(this).qtip('destroy', true); |
| 43 | 43 | }, |
| 44 | - visible: function() { | |
| 44 | + visible: function () { | |
| 45 | 45 | show_baidu_map($('.tip_map_wrap', this)[0], gps); |
| 46 | 46 | rect.dblclick(fiexdTip); |
| 47 | 47 | } |
| ... | ... | @@ -50,24 +50,24 @@ var gb_svg_tooltip = (function() { |
| 50 | 50 | }); |
| 51 | 51 | |
| 52 | 52 | //multiple gps tooltip |
| 53 | - $(document).on('mouseenter', 'svg .merge-item rect', function() { | |
| 53 | + $(document).on('mouseenter', 'svg .merge-item rect', function () { | |
| 54 | 54 | var rect = $(this); |
| 55 | - if(rect.attr('aria-describedby')) | |
| 56 | - return; | |
| 57 | - // var gps = gb_data_gps.findOne($(this).attr('_id').split('_')[1]); | |
| 55 | + if (rect.attr('aria-describedby')) | |
| 56 | + return; | |
| 57 | + // var gps = gb_data_gps.findOne($(this).attr('_id').split('_')[1]); | |
| 58 | 58 | //获取聚合的gps |
| 59 | - var lineCode=$(this).parents('svg').data('code') | |
| 60 | - ,stop=$(this).parent().attr('_id').substr(7)//merger_ | |
| 61 | - ,gpsArray=searchByStop(gb_data_gps.gpsByLineCode(lineCode), stop); | |
| 59 | + var lineCode = $(this).parents('svg').data('code') | |
| 60 | + , stop = $(this).parent().attr('_id').substr(7)//merger_ | |
| 61 | + , gpsArray = searchByStop(gb_data_gps.gpsByLineCode(lineCode), stop); | |
| 62 | 62 | |
| 63 | - console.log('stop...',stop); | |
| 63 | + // console.log('stop...',stop); | |
| 64 | 64 | $(this).qtip({ |
| 65 | 65 | show: { |
| 66 | 66 | ready: true, |
| 67 | 67 | delay: 300 |
| 68 | 68 | }, |
| 69 | 69 | content: { |
| 70 | - text: function() { | |
| 70 | + text: function () { | |
| 71 | 71 | return temps['tooltip_multi_gps_temp']({list: gpsArray}); |
| 72 | 72 | } |
| 73 | 73 | }, |
| ... | ... | @@ -83,12 +83,12 @@ var gb_svg_tooltip = (function() { |
| 83 | 83 | delay: 300 |
| 84 | 84 | }, |
| 85 | 85 | events: { |
| 86 | - hidden: function(event, api) { | |
| 86 | + hidden: function (event, api) { | |
| 87 | 87 | //rect.dblclick(null); |
| 88 | 88 | //destroy dom |
| 89 | 89 | $(this).qtip('destroy', true); |
| 90 | 90 | }, |
| 91 | - visible: function() { | |
| 91 | + visible: function () { | |
| 92 | 92 | show_baidu_map($('.tip_map_wrap', this)[0], gpsArray); |
| 93 | 93 | //rect.dblclick(fiexdTip); |
| 94 | 94 | } |
| ... | ... | @@ -97,7 +97,7 @@ var gb_svg_tooltip = (function() { |
| 97 | 97 | }); |
| 98 | 98 | |
| 99 | 99 | //dblclick |
| 100 | - var fiexdTip = function() { | |
| 100 | + var fiexdTip = function () { | |
| 101 | 101 | var tipId = $(this).attr('aria-describedby'); |
| 102 | 102 | if (tipId) { |
| 103 | 103 | var api = $('#' + tipId).qtip('api'); |
| ... | ... | @@ -114,59 +114,59 @@ var gb_svg_tooltip = (function() { |
| 114 | 114 | |
| 115 | 115 | var carIcon = '/assets/img/bus1.png'; |
| 116 | 116 | //,normalIcon = '/assets/img/Marker_32px_583000_easyicon.net.png'; |
| 117 | - var show_baidu_map = function(elem, list) { | |
| 118 | - if(!window.BMap) | |
| 117 | + var show_baidu_map = function (elem, list) { | |
| 118 | + if (!window.BMap) | |
| 119 | 119 | return; |
| 120 | 120 | |
| 121 | - if(!isArray(list)) | |
| 122 | - list=[list]; | |
| 121 | + if (!isArray(list)) | |
| 122 | + list = [list]; | |
| 123 | 123 | //init map |
| 124 | 124 | var map = new BMap.Map(elem); |
| 125 | 125 | map.setMapStyle({ |
| 126 | - style: 'googlelite' | |
| 126 | + style: 'googlelite' | |
| 127 | 127 | }); |
| 128 | 128 | map.enableScrollWheelZoom(true); |
| 129 | 129 | //gps marker |
| 130 | - var coord,point; | |
| 131 | - $.each(list, function(i){ | |
| 132 | - coord = TransGPS.wgsToBD(this.lat, this.lon); | |
| 133 | - point = new BMap.Point(coord.lng, coord.lat); | |
| 134 | - | |
| 135 | - var marker = new BMap.Marker(point), | |
| 136 | - icon = new BMap.Icon(carIcon, new BMap.Size(25, 25)); | |
| 137 | - marker.setIcon(icon); | |
| 138 | - marker.setRotation(this.direction); | |
| 139 | - marker.setTop(true); | |
| 140 | - map.addOverlay(marker); | |
| 141 | - | |
| 142 | - if(i>=list.length-1) | |
| 143 | - map.centerAndZoom(point, 15); | |
| 130 | + var coord, point; | |
| 131 | + $.each(list, function (i) { | |
| 132 | + coord = TransGPS.wgsToBD(this.lat, this.lon); | |
| 133 | + point = new BMap.Point(coord.lng, coord.lat); | |
| 134 | + | |
| 135 | + var marker = new BMap.Marker(point), | |
| 136 | + icon = new BMap.Icon(carIcon, new BMap.Size(25, 25)); | |
| 137 | + marker.setIcon(icon); | |
| 138 | + marker.setRotation(this.direction); | |
| 139 | + marker.setTop(true); | |
| 140 | + map.addOverlay(marker); | |
| 141 | + | |
| 142 | + if (i >= list.length - 1) | |
| 143 | + map.centerAndZoom(point, 15); | |
| 144 | 144 | }); |
| 145 | 145 | //draw line routes |
| 146 | 146 | gb_svg_map_util.drawLine(map, list[0]); |
| 147 | 147 | } |
| 148 | 148 | |
| 149 | - function searchByStop(list, stop){ | |
| 150 | - var rs = []; | |
| 151 | - $.each(list, function(){ | |
| 152 | - if(this.stopNo==stop) | |
| 153 | - rs.push(this); | |
| 154 | - }); | |
| 155 | - return rs; | |
| 149 | + function searchByStop(list, stop) { | |
| 150 | + var rs = []; | |
| 151 | + $.each(list, function () { | |
| 152 | + if (this.stopNo == stop) | |
| 153 | + rs.push(this); | |
| 154 | + }); | |
| 155 | + return rs; | |
| 156 | 156 | } |
| 157 | 157 | |
| 158 | - function updateFixedTip(es){ | |
| 159 | - $.each(es, function(){ | |
| 160 | - if(!$(this).attr('fiexd-tip')) | |
| 161 | - return true; | |
| 158 | + function updateFixedTip(es) { | |
| 159 | + $.each(es, function () { | |
| 160 | + if (!$(this).attr('fiexd-tip')) | |
| 161 | + return true; | |
| 162 | 162 | |
| 163 | - var qtip=$('#'+$(this).attr('aria-describedby')); | |
| 163 | + var qtip = $('#' + $(this).attr('aria-describedby')); | |
| 164 | 164 | |
| 165 | 165 | |
| 166 | - }); | |
| 166 | + }); | |
| 167 | 167 | } |
| 168 | 168 | |
| 169 | 169 | return { |
| 170 | - update: updateFixedTip | |
| 170 | + update: updateFixedTip | |
| 171 | 171 | }; |
| 172 | 172 | })(); | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/css/real.css
| ... | ... | @@ -9,7 +9,7 @@ |
| 9 | 9 | background: red; |
| 10 | 10 | color: white; |
| 11 | 11 | padding: 7px; |
| 12 | - left: calc(50% - 150px); | |
| 12 | + left: calc(50% - 250px); | |
| 13 | 13 | border-radius: 5px; |
| 14 | 14 | font-size: 20px; |
| 15 | 15 | cursor: pointer; |
| ... | ... | @@ -42,7 +42,7 @@ |
| 42 | 42 | /**/ |
| 43 | 43 | .real_bottom_panel{ |
| 44 | 44 | position: absolute !important; |
| 45 | - height: 180px; | |
| 45 | + height: 18px; | |
| 46 | 46 | width: 100%; |
| 47 | 47 | width: calc(100% - 342px); |
| 48 | 48 | bottom: 2px !important; | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/fragments/map_config.html
0 → 100644
| 1 | +<div> | |
| 2 | + <script id="map-config-form-temp" type="text/html"> | |
| 3 | + <form class="uk-form uk-form-stacked"> | |
| 4 | + <div class="uk-form-row"> | |
| 5 | + <span class="uk-form-label">图层</span> | |
| 6 | + <div class="uk-form-controls"> | |
| 7 | + <label><input type="radio" name="map_type" {{if map_type=='baidu'}}checked{{/if}}> 百度</label> | |
| 8 | + <label><input type="radio" name="map_type" {{if map_type=='gaode'}}checked{{/if}}> 高德</label> | |
| 9 | + <label><input type="checkbox" name="map_type" {{if traffic}}checked{{/if}}> 实时路况</label> | |
| 10 | + </div> | |
| 11 | + </div> | |
| 12 | + | |
| 13 | + <div class="uk-form-row"> | |
| 14 | + <span class="uk-form-label">空间数据</span> | |
| 15 | + <div class="uk-form-controls"> | |
| 16 | + <label><input type="checkbox" {{if spatialData.station}}checked{{/if}}> 站点</label> | |
| 17 | + <label><input type="checkbox" {{if spatialData.electronicFence}}checked{{/if}}> 电子围栏</label> | |
| 18 | + <label><input type="checkbox" {{if spatialData.carPark}}checked{{/if}}> 停车场</label> | |
| 19 | + </div> | |
| 20 | + </div> | |
| 21 | + | |
| 22 | + <div class="uk-form-row"> | |
| 23 | + <span class="uk-form-label">异常警报输出</span> | |
| 24 | + <div class="uk-form-controls"> | |
| 25 | + <label><input type="checkbox" {{if abnormalPrint.speeding}}checked{{/if}}> 超速</label> | |
| 26 | + <label><input type="checkbox" {{if abnormalPrint.outBounds}}checked{{/if}}> 越界</label> | |
| 27 | + <label><input type="checkbox" {{if abnormalPrint.largeMargin}}checked{{/if}}> 大间隔</label> | |
| 28 | + </div> | |
| 29 | + </div> | |
| 30 | + | |
| 31 | + <div class="uk-form-row"> | |
| 32 | + <span class="uk-form-label">车辆图标</span> | |
| 33 | + <div class="uk-form-controls"> | |
| 34 | + <label><input type="checkbox" {{if carIcon.angle}}checked{{/if}}> 标示角度</label> | |
| 35 | + <label><input type="checkbox" {{if carIcon.converge}}checked{{/if}}> 聚合</label> | |
| 36 | + </div> | |
| 37 | + </div> | |
| 38 | + | |
| 39 | + <div class="uk-form-row"> | |
| 40 | + <span class="uk-form-label">车辆颜色</span> | |
| 41 | + <div class="uk-form-controls"> | |
| 42 | + <div class="color_block"> | |
| 43 | + 上行 | |
| 44 | + <div class="sp-placeholder"> | |
| 45 | + <div class="sp-placeholder-color" style="background: {{carIcon.color.up}}"></div> | |
| 46 | + </div> | |
| 47 | + </div> | |
| 48 | + | |
| 49 | + <div class="color_block"> | |
| 50 | + 下行 | |
| 51 | + <div class="sp-placeholder"> | |
| 52 | + <div class="sp-placeholder-color" style="background: {{carIcon.color.down}}"></div> | |
| 53 | + </div> | |
| 54 | + </div> | |
| 55 | + | |
| 56 | + <div class="color_block"> | |
| 57 | + 非营运 | |
| 58 | + <div class="sp-placeholder"> | |
| 59 | + <div class="sp-placeholder-color" style="background: {{carIcon.color.nonOperation}}"></div> | |
| 60 | + </div> | |
| 61 | + </div> | |
| 62 | + </div> | |
| 63 | + </div> | |
| 64 | + | |
| 65 | + <div class="uk-form-row"> | |
| 66 | + <span class="uk-form-label">路段颜色</span> | |
| 67 | + <div class="uk-form-controls"> | |
| 68 | + <div class="color_block"> | |
| 69 | + 上行 | |
| 70 | + <div class="sp-placeholder"> | |
| 71 | + <div class="sp-placeholder-color" style="background: {{section.color.up}}"></div> | |
| 72 | + </div> | |
| 73 | + </div> | |
| 74 | + | |
| 75 | + <div class="color_block"> | |
| 76 | + 下行 | |
| 77 | + <div class="sp-placeholder"> | |
| 78 | + <div class="sp-placeholder-color" style="background: {{section.color.down}}"></div> | |
| 79 | + </div> | |
| 80 | + </div> | |
| 81 | + </div> | |
| 82 | + </div> | |
| 83 | + | |
| 84 | + <br> | |
| 85 | + </form> | |
| 86 | + </script> | |
| 87 | +</div> | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/fragments/map_infowindow.html
0 → 100644
| 1 | +<div> | |
| 2 | + <script id="map-win-gps-detail-temp" type="text/html"> | |
| 3 | + <div class="gps_info_win"> | |
| 4 | + <h5 style="color:#0E6AF9;"> | |
| 5 | + {{if stationName!=null}} | |
| 6 | + {{stationName}} | |
| 7 | + {{else}} | |
| 8 | + 未知站点 | |
| 9 | + {{/if}} | |
| 10 | + </h5> | |
| 11 | + <h4 style="margin: 5px 0 5px 0;"> | |
| 12 | + <span style="color: #0E6AF9;">{{nbbm}}</span> | |
| 13 | + </h4> | |
| 14 | + <p> | |
| 15 | + 营运状态:{{if state==0}}营运{{else}}非营运{{/if}} | |
| 16 | + </p> | |
| 17 | + <p> | |
| 18 | + 走向:{{if upDown==0}}上行{{else if upDown==1}}下行{{else}}未知走向{{/if}} | |
| 19 | + </p> | |
| 20 | + <p>速度:{{speed}}</p> | |
| 21 | + <p>经度:{{lon}}</p> | |
| 22 | + <p>纬度:{{lat}}</p> | |
| 23 | + | |
| 24 | + <!--<p style="color: gray;">{{fromNow}} 更新</p>--> | |
| 25 | + <hr> | |
| 26 | + <p> | |
| 27 | + {{if currSch!=null}} | |
| 28 | + 路牌:{{currSch.lpName}} | |
| 29 | + {{/if}} | |
| 30 | + </p> | |
| 31 | + <p class="banci-info"> | |
| 32 | + {{if currSch!=null}}开往 {{currSch.zdzName}}{{/if}} | |
| 33 | + </p> | |
| 34 | + <p class="banci-info"> | |
| 35 | + {{if nextSch!=null}} | |
| 36 | + 下一班{{nextSch.qdzName}} {{nextSch.fcsj}} 发车 | |
| 37 | + {{/if}} | |
| 38 | + </p> | |
| 39 | + <a href="javascript:lineGroup.toPlayBack('{{nbbm}}', '{{lineId}}')" class="link_to_pback" | |
| 40 | + style="color:#006600;font-size:12px;">轨迹回放</a> | |
| 41 | + </div> | |
| 42 | + </script> | |
| 43 | +</div> | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/config.js
| ... | ... | @@ -22,9 +22,9 @@ var gb_map_config=(function () { |
| 22 | 22 | angle: false, |
| 23 | 23 | converge: false, |
| 24 | 24 | color: { |
| 25 | - up: 'blue', | |
| 26 | - down: 'red', | |
| 27 | - nonOperation: 'grey' | |
| 25 | + up: 'rgba(94, 150, 210, 1)', | |
| 26 | + down: 'rgba(201, 33, 33, 1)', | |
| 27 | + nonOperation: 'rgba(136, 133, 133, 1)' | |
| 28 | 28 | } |
| 29 | 29 | }, |
| 30 | 30 | section:{ |
| ... | ... | @@ -34,4 +34,42 @@ var gb_map_config=(function () { |
| 34 | 34 | } |
| 35 | 35 | } |
| 36 | 36 | }; |
| 37 | + | |
| 38 | + var temps; | |
| 39 | + | |
| 40 | + var init = function () { | |
| 41 | + $.get('/real_control_v2/mapmonitor/fragments/map_config.html', function (dom) { | |
| 42 | + temps = gb_common.compileTempByDom(dom, {compress: true}); | |
| 43 | + | |
| 44 | + //渲染表单 | |
| 45 | + var formHtml=temps['map-config-form-temp'](defaultConfig); | |
| 46 | + $('.map_config_wrap').html(formHtml); | |
| 47 | + | |
| 48 | + //颜色选择器 | |
| 49 | + $('.map_config_wrap .color_block').each(function () { | |
| 50 | + var c=$('.sp-placeholder-color',this).css('background-color'); | |
| 51 | + var that=this; | |
| 52 | + $(this).spectrum({ | |
| 53 | + color: c, | |
| 54 | + showInput: true, | |
| 55 | + chooseText: "确定", | |
| 56 | + cancelText: "取消", | |
| 57 | + preferredFormat: "rgb", | |
| 58 | + showAlpha: true, | |
| 59 | + change: function (color) { | |
| 60 | + $('.sp-placeholder-color',that).css('background-color', color); | |
| 61 | + } | |
| 62 | + }); | |
| 63 | + }); | |
| 64 | + | |
| 65 | + | |
| 66 | + }); | |
| 67 | + } | |
| 68 | + | |
| 69 | + return { | |
| 70 | + getConfig: function () { | |
| 71 | + return defaultConfig; | |
| 72 | + }, | |
| 73 | + init: init | |
| 74 | + } | |
| 37 | 75 | })(); |
| 38 | 76 | \ No newline at end of file | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/gps_tree.js
0 → 100644
| 1 | +var gb_map_gps_tree = (function () { | |
| 2 | + | |
| 3 | + | |
| 4 | + var treeObj; | |
| 5 | + | |
| 6 | + var jstreeChanged = function (e, node, event) { | |
| 7 | + gb_map_overlay_mge.refresh(); | |
| 8 | + }; | |
| 9 | + | |
| 10 | + var init = function (cb) { | |
| 11 | + //设备树 | |
| 12 | + var treeData = gb_common.get_device_tree_data(); | |
| 13 | + treeObj = $('.real_right_gps_panel .gps_tree_list') | |
| 14 | + //节点初始化完成 | |
| 15 | + .on('ready.jstree', function () { | |
| 16 | + treeObj.jstree(true).open_all(); | |
| 17 | + //删掉tree node a标签的 href值(避免鼠标悬停浏览器出现状态条) | |
| 18 | + $('.gps_tree_list .jstree-container-ul a.jstree-anchor').removeAttr('href'); | |
| 19 | + }) | |
| 20 | + //state插件 状态恢复完成 | |
| 21 | + .on('state_ready.jstree', function () { | |
| 22 | + //绑定checkbox状态切换事件 | |
| 23 | + treeObj.on('check_node.jstree uncheck_node.jstree', jstreeChanged); | |
| 24 | + cb && cb(); | |
| 25 | + }) | |
| 26 | + .on('activate_node.jstree', function (e, n) { | |
| 27 | + var node = n.node; | |
| 28 | + if(node.a_attr && node.a_attr.type=='device'){ | |
| 29 | + var device = node.a_attr.device; | |
| 30 | + gb_map_overlay_mge._focus(device); | |
| 31 | + } | |
| 32 | + }) | |
| 33 | + .jstree({ | |
| 34 | + 'core': { | |
| 35 | + 'data': treeData | |
| 36 | + }, | |
| 37 | + 'checkbox': { | |
| 38 | + 'keep_selected_style': false, | |
| 39 | + 'whole_node': false, | |
| 40 | + 'tie_selection': false | |
| 41 | + }, | |
| 42 | + 'contextmenu': { | |
| 43 | + 'items': { | |
| 44 | + '轨迹回放': { | |
| 45 | + 'label': '轨迹回放', | |
| 46 | + 'action': function (data) { | |
| 47 | + console.log('action', data); | |
| 48 | + } | |
| 49 | + }, | |
| 50 | + '发送指令': { | |
| 51 | + 'label': '发送指令', | |
| 52 | + 'action': function (data) { | |
| 53 | + console.log('action', data); | |
| 54 | + } | |
| 55 | + } | |
| 56 | + } | |
| 57 | + }, | |
| 58 | + 'plugins': ['checkbox', 'contextmenu', 'state'] | |
| 59 | + }); | |
| 60 | + }; | |
| 61 | + | |
| 62 | + return { | |
| 63 | + init: init, | |
| 64 | + getChecked: function () { | |
| 65 | + return treeObj.jstree(true).get_checked(true); | |
| 66 | + } | |
| 67 | + }; | |
| 68 | +})(); | |
| 0 | 69 | \ No newline at end of file | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/map/iMap.js
| 1 | -/** 各地图平台通用接口定义 */ | |
| 2 | -var gb_map_imap = (function(){ | |
| 3 | - | |
| 4 | - var storage = window.localStorage; | |
| 5 | - // 地图DOM容器 | |
| 6 | - var mapContainer = $('#mapContainer'); | |
| 7 | - var maps = {}; | |
| 8 | - //尝试从 localStorage 里获取默认的地图类型 | |
| 9 | - var currentMap = storage.getItem('real_map'); | |
| 10 | - var mapProxy = { | |
| 11 | - //添加一个地图实例 | |
| 12 | - addMap: function(name, text, instance){ | |
| 13 | - maps[name] = {name: name, text: text, instance: instance}; | |
| 14 | - | |
| 15 | - if(!currentMap) | |
| 16 | - currentMap = name; | |
| 17 | - return mapProxy; | |
| 18 | - }, | |
| 19 | - changeDefault: function(mapName){ | |
| 20 | - if(mapName == currentMap) | |
| 21 | - return; | |
| 22 | - if(maps[mapName]){ | |
| 23 | - //原地图 destroy | |
| 24 | - var oldMap = maps[currentMap].instance; | |
| 25 | - oldMap.destroy && oldMap.destroy(); | |
| 26 | - $(gb_map_consts.mapContainer).html(''); | |
| 27 | - //解除实时路况按钮点击事件 | |
| 28 | - $(gb_map_consts.trafficBtn).unbind('click'); | |
| 29 | - | |
| 30 | - //新地图 INIT | |
| 31 | - var text = maps[mapName].text; | |
| 32 | - //layer.msg('正在切换到' + text + '...', {icon : 16,shade : [ 0.6, '#393D49' ],time : 0}); | |
| 33 | - var newMap = maps[mapName].instance; | |
| 34 | - newMap.init(); | |
| 35 | - setText(text); | |
| 36 | - | |
| 37 | - currentMap = mapName; | |
| 38 | - //收拢线路 | |
| 39 | - $('.mapRightWrap .collapse.in').collapse('hide'); | |
| 40 | - }else | |
| 41 | - alertErr('不存在的地图实例' + mapName); | |
| 42 | - }, | |
| 43 | - createCarIcon: createCarIcon, | |
| 44 | - call: function(f, opts){ | |
| 45 | - if(f == 'init') | |
| 46 | - setText(maps[currentMap].text); | |
| 47 | - | |
| 48 | - var instance = maps[currentMap].instance; | |
| 49 | - if(instance[f]) | |
| 50 | - instance[f](opts); | |
| 51 | - else | |
| 52 | - alertErr('当前地图实例不支持操作:' + f); | |
| 53 | - return mapProxy; | |
| 54 | - } | |
| 55 | - } | |
| 56 | - | |
| 57 | - //绘制车辆icon | |
| 58 | - function createCarIcon(gps, w){ | |
| 59 | - var canvas = $('<canvas></canvas>')[0]; | |
| 60 | - var ctx = canvas.getContext('2d'); | |
| 61 | - | |
| 62 | - var colours = color(gps); | |
| 63 | - | |
| 64 | - ctx.shadowOffsetX = 5; // 阴影Y轴偏移 | |
| 65 | - ctx.shadowOffsetY = 5; // 阴影X轴偏移 | |
| 66 | - ctx.shadowBlur = 1; // 模糊尺寸 | |
| 67 | - ctx.shadowColor = colours.shadow; // 颜色 | |
| 68 | - | |
| 69 | - //绘制背景 | |
| 70 | - if(!w) | |
| 71 | - w = 70; | |
| 72 | - | |
| 73 | - ctx.roundRect(0, 0, w, 25, 5).stroke(); | |
| 74 | - ctx.fillStyle=colours.bgColor; | |
| 75 | - ctx.fill(); | |
| 76 | - //文字 | |
| 77 | - ctx.font="14px arial"; | |
| 78 | - ctx.fillStyle = "#fff"; | |
| 79 | - ctx.fillText(gps.nbbm, 8, 18); | |
| 80 | - | |
| 81 | - return canvas.toDataURL(); | |
| 82 | - } | |
| 83 | - | |
| 84 | - function color(g){ | |
| 85 | - var colours = {}; | |
| 86 | - switch (g.state) { | |
| 87 | - case 0: | |
| 88 | - if(g.upDown == 0){ | |
| 89 | - //营运上行 | |
| 90 | - colours['bgColor'] = 'rgba(94, 150, 210, 1)'; | |
| 91 | - colours['shadow'] = 'rgba(94, 150, 210, 0.3)'; | |
| 92 | - } | |
| 93 | - else if(g.upDown == 1){ | |
| 94 | - //营运下行 | |
| 95 | - colours['bgColor'] = 'rgba(201, 33, 33, 1)'; | |
| 96 | - colours['shadow'] = 'rgba(201, 33, 33, 0.3)'; | |
| 97 | - } | |
| 98 | - else{ | |
| 99 | - //未知走向 | |
| 100 | - colours['bgColor'] = 'rgba(0, 0, 0, 1)'; | |
| 101 | - colours['shadow'] = 'rgba(0, 0, 0, 0.3)'; | |
| 102 | - } | |
| 103 | - break; | |
| 104 | - | |
| 105 | - default: | |
| 106 | - //非营运 | |
| 107 | - colours['bgColor'] = 'rgba(136, 133, 133, 1)'; | |
| 108 | - colours['shadow'] = 'rgba(136, 133, 133, 0.3)'; | |
| 109 | - break; | |
| 110 | - } | |
| 111 | - | |
| 112 | - return colours; | |
| 113 | - } | |
| 114 | - | |
| 115 | - function alertErr(text){ | |
| 116 | - notify_err('map -'+text); | |
| 117 | - } | |
| 118 | - | |
| 119 | - function setText(text) { | |
| 120 | - $('#curr_map_name').text(text); | |
| 121 | - } | |
| 122 | - | |
| 123 | - //文件载入完毕 | |
| 124 | - mapmonitor_load_ep.emitLater('load_iMap'); | |
| 125 | - return mapProxy; | |
| 1 | +/** 地图 api 代理 */ | |
| 2 | +var gb_map_imap = (function () { | |
| 3 | + | |
| 4 | + var storage = window.localStorage; | |
| 5 | + // 地图DOM容器 | |
| 6 | + var mapContainer = $('#mapContainer'); | |
| 7 | + var maps = {}; | |
| 8 | + //尝试从 localStorage 里获取默认的地图类型 | |
| 9 | + var currentMap = storage.getItem('real_map'); | |
| 10 | + var mapProxy = { | |
| 11 | + //添加一个地图实例 | |
| 12 | + addMap: function (name, text, instance) { | |
| 13 | + maps[name] = {name: name, text: text, instance: instance}; | |
| 14 | + | |
| 15 | + if (!currentMap) | |
| 16 | + currentMap = name; | |
| 17 | + return mapProxy; | |
| 18 | + }, | |
| 19 | + changeDefault: function (mapName) { | |
| 20 | + if (mapName == currentMap) | |
| 21 | + return; | |
| 22 | + if (maps[mapName]) { | |
| 23 | + //原地图 destroy | |
| 24 | + var oldMap = maps[currentMap].instance; | |
| 25 | + oldMap.destroy && oldMap.destroy(); | |
| 26 | + $(gb_map_consts.mapContainer).html(''); | |
| 27 | + //解除实时路况按钮点击事件 | |
| 28 | + $(gb_map_consts.trafficBtn).unbind('click'); | |
| 29 | + | |
| 30 | + //新地图 INIT | |
| 31 | + var text = maps[mapName].text; | |
| 32 | + //layer.msg('正在切换到' + text + '...', {icon : 16,shade : [ 0.6, '#393D49' ],time : 0}); | |
| 33 | + var newMap = maps[mapName].instance; | |
| 34 | + newMap.init(); | |
| 35 | + setText(text); | |
| 36 | + | |
| 37 | + currentMap = mapName; | |
| 38 | + //收拢线路 | |
| 39 | + $('.mapRightWrap .collapse.in').collapse('hide'); | |
| 40 | + } else | |
| 41 | + alertErr('不存在的地图实例' + mapName); | |
| 42 | + }, | |
| 43 | + createCarIcon: createCarIcon, | |
| 44 | + call: function (f, opts) { | |
| 45 | + if (f == 'init') | |
| 46 | + setText(maps[currentMap].text); | |
| 47 | + | |
| 48 | + var instance = maps[currentMap].instance; | |
| 49 | + if (instance[f]) | |
| 50 | + instance[f](opts); | |
| 51 | + else | |
| 52 | + alertErr('当前地图实例不支持操作:' + f); | |
| 53 | + return mapProxy; | |
| 54 | + } | |
| 55 | + } | |
| 56 | + | |
| 57 | + //绘制车辆icon | |
| 58 | + function createCarIcon(gps, w) { | |
| 59 | + var canvas = $('<canvas></canvas>')[0]; | |
| 60 | + var ctx = canvas.getContext('2d'); | |
| 61 | + | |
| 62 | + var colours = color(gps); | |
| 63 | + | |
| 64 | + ctx.shadowOffsetX = 5; // 阴影Y轴偏移 | |
| 65 | + ctx.shadowOffsetY = 5; // 阴影X轴偏移 | |
| 66 | + ctx.shadowBlur = 1; // 模糊尺寸 | |
| 67 | + ctx.shadowColor = colours.shadow; // 颜色 | |
| 68 | + | |
| 69 | + //绘制背景 | |
| 70 | + if (!w) | |
| 71 | + w = 70; | |
| 72 | + | |
| 73 | + ctx.roundRect(0, 0, w, 25, 5).stroke(); | |
| 74 | + ctx.fillStyle = colours.bgColor; | |
| 75 | + ctx.fill(); | |
| 76 | + //文字 | |
| 77 | + ctx.font = "14px arial"; | |
| 78 | + ctx.fillStyle = "#fff"; | |
| 79 | + ctx.fillText(gps.nbbm, 8, 18); | |
| 80 | + | |
| 81 | + return canvas.toDataURL(); | |
| 82 | + } | |
| 83 | + | |
| 84 | + function color(g) { | |
| 85 | + var colours = {}; | |
| 86 | + switch (g.state) { | |
| 87 | + case 0: | |
| 88 | + if (g.upDown == 0) { | |
| 89 | + //营运上行 | |
| 90 | + colours['bgColor'] = 'rgba(94, 150, 210, 1)'; | |
| 91 | + colours['shadow'] = 'rgba(94, 150, 210, 0.3)'; | |
| 92 | + } | |
| 93 | + else if (g.upDown == 1) { | |
| 94 | + //营运下行 | |
| 95 | + colours['bgColor'] = 'rgba(201, 33, 33, 1)'; | |
| 96 | + colours['shadow'] = 'rgba(201, 33, 33, 0.3)'; | |
| 97 | + } | |
| 98 | + else { | |
| 99 | + //未知走向 | |
| 100 | + colours['bgColor'] = 'rgba(0, 0, 0, 1)'; | |
| 101 | + colours['shadow'] = 'rgba(0, 0, 0, 0.3)'; | |
| 102 | + } | |
| 103 | + break; | |
| 104 | + | |
| 105 | + default: | |
| 106 | + //非营运 | |
| 107 | + colours['bgColor'] = 'rgba(136, 133, 133, 1)'; | |
| 108 | + colours['shadow'] = 'rgba(136, 133, 133, 0.3)'; | |
| 109 | + break; | |
| 110 | + } | |
| 111 | + | |
| 112 | + return colours; | |
| 113 | + } | |
| 114 | + | |
| 115 | + function alertErr(text) { | |
| 116 | + notify_err('map -' + text); | |
| 117 | + } | |
| 118 | + | |
| 119 | + function setText(text) { | |
| 120 | + $('#curr_map_name').text(text); | |
| 121 | + } | |
| 122 | + | |
| 123 | + //文件载入完毕 | |
| 124 | + mapmonitor_load_ep.emitLater('load_iMap'); | |
| 125 | + return mapProxy; | |
| 126 | 126 | })(); | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/map/platform/baidu.js
| ... | ... | @@ -58,36 +58,43 @@ var gb_map_baidu = (function(){ |
| 58 | 58 | map.clearOverlays(); |
| 59 | 59 | }, |
| 60 | 60 | //画线路图层 |
| 61 | - drawLine: function(opts){ | |
| 62 | - if(polylines[opts.key]){ | |
| 63 | - //centerToPolyline(polylines[opts.key]); | |
| 61 | + drawLine: function(opt){ | |
| 62 | + if(polylines[opt.id]) | |
| 64 | 63 | return; |
| 65 | - } | |
| 66 | - var plconfg={strokeWeight:6, strokeOpacity:0.5}; | |
| 67 | - var pos = [], tempArray; | |
| 68 | - var route; | |
| 69 | - var polyline; | |
| 70 | - //上行 | |
| 71 | - if(opts.updown==0){ | |
| 72 | - route=opts.route.up; | |
| 73 | - plconfg.strokeColor="blue"; | |
| 74 | - } | |
| 75 | - else if(opts.updown==1){ | |
| 76 | - route=opts.route.down; | |
| 77 | - plconfg.strokeColor="red"; | |
| 78 | - } | |
| 64 | + | |
| 65 | + var pos = [], temps; | |
| 66 | + var route = opt.upDown==0?opt.route.up:opt.route.down; | |
| 67 | + | |
| 79 | 68 | $.each(route.split(','), function(){ |
| 80 | - tempArray = this.split(' '); | |
| 81 | - pos.push(new BMap.Point(tempArray[0], tempArray[1])); | |
| 69 | + temps = this.split(' '); | |
| 70 | + pos.push(new BMap.Point(temps[0], temps[1])); | |
| 82 | 71 | }); |
| 83 | 72 | |
| 84 | - polyline = new BMap.Polyline(pos, plconfg); | |
| 85 | - polylines[opts.key]=polyline; | |
| 73 | + var polyline = new BMap.Polyline(pos, opt.style); | |
| 74 | + //根据ID保存映射 | |
| 75 | + polylines[opt.id]=polyline; | |
| 76 | + if(opt.hide) | |
| 77 | + polyline.hide(); | |
| 86 | 78 | map.addOverlay(polyline); |
| 87 | - | |
| 88 | - console.log('centerToPolyline...'); | |
| 89 | - centerToPolyline(polyline); | |
| 79 | + //居中 | |
| 80 | + //centerToPolyline(polyline); | |
| 90 | 81 | }, |
| 82 | + //根据id 显示polyline | |
| 83 | + refreshPolyline: function (opt) { | |
| 84 | + var idx = opt.idx; | |
| 85 | + for(var id in polylines){ | |
| 86 | + if(idx.indexOf(id) != -1) | |
| 87 | + polylines[id].show(); | |
| 88 | + else | |
| 89 | + polylines[id].hide(); | |
| 90 | + } | |
| 91 | + }, | |
| 92 | + //定位到线路中间点 | |
| 93 | + centerToLine: function (opt) { | |
| 94 | + var pos=polylines[opt.id].getPath(); | |
| 95 | + console.log('定位到中心,,,', pos[parseInt(pos.length / 2)]); | |
| 96 | + map.setCenter(pos[parseInt(pos.length / 2)]); | |
| 97 | + }/*, | |
| 91 | 98 | removeLine: function(opts){ |
| 92 | 99 | var polyline=polylines[opts.key]; |
| 93 | 100 | if(polyline){ |
| ... | ... | @@ -95,36 +102,41 @@ var gb_map_baidu = (function(){ |
| 95 | 102 | polylines[opts.key]=null; |
| 96 | 103 | delete polylines[opts.key]; |
| 97 | 104 | } |
| 98 | - }, | |
| 105 | + }*/, | |
| 99 | 106 | //绘制GPS信号 |
| 100 | 107 | drawRealGpsMarker: function(opts){ |
| 101 | 108 | var gpsArray = opts.gpsList; |
| 102 | 109 | var marker, coord; |
| 103 | 110 | $.each(gpsArray, function(i, gps){ |
| 104 | - if(opts.coordTransform){ | |
| 105 | - //坐标转换 | |
| 106 | - coord = TransGPS.wgsToBD(gps.lat, gps.lon); | |
| 107 | - gps.bd_lat = coord.lat; | |
| 108 | - gps.bd_lon = coord.lng; | |
| 109 | - } | |
| 110 | - | |
| 111 | 111 | |
| 112 | 112 | marker = realMarkers[gps.deviceId]; |
| 113 | - if(marker){ | |
| 114 | - if(gps.timestamp == marker.gpsData.timestamp) | |
| 115 | - return; | |
| 116 | - else | |
| 117 | - moveMarker(marker, gps);//移动marker | |
| 118 | - } | |
| 113 | + if(marker && gps.timestamp == marker.gpsData.timestamp) | |
| 114 | + return; | |
| 119 | 115 | else{ |
| 120 | - //创建marker | |
| 121 | - marker = createBDMarkerByGps(gps); | |
| 122 | - map.addOverlay(marker); | |
| 123 | - //设备号和marker映射 | |
| 124 | - realMarkers[gps.deviceId] = marker; | |
| 116 | + //转换坐标 | |
| 117 | + transCoord(gps); | |
| 118 | + | |
| 119 | + if(marker) | |
| 120 | + moveMarker(marker, gps);//移动marker | |
| 121 | + else { | |
| 122 | + //创建marker | |
| 123 | + marker = createBDMarkerByGps(gps); | |
| 124 | + map.addOverlay(marker); | |
| 125 | + //设备号和marker映射 | |
| 126 | + realMarkers[gps.deviceId] = marker; | |
| 127 | + } | |
| 125 | 128 | } |
| 126 | 129 | }); |
| 127 | 130 | }, |
| 131 | + showGpsMarker:function (opt) { | |
| 132 | + var chs = opt.chs; | |
| 133 | + for(var device in realMarkers){ | |
| 134 | + if(chs[device]) | |
| 135 | + realMarkers[device].show(); | |
| 136 | + else | |
| 137 | + realMarkers[device].hide(); | |
| 138 | + } | |
| 139 | + }, | |
| 128 | 140 | removeGps: function(opts){ |
| 129 | 141 | var deviceArr = opts.deviceArr; |
| 130 | 142 | $.each(deviceArr, function(){ |
| ... | ... | @@ -184,6 +196,12 @@ var gb_map_baidu = (function(){ |
| 184 | 196 | } |
| 185 | 197 | }; |
| 186 | 198 | |
| 199 | + function transCoord(gps) { | |
| 200 | + var coord = TransGPS.wgsToBD(gps.lat, gps.lon); | |
| 201 | + gps.bd_lat = coord.lat; | |
| 202 | + gps.bd_lon = coord.lng; | |
| 203 | + } | |
| 204 | + | |
| 187 | 205 | var bd_gps_info_win_opts = { |
| 188 | 206 | width : 190, |
| 189 | 207 | height: 255, |
| ... | ... | @@ -257,14 +275,14 @@ var gb_map_baidu = (function(){ |
| 257 | 275 | function bdOpenWindow(marker){ |
| 258 | 276 | marker.gpsData.fromNow = moment(marker.gpsData.timestamp).fromNow(); |
| 259 | 277 | |
| 260 | - marker.infoWindow.setContent(template('map_gps_info_win_temp', marker.gpsData)); | |
| 278 | + marker.infoWindow.setContent(gb_map_overlay_mge.map_gps_win_temp(marker.gpsData)); | |
| 261 | 279 | map.openInfoWindow(marker.infoWindow, marker.point); |
| 262 | 280 | } |
| 263 | 281 | |
| 264 | - function centerToPolyline(polyline){ | |
| 282 | +/* function centerToPolyline(polyline){ | |
| 265 | 283 | var pos=polyline.getPath(); |
| 266 | 284 | map.panTo(pos[parseInt(pos.length / 2)]); |
| 267 | - } | |
| 285 | + }*/ | |
| 268 | 286 | |
| 269 | 287 | //文件载入完毕 |
| 270 | 288 | mapmonitor_load_ep.emitLater('load_baidu'); | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/map_overlay_manager.js
| 1 | -var gb_map_overlay_mge=(function () { | |
| 1 | +var gb_map_overlay_mge = (function () { | |
| 2 | 2 | |
| 3 | + var storage = window.localStorage; | |
| 3 | 4 | |
| 4 | - var gpsRefresh=function(addArr, upArr, upDownChange) { | |
| 5 | - //console.log('1111111', addArr, upArr, upDownChange); | |
| 5 | + var temps; | |
| 6 | + $.get('/real_control_v2/mapmonitor/fragments/map_infowindow.html', function (dom) { | |
| 7 | + temps = gb_common.compileTempByDom(dom, {compress: true}); | |
| 8 | + }); | |
| 9 | + | |
| 10 | + var gpsRefresh = function (addArr, upArr, upDownChange) { | |
| 6 | 11 | var all = addArr.concat(upArr).concat(upDownChange); |
| 7 | 12 | gpsRefreshAll(all); |
| 8 | 13 | |
| 9 | 14 | }; |
| 10 | 15 | |
| 11 | - var gpsRefreshAll=function (all) { | |
| 12 | - gb_map_imap.call('drawRealGpsMarker', {gpsList: all, coordTransform: true}); | |
| 16 | + var gpsRefreshAll = function (allList) { | |
| 17 | + gb_map_imap.call('drawRealGpsMarker', {gpsList: allList}); | |
| 18 | + }; | |
| 19 | + | |
| 20 | + var deviceFilter = function (node) { | |
| 21 | + return node.a_attr && node.a_attr.type=='device'; | |
| 22 | + }; | |
| 23 | + | |
| 24 | + //绘制线路走向 | |
| 25 | + var drawAllSection=function () { | |
| 26 | + //绘制线路走向 | |
| 27 | + var lines=JSON.parse(storage.getItem('lineControlItems')); | |
| 28 | + $.each(lines, function () { | |
| 29 | + //从storage里获取路由数据 | |
| 30 | + var lineCode=this.lineCode; | |
| 31 | + var route = JSON.parse(storage.getItem(lineCode + '_route')); | |
| 32 | + //上行 | |
| 33 | + gb_map_imap.call('drawLine', { | |
| 34 | + route: route, | |
| 35 | + style: {strokeWeight:6, strokeColor: 'blue'}, | |
| 36 | + id: lineCode+'_0', | |
| 37 | + upDown: 0, | |
| 38 | + hide: true | |
| 39 | + }); | |
| 40 | + //下行 | |
| 41 | + gb_map_imap.call('drawLine', { | |
| 42 | + route: route, | |
| 43 | + style: {strokeWeight:6, strokeColor: 'red'}, | |
| 44 | + id: lineCode+'_1', | |
| 45 | + upDown: 1, | |
| 46 | + hide: true | |
| 47 | + }); | |
| 48 | + | |
| 49 | + }); | |
| 50 | + }; | |
| 51 | + | |
| 52 | + //根据选中项显示路段 | |
| 53 | + var showSection = function (chs) { | |
| 54 | + var idx = {}; | |
| 55 | + $.each(chs, function () { | |
| 56 | + idx[this.data.lineId+'_'+this.data.upDown]=1; | |
| 57 | + }); | |
| 58 | + | |
| 59 | + gb_map_imap.call('refreshPolyline', {idx: gb_common.get_keys(idx)}); | |
| 13 | 60 | }; |
| 14 | 61 | |
| 15 | - if(gb_data_gps){ | |
| 16 | - //如果是嵌入线调,注册GPS刷新事件 | |
| 62 | + var init = function () { | |
| 63 | + | |
| 64 | + drawAllSection(); | |
| 65 | + //初始绘制 | |
| 66 | + gpsRefreshAll(gb_common.get_vals(gb_data_gps.allGps)); | |
| 67 | + | |
| 68 | + showOverlayByChecks(); | |
| 69 | + //显示路段 | |
| 70 | + showSection(gb_map_gps_tree.getChecked().filter(deviceFilter)); | |
| 71 | + //注册GPS刷新事件 | |
| 17 | 72 | gb_data_gps.registerCallback(gpsRefresh); |
| 18 | - } | |
| 73 | + }; | |
| 74 | + | |
| 75 | + | |
| 76 | + var showOverlayByChecks = function () { | |
| 77 | + var chs = gb_map_gps_tree.getChecked().filter(deviceFilter),chsMap={}; | |
| 78 | + $.each(chs, function () { | |
| 79 | + chsMap[this.a_attr.device]=true; | |
| 80 | + }); | |
| 81 | + | |
| 82 | + gb_map_imap.call('showGpsMarker', {chs: chsMap}); | |
| 19 | 83 | |
| 20 | - return {}; | |
| 84 | + //路段 | |
| 85 | + showSection(chs); | |
| 86 | + | |
| 87 | + }; | |
| 88 | + | |
| 89 | + var _focus = function (deviceId) { | |
| 90 | + gb_map_imap.call('goToMarker', {deviceId: deviceId}); | |
| 91 | + //打开信息窗口 | |
| 92 | + gb_map_imap.call('openWindow',{deviceId: deviceId}); | |
| 93 | + }; | |
| 94 | + return { | |
| 95 | + init: init, | |
| 96 | + refresh: showOverlayByChecks, | |
| 97 | + _focus: _focus, | |
| 98 | + map_gps_win_temp: function (data) { | |
| 99 | + return temps['map-win-gps-detail-temp'](data); | |
| 100 | + } | |
| 101 | + }; | |
| 21 | 102 | })(); |
| 22 | 103 | \ No newline at end of file | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/js/real.js
| ... | ... | @@ -5,56 +5,18 @@ var mapmonitor_load_ep = EventProxy.create('load_iMap', 'load_baidu', 'load_gaod |
| 5 | 5 | .addMap('gaode', '高德地图', gb_map_gaode) |
| 6 | 6 | .call('init'); |
| 7 | 7 | |
| 8 | - //设备树 | |
| 9 | - var treeData = gb_common.get_device_tree_data(); | |
| 10 | - _tree = $('.real_right_gps_panel .gps_tree_list') | |
| 11 | - .on('loaded.jstree', function () { | |
| 12 | - _tree.jstree(true).open_all(); | |
| 13 | - //删掉tree node a标签的 href值(不然鼠标悬停浏览器会出现状态条) | |
| 14 | - $('.gps_tree_list .jstree-container-ul a.jstree-anchor').removeAttr('href'); | |
| 15 | - }) | |
| 16 | - .jstree({ | |
| 17 | - 'core': { | |
| 18 | - 'data': treeData | |
| 19 | - }, | |
| 20 | - 'checkbox': { | |
| 21 | - 'keep_selected_style': false, | |
| 22 | - 'whole_node': false, | |
| 23 | - 'tie_selection': false | |
| 24 | - }, | |
| 25 | - 'contextmenu':{ | |
| 26 | - 'items': { | |
| 27 | - '轨迹回放':{ | |
| 28 | - 'label': '轨迹回放', | |
| 29 | - 'action': function (data) { | |
| 30 | - console.log('action', data); | |
| 31 | - } | |
| 32 | - }, | |
| 33 | - '发送指令':{ | |
| 34 | - 'label': '发送指令', | |
| 35 | - 'action': function (data) { | |
| 36 | - console.log('action', data); | |
| 37 | - } | |
| 38 | - } | |
| 39 | - } | |
| 40 | - }, | |
| 41 | - 'plugins': ['checkbox', 'contextmenu', 'state'] | |
| 42 | - }); | |
| 8 | + //init config form | |
| 9 | + gb_map_config.init(); | |
| 10 | + | |
| 11 | + //init tree | |
| 12 | + gb_map_gps_tree.init(gb_map_overlay_mge.init); | |
| 43 | 13 | |
| 44 | 14 | $(".real_bottom_panel").resizable({ |
| 45 | 15 | handles: { |
| 46 | 16 | 'n': '.real_bottom_panel #handle' |
| 47 | 17 | }, |
| 48 | 18 | maxHeight: 650, |
| 49 | - minHeight: 70 | |
| 50 | - }); | |
| 51 | - | |
| 52 | - $(".color_block").spectrum({ | |
| 53 | - color: "#f00", | |
| 54 | - showInput: true, | |
| 55 | - chooseText: "确定", | |
| 56 | - cancelText: "取消", | |
| 57 | - preferredFormat: "hex" | |
| 19 | + minHeight: 18 | |
| 58 | 20 | }); |
| 59 | 21 | }); |
| 60 | 22 | |
| ... | ... | @@ -63,9 +25,7 @@ var gb_map_consts = { |
| 63 | 25 | center_point: { |
| 64 | 26 | lng: 121.544336, |
| 65 | 27 | lat: 31.221315 |
| 66 | - }, | |
| 67 | - allGps: {}, | |
| 68 | - trafficBtn: '' //实时路况按钮 | |
| 28 | + } | |
| 69 | 29 | }; |
| 70 | 30 | |
| 71 | 31 | //Canvas 带圆角的矩形 | ... | ... |
src/main/resources/static/real_control_v2/mapmonitor/real.html
| 1 | 1 | <link href="/assets/css/TrafficControl.css" rel="stylesheet"/> |
| 2 | 2 | <link rel="stylesheet" href="/real_control_v2/assets/plugins/jquery.ui/themes/base/all.css"/> |
| 3 | 3 | <link rel="stylesheet" href="/real_control_v2/assets/plugins/spectrum/spectrum.css"/> |
| 4 | - | |
| 5 | 4 | <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/form-advanced.gradient.min.css"/> |
| 6 | 5 | <link rel="stylesheet" href="/real_control_v2/mapmonitor/css/real.css"/> |
| 7 | 6 | |
| 8 | 7 | <div class="map-system-msg"> |
| 9 | - <a class="z-depth-2" href="/pages/mapmonitor/alone/wrap.html" target="_blank">当前地图模块正在维护升级,点这里打开原版地图。</a> | |
| 8 | + <a class="z-depth-2" href="/pages/mapmonitor/alone/wrap.html" target="_blank"><i style="transform: rotate(90deg);" class="uk-icon-hand-pointer-o"></i> 当前地图模块正在维护升级中,请点这里打开原版地图。</a> | |
| 10 | 9 | </div> |
| 11 | 10 | |
| 12 | 11 | <div id="real_map_container"></div> |
| ... | ... | @@ -26,104 +25,22 @@ |
| 26 | 25 | <div class="real_bl_cont"> |
| 27 | 26 | |
| 28 | 27 | </div> |
| 29 | - <div class="real_br_cont"> | |
| 30 | - <form class="uk-form uk-form-stacked"> | |
| 31 | - <div class="uk-form-row"> | |
| 32 | - <span class="uk-form-label">图层</span> | |
| 33 | - <div class="uk-form-controls"> | |
| 34 | - <label><input type="radio" name="map_type" checked> 百度</label> | |
| 35 | - <label><input type="radio" name="map_type"> 高德</label> | |
| 36 | - <label><input type="checkbox" name="map_type"> 实时路况</label> | |
| 37 | - </div> | |
| 38 | - </div> | |
| 39 | - | |
| 40 | - <div class="uk-form-row"> | |
| 41 | - <span class="uk-form-label">空间数据</span> | |
| 42 | - <div class="uk-form-controls"> | |
| 43 | - <label><input type="checkbox" checked> 站点</label> | |
| 44 | - <label><input type="checkbox" > 电子围栏</label> | |
| 45 | - <label><input type="checkbox" > 停车场</label> | |
| 46 | - </div> | |
| 47 | - </div> | |
| 48 | - | |
| 49 | - <div class="uk-form-row"> | |
| 50 | - <span class="uk-form-label">异常警报输出</span> | |
| 51 | - <div class="uk-form-controls"> | |
| 52 | - <label><input type="checkbox" checked> 超速</label> | |
| 53 | - <label><input type="checkbox" checked> 越界</label> | |
| 54 | - <label><input type="checkbox" > 大间隔</label> | |
| 55 | - </div> | |
| 56 | - </div> | |
| 57 | - | |
| 58 | - <div class="uk-form-row"> | |
| 59 | - <span class="uk-form-label">车辆图标</span> | |
| 60 | - <div class="uk-form-controls"> | |
| 61 | - <label><input type="checkbox" > 标示角度</label> | |
| 62 | - <label><input type="checkbox" > 聚合</label> | |
| 63 | - </div> | |
| 64 | - </div> | |
| 65 | - | |
| 66 | - <div class="uk-form-row"> | |
| 67 | - <span class="uk-form-label">车辆颜色</span> | |
| 68 | - <div class="uk-form-controls"> | |
| 69 | - <div class="color_block"> | |
| 70 | - 上行 | |
| 71 | - <div class="sp-placeholder"> | |
| 72 | - <div class="sp-placeholder-color" ></div> | |
| 73 | - </div> | |
| 74 | - </div> | |
| 75 | - | |
| 76 | - <div class="color_block"> | |
| 77 | - 下行 | |
| 78 | - <div class="sp-placeholder"> | |
| 79 | - <div class="sp-placeholder-color" ></div> | |
| 80 | - </div> | |
| 81 | - </div> | |
| 82 | - | |
| 83 | - <div class="color_block"> | |
| 84 | - 非营运 | |
| 85 | - <div class="sp-placeholder"> | |
| 86 | - <div class="sp-placeholder-color" ></div> | |
| 87 | - </div> | |
| 88 | - </div> | |
| 89 | - </div> | |
| 90 | - </div> | |
| 91 | - | |
| 92 | - <div class="uk-form-row"> | |
| 93 | - <span class="uk-form-label">路段颜色</span> | |
| 94 | - <div class="uk-form-controls"> | |
| 95 | - <div class="color_block"> | |
| 96 | - 上行 | |
| 97 | - <div class="sp-placeholder"> | |
| 98 | - <div class="sp-placeholder-color" ></div> | |
| 99 | - </div> | |
| 100 | - </div> | |
| 101 | - | |
| 102 | - <div class="color_block"> | |
| 103 | - 下行 | |
| 104 | - <div class="sp-placeholder"> | |
| 105 | - <div class="sp-placeholder-color" ></div> | |
| 106 | - </div> | |
| 107 | - </div> | |
| 108 | - </div> | |
| 109 | - </div> | |
| 110 | - | |
| 111 | - <br> | |
| 112 | - </form> | |
| 28 | + <div class="real_br_cont map_config_wrap"> | |
| 113 | 29 | </div> |
| 114 | 30 | </div> |
| 115 | 31 | |
| 32 | + | |
| 33 | +<script src="/real_control_v2/mapmonitor/js/config.js"></script> | |
| 34 | +<script src="/real_control_v2/mapmonitor/js/gps_tree.js"></script> | |
| 116 | 35 | <script src="/real_control_v2/mapmonitor/js/map_overlay_manager.js"></script> |
| 117 | 36 | <script src="/real_control_v2/mapmonitor/js/real.js"></script> |
| 118 | 37 | <script src="/real_control_v2/mapmonitor/js/map/iMap.js"></script> |
| 119 | 38 | <script src="/real_control_v2/mapmonitor/js/map/platform/baidu.js"></script> |
| 120 | 39 | <script src="/real_control_v2/mapmonitor/js/map/platform/gaode.js"></script> |
| 121 | - | |
| 122 | 40 | <!-- jquery ui --> |
| 123 | 41 | <script src="/real_control_v2/assets/plugins/jquery.ui/core.js"></script> |
| 124 | 42 | <script src="/real_control_v2/assets/plugins/jquery.ui/widget.js"></script> |
| 125 | 43 | <script src="/real_control_v2/assets/plugins/jquery.ui/mouse.js"></script> |
| 126 | 44 | <script src="/real_control_v2/assets/plugins/jquery.ui/resizable.js"></script> |
| 127 | - | |
| 128 | - | |
| 45 | +<!-- 颜色选择器 --> | |
| 129 | 46 | <script src="/real_control_v2/assets/plugins/spectrum/spectrum.js"></script> |
| 130 | 47 | \ No newline at end of file | ... | ... |