Commit 766bf8a37b602f42ceff724cb37ff3a1eb5060d6

Authored by 王通
1 parent 8629bc50

1.按版本轨迹回放修正

src/main/java/com/bsth/service/gps/GpsServiceImpl.java
1 1 package com.bsth.service.gps;
2 2  
  3 +import java.io.IOException;
  4 +import java.io.OutputStream;
  5 +import java.io.UnsupportedEncodingException;
  6 +import java.lang.reflect.Field;
  7 +import java.net.URLEncoder;
  8 +import java.sql.Connection;
  9 +import java.sql.PreparedStatement;
  10 +import java.sql.ResultSet;
  11 +import java.sql.SQLException;
  12 +import java.text.DecimalFormat;
  13 +import java.text.ParseException;
  14 +import java.text.SimpleDateFormat;
  15 +import java.util.ArrayList;
  16 +import java.util.Calendar;
  17 +import java.util.Collections;
  18 +import java.util.Comparator;
  19 +import java.util.Date;
  20 +import java.util.HashMap;
  21 +import java.util.HashSet;
  22 +import java.util.Iterator;
  23 +import java.util.LinkedList;
  24 +import java.util.List;
  25 +import java.util.Map;
  26 +import java.util.Set;
  27 +
  28 +import javax.servlet.http.HttpServletResponse;
  29 +
  30 +import org.apache.commons.lang3.StringUtils;
  31 +import org.apache.poi.hssf.usermodel.HSSFCellStyle;
  32 +import org.apache.poi.hssf.usermodel.HSSFWorkbook;
  33 +import org.apache.poi.ss.usermodel.CellStyle;
  34 +import org.apache.poi.ss.usermodel.Row;
  35 +import org.apache.poi.ss.usermodel.Sheet;
  36 +import org.apache.poi.ss.usermodel.Workbook;
  37 +import org.joda.time.format.DateTimeFormat;
  38 +import org.joda.time.format.DateTimeFormatter;
  39 +import org.slf4j.Logger;
  40 +import org.slf4j.LoggerFactory;
  41 +import org.springframework.beans.factory.annotation.Autowired;
  42 +import org.springframework.dao.DataAccessException;
  43 +import org.springframework.jdbc.core.BeanPropertyRowMapper;
  44 +import org.springframework.jdbc.core.JdbcTemplate;
  45 +import org.springframework.stereotype.Service;
  46 +
3 47 import com.bsth.common.ResponseCode;
4 48 import com.bsth.data.BasicData;
5 49 import com.bsth.data.forecast.entity.ArrivalEntity;
... ... @@ -12,50 +56,28 @@ import com.bsth.data.pilot80.PilotReport;
12 56 import com.bsth.data.safe_driv.SafeDriv;
13 57 import com.bsth.data.safe_driv.SafeDrivCenter;
14 58 import com.bsth.data.schedule.DayOfSchedule;
15   -import com.bsth.entity.Line;
16 59 import com.bsth.entity.LineVersions;
  60 +import com.bsth.entity.LsSectionRoute;
  61 +import com.bsth.entity.LsStationRoute;
17 62 import com.bsth.entity.directive.D80;
18 63 import com.bsth.entity.realcontrol.ScheduleRealInfo;
19 64 import com.bsth.repository.CarParkRepository;
20 65 import com.bsth.repository.LineRepository;
21 66 import com.bsth.repository.LineVersionsRepository;
  67 +import com.bsth.repository.LsSectionRouteRepository;
  68 +import com.bsth.repository.LsStationRouteRepository;
22 69 import com.bsth.repository.StationRepository;
23 70 import com.bsth.repository.realcontrol.ScheduleRealInfoRepository;
24   -import com.bsth.service.gps.entity.*;
  71 +import com.bsth.service.gps.entity.DeviceChange;
  72 +import com.bsth.service.gps.entity.GpsOutbound_DTO;
  73 +import com.bsth.service.gps.entity.GpsSpeed;
  74 +import com.bsth.service.gps.entity.GpsSpeed_DTO;
  75 +import com.bsth.service.gps.entity.HistoryGps_DTO;
  76 +import com.bsth.service.gps.entity.HistoryGps_DTOV3;
  77 +import com.bsth.service.gps.entity.Road_DTO;
25 78 import com.bsth.util.TransGPS;
26 79 import com.bsth.util.TransGPS.Location;
27 80 import com.bsth.util.db.DBUtils_MS;
28   -import org.apache.commons.lang3.StringUtils;
29   -import org.apache.poi.hssf.usermodel.HSSFCellStyle;
30   -import org.apache.poi.hssf.usermodel.HSSFWorkbook;
31   -import org.apache.poi.ss.usermodel.CellStyle;
32   -import org.apache.poi.ss.usermodel.Row;
33   -import org.apache.poi.ss.usermodel.Sheet;
34   -import org.apache.poi.ss.usermodel.Workbook;
35   -import org.joda.time.format.DateTimeFormat;
36   -import org.joda.time.format.DateTimeFormatter;
37   -import org.slf4j.Logger;
38   -import org.slf4j.LoggerFactory;
39   -import org.springframework.beans.factory.annotation.Autowired;
40   -import org.springframework.dao.DataAccessException;
41   -import org.springframework.jdbc.core.BeanPropertyRowMapper;
42   -import org.springframework.jdbc.core.JdbcTemplate;
43   -import org.springframework.stereotype.Service;
44   -
45   -import javax.servlet.http.HttpServletResponse;
46   -import java.io.IOException;
47   -import java.io.OutputStream;
48   -import java.io.UnsupportedEncodingException;
49   -import java.lang.reflect.Field;
50   -import java.net.URLEncoder;
51   -import java.sql.Connection;
52   -import java.sql.PreparedStatement;
53   -import java.sql.ResultSet;
54   -import java.sql.SQLException;
55   -import java.text.DecimalFormat;
56   -import java.text.ParseException;
57   -import java.text.SimpleDateFormat;
58   -import java.util.*;
59 81  
60 82 @Service
61 83 public class GpsServiceImpl implements GpsService {
... ... @@ -91,6 +113,12 @@ public class GpsServiceImpl implements GpsService {
91 113  
92 114 @Autowired
93 115 LineRepository lineRepository;
  116 +
  117 + @Autowired
  118 + LsStationRouteRepository lsStationRouteRepository;
  119 +
  120 + @Autowired
  121 + LsSectionRouteRepository lsSectionRouteRepository;
94 122  
95 123 // 历史gps查询
96 124 @Override
... ... @@ -239,66 +267,76 @@ public class GpsServiceImpl implements GpsService {
239 267 int inOutStop;
240 268 long serviceState;
241 269 ArrivalEntity arrival;
242   - Set<String> lineSet=new HashSet();
  270 + Set<Integer> lineSet=new HashSet<Integer>();
243 271 List<Map<String,Object>> lineSwitch=new ArrayList<>();
244 272  
245   - List<Map> gpsNotValidList=new ArrayList();
246   - List<Map> versionSwitchList=new ArrayList();
247   - List<Map> gpsEqualsZeroList=new ArrayList();
248   - Map<String,Object> zeroMap=null;
249   - Map<String,Object> gpsNotValidMap=null;
250   - boolean isFirstNotValid=true;
251   - boolean isFirstLonlatZero=true;
  273 + List<Map<String, Object>> gpsNotValidList=new ArrayList<>();
  274 + List<Map<String, Object>> gpsEqualsZeroList=new ArrayList<>();
252 275 Map<String, Object> map = null;
253   - int index=0;
254   - for(Map<String, Object> rs : dataList){
255   - if (index< dataList.size()-1&&!map_get_str( rs,"LINE_ID").equals(map_get_str( dataList.get(index+1),"LINE_ID"))){
256   - Line cLine =lineRepository.findOne(Integer.valueOf(map_get_str( rs,"LINE_ID")));
257   - Line nextLine =lineRepository.findOne(Integer.valueOf(map_get_str( dataList.get(index+1),"LINE_ID")));
258   - if (cLine!=null&&nextLine!=null){
259   - Map<String,Object> LSmap=new HashMap<>();
260   - String name=cLine.getName();
261   - String NextName=nextLine.getName();
262   - LSmap.put("abnormalType","linesSwitch");
263   - LSmap.put("line_line",name+"-->"+NextName);
264   - LSmap.put("st",map_get_long(rs, "TS"));
265   - LSmap.put("et",index== dataList.size()-1?map_get_long(rs, "TS"):map_get_long( dataList.get(index+1), "TS"));
266   - lineSwitch.add(LSmap);
267   - }
268   - }
  276 + int oldLineId = -1, oldGpsValid = -1, oldLonlat = -1;
  277 +
  278 + // 默认加入一个线路切换信息
  279 + Map<String, Object> fls = new HashMap<String, Object>();
  280 + fls.put("abnormalType", "normal");
  281 + fls.put("st", "-1");
  282 + lineSwitch.add(fls);
  283 +
  284 + // 默认加入一个GPS无效异常信息
  285 + Map<String, Object> fgv = new HashMap<String, Object>();
  286 + fgv.put("abnormalType", "normal");
  287 + fgv.put("st", "-1");
  288 + gpsNotValidList.add(fgv);
  289 +
  290 + // 默认加入一个经纬度为零异常信息
  291 + Map<String, Object> fgez = new HashMap<String, Object>();
  292 + fgez.put("abnormalType", "normal");
  293 + fgez.put("st", "-1");
  294 + gpsEqualsZeroList.add(fgez);
  295 +
  296 + for(Map<String, Object> rs : dataList) {
  297 + Object lineId = rs.get("LINE_ID");
  298 + // 线路ID发生变化时补全线路切换信息 并新加入一个
  299 + if (oldLineId != (Integer)lineId) {
  300 + String lineName = BasicData.lineCode2NameMap.get(lineId.toString());
  301 + lineSwitch.get(lineSwitch.size() - 1).put("line2", lineName);
  302 + lineSwitch.get(lineSwitch.size() - 1).put("et", rs.get("TS"));
  303 +
  304 + Map<String, Object> ls = new HashMap<String, Object>();
  305 + ls.put("abnormalType", "lineSwitch");
  306 + ls.put("line1", lineName);
  307 + lineSwitch.add(ls);
  308 +
  309 + lineSet.add((Integer)lineId);
  310 + oldLineId = (Integer)lineId;
  311 + }
269 312 serviceState = map_get_long(rs, "SERVICE_STATE");
270   - if(getGpsValid(serviceState) == 1){
271   - if (isFirstNotValid) {
272   - gpsNotValidMap=new HashMap<>();
273   - gpsNotValidMap.put("abnormalType","gpsNotValid");
274   - gpsNotValidMap.put("st",map_get_long(rs,"TS"));
275   - isFirstNotValid=false;
276   - }
277   - if (index== dataList.size()-1||index< dataList.size()-1&&getGpsValid(map_get_long(dataList.get(index+1), "SERVICE_STATE"))!=1){
278   - gpsNotValidMap.put("et",map_get_long(rs,"TS"));
279   - gpsNotValidList.add(gpsNotValidMap);
280   - isFirstNotValid=true;
281   - gpsNotValidMap=null;
282   - }
  313 + // GPS状态发生变化时补全信息 并新加入一个
  314 + if (getGpsValid(serviceState) != oldGpsValid) {
  315 + gpsNotValidList.get(gpsNotValidList.size() - 1).put("et", rs.get("TS"));
  316 +
  317 + Map<String, Object> gv = new HashMap<String, Object>();
  318 + gv.put("abnormalType", getGpsValid(serviceState) == 0 ? "normal" : "gpsNotValid");
  319 + gv.put("st", rs.get("TS"));
  320 + gpsNotValidList.add(gv);
  321 +
  322 + oldGpsValid = getGpsValid(serviceState);
283 323 }
284   - //continue;
285 324  
286 325 map = new HashMap<>();
287 326 lon = map_get_float(rs, "LON");
288 327 lat = map_get_float(rs, "LAT");
289   - if (lon==0||lat==0){
290   - if (isFirstLonlatZero){
291   - zeroMap=new HashMap<>();
292   - zeroMap.put("abnormalType","gpsZero");
293   - zeroMap.put("st",map_get_long(rs,"TS"));
294   - isFirstLonlatZero=false;
295   - }
296   - if (index<dataList.size()-1&&(map_get_float(dataList.get(index+1),"LON")!=0&&map_get_float(dataList.get(index+1),"LAT")!=0)){
297   - zeroMap.put("et",map_get_long(rs,"TS"));
298   - gpsEqualsZeroList.add(zeroMap);
299   - isFirstLonlatZero=true;
300   - }
  328 + // 经纬度为零
  329 + if ((lon == 0 || lat == 0 ? 1 : 0) != oldLonlat){
  330 + gpsEqualsZeroList.get(gpsEqualsZeroList.size() - 1).put("et", rs.get("TS"));
  331 +
  332 + Map<String, Object> gez = new HashMap<String, Object>();
  333 + gez.put("abnormalType", (lon == 0 || lat == 0 ? 1 : 0) == 0 ? "normal" : "gpsZero");
  334 + gez.put("st", rs.get("TS"));
  335 + gpsEqualsZeroList.add(gez);
  336 +
  337 + oldLonlat = (lon == 0 || lat == 0 ? 1 : 0);
301 338 }
  339 +
302 340 // 高德坐标
303 341 gdLoc = TransGPS.transformFromWGSToGCJ(TransGPS.LocationMake(lon, lat));
304 342 map.put("gcj_lon", gdLoc.getLng());
... ... @@ -319,7 +357,7 @@ public class GpsServiceImpl implements GpsService {
319 357  
320 358 map.put("lineId", map_get_str(rs, "LINE_ID"));
321 359 map.put("speed", map_get_float(rs,"SPEED_GPS"));
322   - lineSet.add(map_get_str(rs, "LINE_ID"));
  360 +
323 361 inOutStop = Integer.parseInt(rs.get("INOUT_STOP").toString());
324 362 map.put("inout_stop", inOutStop);
325 363  
... ... @@ -336,52 +374,93 @@ public class GpsServiceImpl implements GpsService {
336 374 //路段编码
337 375 map.put("section_code", map_get_str(rs,"SECTION_CODE"));
338 376 list.add(map);
339   - index++;
  377 + }
  378 + if (dataList.size() > 0) {
  379 + Map<String, Object> rs = dataList.get(dataList.size() - 1);
  380 + gpsNotValidList.get(gpsNotValidList.size() - 1).put("et", rs.get("TS"));
  381 + gpsEqualsZeroList.get(gpsEqualsZeroList.size() - 1).put("et", rs.get("TS"));
  382 + }
  383 +
  384 + for (int i = lineSwitch.size() - 1;i > -1;i--) {
  385 + Map<String, Object> ls = lineSwitch.get(i);
  386 + if ("normal".equals(ls.get("abnormalType")) || ls.get("et") == null) {
  387 + lineSwitch.remove(i);
  388 + }
  389 + }
  390 +
  391 + for (int i = gpsNotValidList.size() - 1;i > -1;i--) {
  392 + Map<String, Object> gnv = gpsNotValidList.get(i);
  393 + if ("normal".equals(gnv.get("abnormalType"))) {
  394 + gpsNotValidList.remove(i);
  395 + }
  396 + }
  397 +
  398 + for (int i = gpsEqualsZeroList.size() - 1;i > -1;i--) {
  399 + Map<String, Object> gez = gpsEqualsZeroList.get(i);
  400 + if ("normal".equals(gez.get("abnormalType"))) {
  401 + gpsEqualsZeroList.remove(i);
  402 + }
340 403 }
341 404  
342   - if (lineSet.size()>0){
  405 + if (lineSet.size() > 0){
343 406 List<Map<String,Object>> vlist=new ArrayList<>();
344   - for (String s : lineSet) {
345   - int lineId=Integer.parseInt(s);
346   - List<LineVersions> lvs=lineVersionsRepository.findBylineId(lineId);
347   - Map<String,Object> vMap;
348   - Long qt=0L;
349   - if (lvs!=null&&!lvs.isEmpty()){
350   - for (LineVersions lv : lvs) {
351   - vMap=new HashMap();
352   - Long sd=lv.getStartDate().getTime();
353   - Long ed=lv.getEndDate().getTime();
354   - if (sd<st&&et<ed){
355   - vMap.put("line",s);
356   - vMap.put("version",lv.getVersions());
357   - vMap.put("vtime","all");
358   - }else if(sd<st&&et>ed&&st<ed){
359   - vMap.put("line",s);
360   - vMap.put("version",lv.getVersions());
361   - vMap.put("endTime",lv.getEndDate().getTime());
362   - vMap.put("abnormalType","versionSwitch");
363   - vMap.put("startTime",st);
364   - vMap.put("st",lv.getEndDate().getTime());
365   - qt=lv.getEndDate().getTime();
366   - }else if(st<sd&&et<ed&&sd<et){
367   - vMap.put("line",s);
368   - vMap.put("version",lv.getVersions());
369   - vMap.put("startTime",lv.getStartDate().getTime());
370   - vMap.put("endTime",et);
371   - }
372   - if (!vMap.isEmpty()) {
373   - vlist.add(vMap);
374   - }
375   - }
376   - }
377   - if (vlist.size()>1){
378   - Map<String,Object> VSmap=new HashMap<>();
379   - VSmap.put("abnormalType","vserionSwitch");
380   - VSmap.put("st",qt);
381   - versionSwitchList.add(VSmap);
  407 + Map<String, Map<String, Object>> vmap = new HashMap<>();
  408 + Map<String, Map<String, String>> lv2station = new HashMap<String, Map<String, String>>();//lv2section = new HashMap<String, Map<String, String>>();
  409 + for (Integer lineId : lineSet) {
  410 + List<LineVersions> lvs = lineVersionsRepository.findBylineId(lineId);
  411 + for (LineVersions lv : lvs) {
  412 + long vst = lv.getStartDate().getTime(), vet = lv.getEndDate().getTime();
  413 + if (st >= vst && st <= vet || et >= vst && et <= vet) {
  414 + List<LsStationRoute> stations = lsStationRouteRepository.findupdated(lineId, lineId.toString(), lv.getVersions());
  415 + //List<LsSectionRoute> sections = lsSectionRouteRepository.findupdated(lineId, lineId.toString(), lv.getVersions());
  416 + Map<String, Object> vm = new HashMap<String, Object>();
  417 + vm.put("lineId", lineId.toString());
  418 + vm.put("version", lv.getVersions());
  419 + vm.put("startTime", vst);
  420 + vm.put("endTime", vet);
  421 + vm.put("stations", stations);
  422 + //vm.put("sections", sections);
  423 +
  424 + Map<String, String> stationcode2name = new HashMap<String, String>();//sectioncode2name = new HashMap<String, String>();
  425 + for (LsStationRoute lsr : stations) {
  426 + stationcode2name.put(lsr.getStationCode(), lsr.getStationName());
  427 + }
  428 + //for (LsSectionRoute lsr : sections) {
  429 + // sectioncode2name.put(lsr.getSectionCode(), lsr.getSection().getSectionName());
  430 + //}
  431 + lv2station.put(lineId + "_" + lv.getVersions(), stationcode2name);
  432 + // 路段因为可能漂到其它线路路段 因此需要使用最新的全量路段
  433 + //lv2section.put(lineId + "_" + lv.getVersions(), sectioncode2name);
  434 +
  435 + vlist.add(vm);
  436 + vmap.put(lineId + "_" + lv.getVersions(), vm);
  437 + }
382 438 }
383 439 }
384 440 rsMap.put("lineVerson",vlist);
  441 +
  442 + for (Map<String, Object> gps : list) {
  443 + long ts = (long)gps.get("timestamp");
  444 + for (Map<String, Object> vm : vlist) {
  445 + long vst = (long)vm.get("startTime"), vet = (long)vm.get("endTime");
  446 + if (gps.get("lineId").equals(vm.get("lineId")) && ts >= vst && ts <= vet) {
  447 + gps.put("version", vm.get("version"));
  448 + String key = vm.get("lineId") + "_" + vm.get("version");
  449 + /*if (StringUtils.isEmpty(sectionCode)) {
  450 + gps.put("section_code", "-00404");
  451 + gps.put("section_name", "未知路段");
  452 + }
  453 + gps.put("section_name", lv2section.get(key).get(sectionCode));*/
  454 + ArrivalEntity ae = (ArrivalEntity)gps.get("inout_stop_info");
  455 + if (ae != null) {
  456 + ae.setStopName(lv2station.get(key).get(ae.getStopNo()));
  457 + if (StringUtils.isEmpty(lv2station.get(key).get(ae.getStopNo()))) {
  458 + ae.setStopName(BasicData.stationCode2NameMap.get(ae.getStopNo()));
  459 + }
  460 + }
  461 + }
  462 + }
  463 + }
385 464 }
386 465 // 按时间排序
387 466 Collections.sort(list, new Comparator<Map<String, Object>>() {
... ...
src/main/java/com/bsth/service/gps/entity/HistoryGps_DTOV3.java
... ... @@ -50,6 +50,8 @@ public class HistoryGps_DTOV3 {
50 50  
51 51 private String section_code;
52 52 private String section_name;
  53 +
  54 + private int version;
53 55  
54 56 @JsonIgnore
55 57 private Point point;
... ... @@ -119,7 +121,7 @@ public class HistoryGps_DTOV3 {
119 121 this.stopNo = stopNo;
120 122 }
121 123  
122   - public float getDirection() {
  124 + public float getDirection() {
123 125 return direction;
124 126 }
125 127  
... ... @@ -222,4 +224,12 @@ public class HistoryGps_DTOV3 {
222 224 public void setSection_name(String section_name) {
223 225 this.section_name = section_name;
224 226 }
  227 +
  228 + public int getVersion() {
  229 + return version;
  230 + }
  231 +
  232 + public void setVersion(int version) {
  233 + this.version = version;
  234 + }
225 235 }
... ...
src/main/resources/static/pages/control/lineallot_v2/main.html
... ... @@ -507,6 +507,8 @@
507 507 });
508 508 //缓存路由
509 509 idx=idx.substr(0, idx.length - 1);
  510 +
  511 + $.ajaxSettings.async = false;
510 512 $.get('/realMap/findRouteAndVersionByLine', {idx: idx}, function (rs) {
511 513 if (rs) {
512 514 for(var lineCode in rs)
... ... @@ -514,6 +516,7 @@
514 516 //eq.emit('cache_route');
515 517 }
516 518 });
  519 + $.ajaxSettings.async = true;
517 520 $.get('/realMap/findRouteByLine', {idx: idx}, function (rs) {
518 521 if (rs) {
519 522 for(var lineCode in rs)
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/layout.html
... ... @@ -106,7 +106,7 @@
106 106 {{else if item.abnormalType == 'gpsNotValid'}}
107 107 gps无效
108 108 {{else if item.abnormalType == 'linesSwitch'}}
109   - <span style="font-size:12px;-webkit-transform:scale(0.9);display:block;text-indent: 5px;">{{item.line_line}}</span>
  109 + <span style="font-size:12px;-webkit-transform:scale(0.9);display:block;text-indent: 5px;">{{item.line1}}->{{item.line2}}</span>
110 110 {{else if item.abnormalType == 'versionSwitch'}}
111 111 线路版本切换
112 112 {{else if item.abnormalType == 'gpsZero'}}
... ...
src/main/resources/static/real_control_v2/mapmonitor/fragments/playback_v3/right.html
... ... @@ -81,7 +81,7 @@
81 81 var scale = $('.scale', progress);
82 82 var play_before_flag;
83 83 var lineVersionList;
84   - var currentVersion;
  84 + var currentVersion = 0;
85 85  
86 86 $('.play-back-tools-wrap', rightWrap).on('ready-to-play', function (e, data) {
87 87 e.stopPropagation();
... ... @@ -304,6 +304,7 @@
304 304 circleLine = circleLine && circlePrevStop != circleFirstStop ? true : false;
305 305 circlePrevStop = gps.stopNo;
306 306 if (autoChange && (gps.lineId != xlPolyline.lineId || gps.upDown != xlPolyline.upDown || circleLine) || xlPolyline.lineVersion != lineVersion) {
  307 + debugger;
307 308 drawXlPolyline(gps.lineId, gps.upDown, lineVersion);
308 309 }
309 310 }
... ... @@ -343,6 +344,7 @@
343 344  
344 345 function drawRoadPolyline(lineCode, upDown, lineVersion) {
345 346 //从localStorage获取路段
  347 + //debugger;
346 348 if (lineVersion==0)
347 349 routes = JSON.parse(storage.getItem(lineCode + '_route'));
348 350 else
... ... @@ -698,9 +700,9 @@
698 700 if (lineVersionList.length > 0) {
699 701 var isNotLine=0
700 702 for (var i = 0; i < lineVersionList.length; i++) {
701   - if(lineVersionList[i].line!=gps.lineId)
  703 + if(lineVersionList[i].lineId!=gps.lineId)
702 704 isNotLine++;
703   - if (lineVersionList[i]&&lineVersionList[i].line==gps.lineId&&(lineVersionList[i].endTime && lineVersionList[i].endTime > gps.timestamp&&lineVersionList[i].startTime && lineVersionList[i].startTime < gps.timestamp||lineVersionList[i].vtime && lineVersionList[i].vtime == 'all')) {
  705 + if (lineVersionList[i]&&lineVersionList[i].lineId==gps.lineId&&(lineVersionList[i].endTime && lineVersionList[i].endTime > gps.timestamp&&lineVersionList[i].startTime && lineVersionList[i].startTime < gps.timestamp)) {
704 706 drawCarMarker(gps, lineVersionList[i].version);//更新GPS点位
705 707 }else if(lineVersionList[i].length == 0){
706 708 drawCarMarker(gps, 0);//除非线路没有版本信息
... ...