Commit 63069cb55a632a024e993abbd7bb326581a387ca
1 parent
038dee30
update
Showing
9 changed files
with
205 additions
and
73 deletions
src/main/java/com/bsth/service/realcontrol/impl/ScheduleRealInfoServiceImpl.java
| @@ -679,9 +679,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | @@ -679,9 +679,6 @@ public class ScheduleRealInfoServiceImpl extends BaseServiceImpl<ScheduleRealInf | ||
| 679 | map.put("directions_eq", 1); | 679 | map.put("directions_eq", 1); |
| 680 | List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map); | 680 | List<Map<String, Object>> downList = sectionRouteService.getSectionRoute(map); |
| 681 | 681 | ||
| 682 | - System.out.println(upList); | ||
| 683 | - System.out.println(downList); | ||
| 684 | - | ||
| 685 | Map<String, Object> rs = new HashMap<>(); | 682 | Map<String, Object> rs = new HashMap<>(); |
| 686 | 683 | ||
| 687 | String upVectors = "", vec; | 684 | String upVectors = "", vec; |
src/main/java/com/bsth/vehicle/gpsdata/entity/ArrivalInfo.java
| @@ -24,14 +24,21 @@ public class ArrivalInfo { | @@ -24,14 +24,21 @@ public class ArrivalInfo { | ||
| 24 | Date createDate, Integer weeksYear) { | 24 | Date createDate, Integer weeksYear) { |
| 25 | this.deviceId = deviceId; | 25 | this.deviceId = deviceId; |
| 26 | 26 | ||
| 27 | - //gps是2014年的数据,临时将ts拉到6月1号 | ||
| 28 | - /*try { | ||
| 29 | - this.ts = sdf2.parse("2016-06-01 " + sdf.format(new Date(ts))).getTime(); | ||
| 30 | - } catch (ParseException e) { | ||
| 31 | - e.printStackTrace(); | ||
| 32 | - }*/ | ||
| 33 | this.ts = ts; | 27 | this.ts = ts; |
| 34 | 28 | ||
| 29 | + this.lineCode = lineCode; | ||
| 30 | + this.upDown = upDown; | ||
| 31 | + this.stopNo = stopNo; | ||
| 32 | + this.inOut = inOut; | ||
| 33 | + this.createDate = createDate; | ||
| 34 | + this.weeksYear = weeksYear; | ||
| 35 | + } | ||
| 36 | + | ||
| 37 | + public ArrivalInfo(String deviceId, Long ts, String lineCode, Integer upDown, String stopNo, Integer inOut, | ||
| 38 | + Date createDate, Integer weeksYear, String stopName) { | ||
| 39 | + this.deviceId = deviceId; | ||
| 40 | + | ||
| 41 | + this.ts = ts; | ||
| 35 | 42 | ||
| 36 | this.lineCode = lineCode; | 43 | this.lineCode = lineCode; |
| 37 | this.upDown = upDown; | 44 | this.upDown = upDown; |
| @@ -39,6 +46,7 @@ public class ArrivalInfo { | @@ -39,6 +46,7 @@ public class ArrivalInfo { | ||
| 39 | this.inOut = inOut; | 46 | this.inOut = inOut; |
| 40 | this.createDate = createDate; | 47 | this.createDate = createDate; |
| 41 | this.weeksYear = weeksYear; | 48 | this.weeksYear = weeksYear; |
| 49 | + this.stopName = stopName; | ||
| 42 | } | 50 | } |
| 43 | 51 | ||
| 44 | /** | 52 | /** |
| @@ -62,9 +70,14 @@ public class ArrivalInfo { | @@ -62,9 +70,14 @@ public class ArrivalInfo { | ||
| 62 | private Integer upDown; | 70 | private Integer upDown; |
| 63 | 71 | ||
| 64 | /** | 72 | /** |
| 65 | - * 站点 | 73 | + * 站点编码 |
| 66 | */ | 74 | */ |
| 67 | private String stopNo; | 75 | private String stopNo; |
| 76 | + | ||
| 77 | + /** | ||
| 78 | + * 站点名称 | ||
| 79 | + */ | ||
| 80 | + private String stopName; | ||
| 68 | 81 | ||
| 69 | /** | 82 | /** |
| 70 | * 0: 进 1:出 | 83 | * 0: 进 1:出 |
| @@ -141,4 +154,12 @@ public class ArrivalInfo { | @@ -141,4 +154,12 @@ public class ArrivalInfo { | ||
| 141 | public void setTs(Long ts) { | 154 | public void setTs(Long ts) { |
| 142 | this.ts = ts; | 155 | this.ts = ts; |
| 143 | } | 156 | } |
| 157 | + | ||
| 158 | + public String getStopName() { | ||
| 159 | + return stopName; | ||
| 160 | + } | ||
| 161 | + | ||
| 162 | + public void setStopName(String stopName) { | ||
| 163 | + this.stopName = stopName; | ||
| 164 | + } | ||
| 144 | } | 165 | } |
src/main/java/com/bsth/vehicle/gpsdata/service/GpsDataServiceImpl.java
| @@ -12,6 +12,8 @@ import java.util.HashMap; | @@ -12,6 +12,8 @@ import java.util.HashMap; | ||
| 12 | import java.util.List; | 12 | import java.util.List; |
| 13 | import java.util.Map; | 13 | import java.util.Map; |
| 14 | 14 | ||
| 15 | +import org.slf4j.Logger; | ||
| 16 | +import org.slf4j.LoggerFactory; | ||
| 15 | import org.springframework.stereotype.Service; | 17 | import org.springframework.stereotype.Service; |
| 16 | 18 | ||
| 17 | import com.bsth.util.DateUtils; | 19 | import com.bsth.util.DateUtils; |
| @@ -19,6 +21,7 @@ import com.bsth.util.TransGPS; | @@ -19,6 +21,7 @@ import com.bsth.util.TransGPS; | ||
| 19 | import com.bsth.util.TransGPS.Location; | 21 | import com.bsth.util.TransGPS.Location; |
| 20 | import com.bsth.util.db.DBUtils_MS; | 22 | import com.bsth.util.db.DBUtils_MS; |
| 21 | import com.bsth.vehicle.common.CommonMapped; | 23 | import com.bsth.vehicle.common.CommonMapped; |
| 24 | +import com.bsth.vehicle.gpsdata.entity.ArrivalInfo; | ||
| 22 | 25 | ||
| 23 | @Service | 26 | @Service |
| 24 | public class GpsDataServiceImpl implements GpsDataService{ | 27 | public class GpsDataServiceImpl implements GpsDataService{ |
| @@ -26,6 +29,13 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -26,6 +29,13 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 26 | /** 历史gps查询最大范围 24小时 */ | 29 | /** 历史gps查询最大范围 24小时 */ |
| 27 | final static Long GPS_RANGE= 60 * 60 * 24L; | 30 | final static Long GPS_RANGE= 60 * 60 * 24L; |
| 28 | 31 | ||
| 32 | + /** jdbc */ | ||
| 33 | + Connection conn = null; | ||
| 34 | + PreparedStatement ps = null; | ||
| 35 | + ResultSet rs = null; | ||
| 36 | + | ||
| 37 | + Logger logger = LoggerFactory.getLogger(this.getClass()); | ||
| 38 | + | ||
| 29 | //历史gps查询 | 39 | //历史gps查询 |
| 30 | @Override | 40 | @Override |
| 31 | public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) { | 41 | public List<Map<String, Object>> history(String device, Long startTime, Long endTime, int directions) { |
| @@ -111,12 +121,11 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -111,12 +121,11 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 111 | if(et - st > GPS_RANGE) | 121 | if(et - st > GPS_RANGE) |
| 112 | return list; | 122 | return list; |
| 113 | 123 | ||
| 114 | - //转换设备号 | 124 | + //车辆编码转换成设备号 |
| 115 | String[] devices = new String[nbbmArray.length]; | 125 | String[] devices = new String[nbbmArray.length]; |
| 116 | for(int i = 0; i < nbbmArray.length; i ++){ | 126 | for(int i = 0; i < nbbmArray.length; i ++){ |
| 117 | devices[i] = CommonMapped.vehicDeviceBiMap.inverse().get(nbbmArray[i]); | 127 | devices[i] = CommonMapped.vehicDeviceBiMap.inverse().get(nbbmArray[i]); |
| 118 | } | 128 | } |
| 119 | - //String device = CommonMapped.vehicDeviceBiMap.inverse().get(nbbm); | ||
| 120 | //day_of_year | 129 | //day_of_year |
| 121 | Calendar sCal = Calendar.getInstance(); | 130 | Calendar sCal = Calendar.getInstance(); |
| 122 | sCal.setTime(new Date(st * 1000)); | 131 | sCal.setTime(new Date(st * 1000)); |
| @@ -126,21 +135,33 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -126,21 +135,33 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 126 | eCal.setTime(new Date(et * 1000)); | 135 | eCal.setTime(new Date(et * 1000)); |
| 127 | int eDayOfYear = /*eCal.get(Calendar.DAY_OF_YEAR)*/200; | 136 | int eDayOfYear = /*eCal.get(Calendar.DAY_OF_YEAR)*/200; |
| 128 | 137 | ||
| 138 | + Calendar weekCal = Calendar.getInstance(); | ||
| 139 | + | ||
| 129 | //如果是同一天 | 140 | //如果是同一天 |
| 130 | if(sDayOfYear == eDayOfYear){ | 141 | if(sDayOfYear == eDayOfYear){ |
| 131 | - list = findByTs(sDayOfYear, st, et, devices); | 142 | + weekCal.setTimeInMillis(st); |
| 143 | + list = findByTs(weekCal.get(Calendar.WEEK_OF_YEAR), sDayOfYear, st, et, devices); | ||
| 132 | } | 144 | } |
| 133 | else{ | 145 | else{ |
| 134 | //跨天 | 146 | //跨天 |
| 147 | + Long tempSt = 0L, tempEt = 0L; | ||
| 135 | for(int i = sDayOfYear; i <= eDayOfYear; i ++){ | 148 | for(int i = sDayOfYear; i <= eDayOfYear; i ++){ |
| 136 | 149 | ||
| 137 | - if(i == sDayOfYear) | ||
| 138 | - list.addAll(findByTs(i, st, DateUtils.getTimesnight(sCal), devices)); | ||
| 139 | - else if(i == eDayOfYear) | ||
| 140 | - list.addAll(findByTs(i, DateUtils.getTimesmorning(sCal), et, devices)); | ||
| 141 | - else | ||
| 142 | - list.addAll(findByTs(i, DateUtils.getTimesmorning(sCal), DateUtils.getTimesnight(sCal), devices)); | 150 | + if(i == sDayOfYear){ |
| 151 | + tempSt = st; | ||
| 152 | + tempEt = DateUtils.getTimesnight(sCal); | ||
| 153 | + } | ||
| 154 | + else if(i == eDayOfYear){ | ||
| 155 | + tempSt = DateUtils.getTimesmorning(sCal); | ||
| 156 | + tempEt = et; | ||
| 157 | + } | ||
| 158 | + else{ | ||
| 159 | + tempSt = DateUtils.getTimesmorning(sCal); | ||
| 160 | + tempEt = DateUtils.getTimesnight(sCal); | ||
| 161 | + } | ||
| 143 | 162 | ||
| 163 | + weekCal.setTimeInMillis(tempSt); | ||
| 164 | + list.addAll(findByTs(weekCal.get(Calendar.WEEK_OF_YEAR), i, tempSt, tempEt, devices)); | ||
| 144 | //加一天 | 165 | //加一天 |
| 145 | sCal.add(Calendar.DATE, 1); | 166 | sCal.add(Calendar.DATE, 1); |
| 146 | } | 167 | } |
| @@ -157,7 +178,7 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -157,7 +178,7 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 157 | return list; | 178 | return list; |
| 158 | } | 179 | } |
| 159 | 180 | ||
| 160 | - public List<Map<String, Object>> findByTs(int dayOfYear,Long st, Long et, String[] devices){ | 181 | + public List<Map<String, Object>> findByTs(int weekOfYear, int dayOfYear,Long st, Long et, String[] devices){ |
| 161 | List<Map<String, Object>> list = new ArrayList<>(); | 182 | List<Map<String, Object>> list = new ArrayList<>(); |
| 162 | Map<String, Object> map = null; | 183 | Map<String, Object> map = null; |
| 163 | 184 | ||
| @@ -167,10 +188,10 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -167,10 +188,10 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 167 | inv += ("'" + device + "',"); | 188 | inv += ("'" + device + "',"); |
| 168 | inv = inv.substring(0, inv.length() - 1); | 189 | inv = inv.substring(0, inv.length() - 1); |
| 169 | 190 | ||
| 191 | + //查询到离站数据 | ||
| 192 | + Map<String, ArrivalInfo> arrivalMap = findArrivalByTs(/*weekOfYear*/30, st, et, inv); | ||
| 193 | + | ||
| 170 | String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO from bsth_c_gps_info where days_year=? and device_id in ("+inv+") and ts > ? and ts < ?"; | 194 | String sql = "select DEVICE_ID,LON,LAT,TS,INOUT_STOP,SERVICE_STATE ,STOP_NO from bsth_c_gps_info where days_year=? and device_id in ("+inv+") and ts > ? and ts < ?"; |
| 171 | - Connection conn = null; | ||
| 172 | - PreparedStatement ps = null; | ||
| 173 | - ResultSet rs = null; | ||
| 174 | try{ | 195 | try{ |
| 175 | conn = DBUtils_MS.getConnection(); | 196 | conn = DBUtils_MS.getConnection(); |
| 176 | ps = conn.prepareStatement(sql); | 197 | ps = conn.prepareStatement(sql); |
| @@ -182,7 +203,7 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -182,7 +203,7 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 182 | rs = ps.executeQuery(); | 203 | rs = ps.executeQuery(); |
| 183 | Float lon, lat; | 204 | Float lon, lat; |
| 184 | Location bdLoc, gdLoc; | 205 | Location bdLoc, gdLoc; |
| 185 | - int upDown; | 206 | + int upDown,inOutStop; |
| 186 | while (rs.next()) { | 207 | while (rs.next()) { |
| 187 | upDown = getUpOrDown(rs.getLong("SERVICE_STATE")); | 208 | upDown = getUpOrDown(rs.getLong("SERVICE_STATE")); |
| 188 | map = new HashMap<>(); | 209 | map = new HashMap<>(); |
| @@ -201,7 +222,14 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -201,7 +222,14 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 201 | map.put("device", rs.getString("DEVICE_ID")); | 222 | map.put("device", rs.getString("DEVICE_ID")); |
| 202 | map.put("ts", rs.getLong("TS")); | 223 | map.put("ts", rs.getLong("TS")); |
| 203 | map.put("stopNo", rs.getString("STOP_NO")); | 224 | map.put("stopNo", rs.getString("STOP_NO")); |
| 204 | - map.put("inout_stop", rs.getInt("INOUT_STOP")); | 225 | + |
| 226 | + inOutStop = rs.getInt("INOUT_STOP"); | ||
| 227 | + map.put("inout_stop", inOutStop); | ||
| 228 | + | ||
| 229 | + if(inOutStop != -1){ | ||
| 230 | + map.put("inout_stop_info", | ||
| 231 | + arrivalMap.get(rs.getString("DEVICE_ID") + "_" + rs.getLong("TS") + "_" + inOutStop)); | ||
| 232 | + } | ||
| 205 | map.put("nbbm", CommonMapped.vehicDeviceBiMap.get(rs.getString("DEVICE_ID"))); | 233 | map.put("nbbm", CommonMapped.vehicDeviceBiMap.get(rs.getString("DEVICE_ID"))); |
| 206 | map.put("state", 0); | 234 | map.put("state", 0); |
| 207 | //上下行 | 235 | //上下行 |
| @@ -209,18 +237,42 @@ public class GpsDataServiceImpl implements GpsDataService{ | @@ -209,18 +237,42 @@ public class GpsDataServiceImpl implements GpsDataService{ | ||
| 209 | list.add(map); | 237 | list.add(map); |
| 210 | } | 238 | } |
| 211 | }catch(Exception e){ | 239 | }catch(Exception e){ |
| 212 | - e.printStackTrace(); | 240 | + logger.error("", e); |
| 213 | }finally { | 241 | }finally { |
| 214 | DBUtils_MS.close(rs, ps, conn); | 242 | DBUtils_MS.close(rs, ps, conn); |
| 215 | } | 243 | } |
| 216 | return list; | 244 | return list; |
| 217 | } | 245 | } |
| 218 | -/* | ||
| 219 | - public static void main(String[] args) { | ||
| 220 | - Calendar eCal = Calendar.getInstance(); | ||
| 221 | - eCal.setTime(new Date()); | 246 | + |
| 247 | + public Map<String, ArrivalInfo> findArrivalByTs(int weekOfYear, Long st, Long et, String devicesInSql){ | ||
| 248 | + Map<String, ArrivalInfo> map = new HashMap<>(); | ||
| 222 | 249 | ||
| 223 | - int dayOfYear = eCal.get(Calendar.DAY_OF_YEAR); | ||
| 224 | - System.out.println(dayOfYear); | ||
| 225 | - }*/ | 250 | + String sql = "SELECT DEVICE_ID,LINE_ID,STOP_NO,TS,UP_DOWN,IN_OUT,WEEKS_YEAR,CREATE_DATE FROM bsth_c_arrival_info where weeks_year=? and device_id in ("+devicesInSql+") and ts > ? and ts < ?"; |
| 251 | + try{ | ||
| 252 | + conn = DBUtils_MS.getConnection(); | ||
| 253 | + ps = conn.prepareStatement(sql); | ||
| 254 | + ps.setInt(1, weekOfYear); | ||
| 255 | + ps.setLong(2, st * 1000); | ||
| 256 | + ps.setLong(3, et * 1000); | ||
| 257 | + | ||
| 258 | + rs = ps.executeQuery(); | ||
| 259 | + ArrivalInfo arr; | ||
| 260 | + int inOut; | ||
| 261 | + while (rs.next()) { | ||
| 262 | + arr = new ArrivalInfo(rs.getString("DEVICE_ID"), rs.getLong("TS"), rs.getString("LINE_ID"), rs.getInt("UP_DOWN") | ||
| 263 | + , rs.getString("STOP_NO"), rs.getInt("IN_OUT"), rs.getDate("CREATE_DATE") , rs.getInt("WEEKS_YEAR") | ||
| 264 | + , CommonMapped.stationCodeMap.get(rs.getString("STOP_NO"))); | ||
| 265 | + | ||
| 266 | + //设备号_时间戳_进出状态 为key | ||
| 267 | + //反转进出状态 | ||
| 268 | + inOut = arr.getInOut() == 0?1:0; | ||
| 269 | + map.put(arr.getDeviceId() + "_" + arr.getTs() + "_" + inOut, arr); | ||
| 270 | + } | ||
| 271 | + }catch(Exception e){ | ||
| 272 | + logger.error("", e); | ||
| 273 | + }finally { | ||
| 274 | + DBUtils_MS.close(rs, ps, conn); | ||
| 275 | + } | ||
| 276 | + return map; | ||
| 277 | + } | ||
| 226 | } | 278 | } |
src/main/resources/static/pages/mapmonitor/real/css/real.css
| @@ -88,7 +88,7 @@ label.BMapLabel{ | @@ -88,7 +88,7 @@ label.BMapLabel{ | ||
| 88 | .mapRightWrap.to_playBack{ | 88 | .mapRightWrap.to_playBack{ |
| 89 | transform:rotateY(180deg); | 89 | transform:rotateY(180deg); |
| 90 | height: 476px; | 90 | height: 476px; |
| 91 | - width: 370px | 91 | + width: 390px |
| 92 | } | 92 | } |
| 93 | 93 | ||
| 94 | .mapRightWrap.to_playBack .alert{ | 94 | .mapRightWrap.to_playBack .alert{ |
| @@ -698,8 +698,8 @@ html{ | @@ -698,8 +698,8 @@ html{ | ||
| 698 | } | 698 | } |
| 699 | 699 | ||
| 700 | .play-back-btns .dropdown-menu{ | 700 | .play-back-btns .dropdown-menu{ |
| 701 | - min-width: 88px; | ||
| 702 | - width: 88px; | 701 | + min-width: 70px; |
| 702 | + width: 70px; | ||
| 703 | } | 703 | } |
| 704 | 704 | ||
| 705 | .play-back-btns>i.playBtn{ | 705 | .play-back-btns>i.playBtn{ |
| @@ -768,8 +768,9 @@ html{ | @@ -768,8 +768,9 @@ html{ | ||
| 768 | margin-right: 12px; | 768 | margin-right: 12px; |
| 769 | color: #565555; | 769 | color: #565555; |
| 770 | padding: 4px 8px 4px 13px; | 770 | padding: 4px 8px 4px 13px; |
| 771 | - border-radius: 5px !important; | ||
| 772 | cursor: pointer; | 771 | cursor: pointer; |
| 772 | + border-left: 1px solid #e1e5ec; | ||
| 773 | + border-right: 1px solid #e1e5ec; | ||
| 773 | } | 774 | } |
| 774 | 775 | ||
| 775 | #playSpeed .fa-angle-up{ | 776 | #playSpeed .fa-angle-up{ |
src/main/resources/static/pages/mapmonitor/real/js/map_platform.js
| @@ -48,6 +48,9 @@ var realMap = (function() { | @@ -48,6 +48,9 @@ var realMap = (function() { | ||
| 48 | //线路路由 | 48 | //线路路由 |
| 49 | var polylines; | 49 | var polylines; |
| 50 | 50 | ||
| 51 | + //百度 -轨迹回放点聚合 | ||
| 52 | + //var historyClusterer; | ||
| 53 | + | ||
| 51 | //设备号和marker对照 | 54 | //设备号和marker对照 |
| 52 | var markersMap; | 55 | var markersMap; |
| 53 | var real_map = { | 56 | var real_map = { |
| @@ -81,6 +84,7 @@ var realMap = (function() { | @@ -81,6 +84,7 @@ var realMap = (function() { | ||
| 81 | var ctrl = new BMapLib.TrafficControl(); | 84 | var ctrl = new BMapLib.TrafficControl(); |
| 82 | map.addControl(ctrl); | 85 | map.addControl(ctrl); |
| 83 | 86 | ||
| 87 | + //historyClusterer = new BMapLib.MarkerClusterer(map, {isAverangeCenter : true,minClusterSize : 2}) | ||
| 84 | var isVisible; | 88 | var isVisible; |
| 85 | trafficBtn.on('click', function() { | 89 | trafficBtn.on('click', function() { |
| 86 | if (isVisible) { | 90 | if (isVisible) { |
| @@ -167,13 +171,13 @@ var realMap = (function() { | @@ -167,13 +171,13 @@ var realMap = (function() { | ||
| 167 | 171 | ||
| 168 | local.search(val); | 172 | local.search(val); |
| 169 | }, | 173 | }, |
| 170 | - drawLine: function(lineCode){ | 174 | + drawLine: function(route){ |
| 171 | var map = currentMap.map; | 175 | var map = currentMap.map; |
| 172 | map.clearOverlays(); | 176 | map.clearOverlays(); |
| 173 | polylines = []; | 177 | polylines = []; |
| 174 | //画线路 | 178 | //画线路 |
| 175 | //从localStorage里读取路由信息 | 179 | //从localStorage里读取路由信息 |
| 176 | - var route = JSON.parse(storage.getItem(lineCode + '_route')); | 180 | + //var route = JSON.parse(storage.getItem(lineCode + '_route')); |
| 177 | var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5} | 181 | var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5} |
| 178 | ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5}; | 182 | ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5}; |
| 179 | 183 | ||
| @@ -251,14 +255,22 @@ var realMap = (function() { | @@ -251,14 +255,22 @@ var realMap = (function() { | ||
| 251 | }, | 255 | }, |
| 252 | //绘制轨迹回放 marker | 256 | //绘制轨迹回放 marker |
| 253 | addHistoryMarker: function(gps){ | 257 | addHistoryMarker: function(gps){ |
| 254 | - //var marker = new BMap.Marker(new BMap.Point(gps.bd_lon, gps.bd_lat)); | 258 | + |
| 255 | var marker = bdHistoryMarker(gps); | 259 | var marker = bdHistoryMarker(gps); |
| 256 | currentMap.map.addOverlay(marker); | 260 | currentMap.map.addOverlay(marker); |
| 261 | + | ||
| 262 | + //historyClusterer.addMarker(marker); | ||
| 257 | return marker; | 263 | return marker; |
| 258 | }, | 264 | }, |
| 259 | //移动marker | 265 | //移动marker |
| 260 | - moveMarker: function(marker , lon, lat){ | ||
| 261 | - marker.setPosition(new BMap.Point(lon, lat)); | 266 | + moveMarker: function(marker , gps){ |
| 267 | + marker.setPosition(new BMap.Point(gps.bd_lon, gps.bd_lat)); | ||
| 268 | + //重新设置颜色 | ||
| 269 | + marker.getLabel().setStyle({borderColor: bgColor(gps), backgroundColor: bgColor(gps)}); | ||
| 270 | + }, | ||
| 271 | + //居中marker | ||
| 272 | + markerToCenter: function(marker){ | ||
| 273 | + currentMap.map.panTo(marker.getPosition()); | ||
| 262 | } | 274 | } |
| 263 | }, | 275 | }, |
| 264 | //高德地图 | 276 | //高德地图 |
| @@ -378,12 +390,12 @@ var realMap = (function() { | @@ -378,12 +390,12 @@ var realMap = (function() { | ||
| 378 | placeSearch.search(val); | 390 | placeSearch.search(val); |
| 379 | }); | 391 | }); |
| 380 | }, | 392 | }, |
| 381 | - drawLine: function(lineCode){ | 393 | + drawLine: function(route){ |
| 382 | polylines = []; | 394 | polylines = []; |
| 383 | var map = currentMap.map; | 395 | var map = currentMap.map; |
| 384 | map.clearMap(); | 396 | map.clearMap(); |
| 385 | 397 | ||
| 386 | - var route = JSON.parse(storage.getItem(lineCode + '_route')); | 398 | + //var route = JSON.parse(storage.getItem(lineCode + '_route')); |
| 387 | var upArr = [], downArr = []; | 399 | var upArr = [], downArr = []; |
| 388 | 400 | ||
| 389 | var upLineOps = {path: upArr, strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5} | 401 | var upLineOps = {path: upArr, strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5} |
src/main/resources/static/pages/mapmonitor/real/js/playBack.js
| @@ -10,7 +10,6 @@ var playBack = (function() { | @@ -10,7 +10,6 @@ var playBack = (function() { | ||
| 10 | var sTime; | 10 | var sTime; |
| 11 | //结束时间戳 | 11 | //结束时间戳 |
| 12 | var eTime; | 12 | var eTime; |
| 13 | - //10秒一个进度 | ||
| 14 | var tRange; | 13 | var tRange; |
| 15 | //进度条宽度 | 14 | //进度条宽度 |
| 16 | var pWidth; | 15 | var pWidth; |
| @@ -28,9 +27,13 @@ var playBack = (function() { | @@ -28,9 +27,13 @@ var playBack = (function() { | ||
| 28 | var cIndex = 0; | 27 | var cIndex = 0; |
| 29 | var size; | 28 | var size; |
| 30 | //播放速度 | 29 | //播放速度 |
| 31 | - var speed = 1; | 30 | + var speed = parseInt($('#playSpeedText').text()); |
| 32 | //车辆编码和marker映射 | 31 | //车辆编码和marker映射 |
| 33 | var markerMap = {}; | 32 | var markerMap = {}; |
| 33 | + //线路路由数据 | ||
| 34 | + var lineRoute; | ||
| 35 | + //默认以第一辆车为焦点 | ||
| 36 | + var firstCar; | ||
| 34 | //S0I-058,S0I-055 ,隧道六线 | 37 | //S0I-058,S0I-055 ,隧道六线 |
| 35 | 38 | ||
| 36 | function getCurrMap(){ | 39 | function getCurrMap(){ |
| @@ -66,9 +69,16 @@ var playBack = (function() { | @@ -66,9 +69,16 @@ var playBack = (function() { | ||
| 66 | //退出 | 69 | //退出 |
| 67 | $('.play-back-close').on('click', function(){ | 70 | $('.play-back-close').on('click', function(){ |
| 68 | stop(); | 71 | stop(); |
| 72 | + //重置位置 | ||
| 69 | $pmk.css('width', '0px'); | 73 | $pmk.css('width', '0px'); |
| 70 | topW = 0; | 74 | topW = 0; |
| 71 | $presMark.css('left', '0px'); | 75 | $presMark.css('left', '0px'); |
| 76 | + //删掉marker映射 | ||
| 77 | + markerMap = {}; | ||
| 78 | + //清理地图 | ||
| 79 | + getCurrMap().clear(); | ||
| 80 | + //坐标归0 | ||
| 81 | + cIndex = 0; | ||
| 72 | //动画 | 82 | //动画 |
| 73 | $('.play-back-list').removeClass('fadeInRightBig').addClass('fadeOutRightBig'); | 83 | $('.play-back-list').removeClass('fadeInRightBig').addClass('fadeOutRightBig'); |
| 74 | $('.play-back-btns,.progress-wrap').removeClass('fadeInUpBig').addClass('fadeOutDownBig'); | 84 | $('.play-back-btns,.progress-wrap').removeClass('fadeInUpBig').addClass('fadeOutDownBig'); |
| @@ -85,24 +95,40 @@ var playBack = (function() { | @@ -85,24 +95,40 @@ var playBack = (function() { | ||
| 85 | var t = showMark($presMark, w); | 95 | var t = showMark($presMark, w); |
| 86 | //时间戳找gps | 96 | //时间戳找gps |
| 87 | var gps; | 97 | var gps; |
| 88 | - console.log('showMarkText', cIndex, t); | ||
| 89 | - | ||
| 90 | var marker; | 98 | var marker; |
| 91 | for(;cIndex < size; cIndex ++){ | 99 | for(;cIndex < size; cIndex ++){ |
| 92 | gps = gpsArray[cIndex]; | 100 | gps = gpsArray[cIndex]; |
| 93 | if(gps.ts <= t){ | 101 | if(gps.ts <= t){ |
| 94 | marker = markerMap[gps.nbbm]; | 102 | marker = markerMap[gps.nbbm]; |
| 95 | if(marker) | 103 | if(marker) |
| 96 | - getCurrMap().moveMarker(marker, gps.bd_lon, gps.bd_lat);//移动marker | 104 | + getCurrMap().moveMarker(marker, gps);//移动marker |
| 97 | else | 105 | else |
| 98 | - markerMap[gps.nbbm] = getCurrMap().addHistoryMarker(gps);//画出marker | 106 | + markerMap[gps.nbbm] = getCurrMap().addHistoryMarker(gps);//添加marker |
| 107 | + | ||
| 108 | + if(gps.inout_stop != -1){ | ||
| 109 | + //到离站信息 | ||
| 110 | + addInOutText(gps); | ||
| 111 | + } | ||
| 99 | } | 112 | } |
| 100 | else{ | 113 | else{ |
| 101 | break; | 114 | break; |
| 102 | } | 115 | } |
| 103 | } | 116 | } |
| 104 | - console.log('markerMap : ' , markerMap); | ||
| 105 | - //console.log(moment(t).format('YYYY-MM-DD HH:mm:ss')); | 117 | + //定位焦点 |
| 118 | + /*if(markerMap[firstCar]){ | ||
| 119 | + getCurrMap().markerToCenter(markerMap[firstCar]); | ||
| 120 | + }*/ | ||
| 121 | + } | ||
| 122 | + | ||
| 123 | + function addInOutText(gps){ | ||
| 124 | + var info = gps.inout_stop_info | ||
| 125 | + ,date = moment(gps.ts).format('HH:mm.ss'); | ||
| 126 | + var html = '<div class="pback-logs-item">'+ | ||
| 127 | + gps.nbbm + ' '+ (info.inOut==1?'出':'进') +'站 '+info.stopName+' '+ | ||
| 128 | + '<span class="pback-logs-item-date">'+ date +'</span>'+ | ||
| 129 | + '</div>'; | ||
| 130 | + | ||
| 131 | + $('.pback-logs').prepend(html); | ||
| 106 | } | 132 | } |
| 107 | 133 | ||
| 108 | //播放速度 | 134 | //播放速度 |
| @@ -146,23 +172,25 @@ var playBack = (function() { | @@ -146,23 +172,25 @@ var playBack = (function() { | ||
| 146 | $('.mapRightWrap').html(htmlStr); | 172 | $('.mapRightWrap').html(htmlStr); |
| 147 | //车辆搜索框 | 173 | //车辆搜索框 |
| 148 | createVehSearch($('.mapRightWrap select[name="nbbm[]"]')); | 174 | createVehSearch($('.mapRightWrap select[name="nbbm[]"]')); |
| 149 | - //线路选择框 | 175 | + //线路下拉框 |
| 176 | + var lineData = [{id:'-1', text: '请选择...'}]; | ||
| 150 | $get('/line/all', null, function(array){ | 177 | $get('/line/all', null, function(array){ |
| 151 | - console.log(array); | 178 | + $.each(array, function(){ |
| 179 | + lineData.push({id: this.id, text: this.name}); | ||
| 180 | + }); | ||
| 181 | + initPinYinSelect2('.mapRightWrap select[name=lineCode]', lineData); | ||
| 152 | }); | 182 | }); |
| 153 | 183 | ||
| 154 | //点击轨迹回放按钮 | 184 | //点击轨迹回放按钮 |
| 155 | $('#playBackBtn').on('click', function(){ | 185 | $('#playBackBtn').on('click', function(){ |
| 156 | var params = $('#playBackForm').serializeJSON(); | 186 | var params = $('#playBackForm').serializeJSON(); |
| 157 | - console.log(params); | ||
| 158 | //查询历史gps数据 | 187 | //查询历史gps数据 |
| 159 | var fs = 'YYYY-MM-DDHH:mm' | 188 | var fs = 'YYYY-MM-DDHH:mm' |
| 160 | ,st = moment(params.sDate + params.sTime, fs).format('X') | 189 | ,st = moment(params.sDate + params.sTime, fs).format('X') |
| 161 | ,et = moment(params.eDate + params.eTime, fs).format('X') | 190 | ,et = moment(params.eDate + params.eTime, fs).format('X') |
| 162 | ,nbbm = params.nbbm; | 191 | ,nbbm = params.nbbm; |
| 163 | 192 | ||
| 164 | - layer.msg('查询历史GPS...', {icon: 16, time: 0}); | ||
| 165 | - | 193 | + layer.msg('查询历史GPS...', {icon: 16, time: 0,shade:0.3}); |
| 166 | $.ajax({ | 194 | $.ajax({ |
| 167 | url: '/gps/gpsHistory/multiple', | 195 | url: '/gps/gpsHistory/multiple', |
| 168 | traditional: true, | 196 | traditional: true, |
| @@ -170,7 +198,7 @@ var playBack = (function() { | @@ -170,7 +198,7 @@ var playBack = (function() { | ||
| 170 | success:function(rs){ | 198 | success:function(rs){ |
| 171 | gpsArray = rs; | 199 | gpsArray = rs; |
| 172 | size = gpsArray.length; | 200 | size = gpsArray.length; |
| 173 | - layer.closeAll(); | 201 | + //layer.closeAll(); |
| 174 | //切出轨迹回放面板 | 202 | //切出轨迹回放面板 |
| 175 | $('.mapRightWrap,.mapTools,.leftUtilsWrap').fadeOut(); | 203 | $('.mapRightWrap,.mapTools,.leftUtilsWrap').fadeOut(); |
| 176 | $('.play-back-list,.play-back-btns,.progress-wrap').show(); | 204 | $('.play-back-list,.play-back-btns,.progress-wrap').show(); |
| @@ -182,18 +210,27 @@ var playBack = (function() { | @@ -182,18 +210,27 @@ var playBack = (function() { | ||
| 182 | //获取进度条宽度 | 210 | //获取进度条宽度 |
| 183 | pWidth = $('.progress-body').width(); | 211 | pWidth = $('.progress-body').width(); |
| 184 | cell = pWidth / tRange; | 212 | cell = pWidth / tRange; |
| 185 | - console.log('gpsArray', gpsArray); | ||
| 186 | //清理地图 | 213 | //清理地图 |
| 187 | getCurrMap().clear(); | 214 | getCurrMap().clear(); |
| 215 | + | ||
| 216 | + firstCar = params.nbbm[0]; | ||
| 217 | + layer.msg('加载线路图层数据...', {icon: 16, time: 0,shade:0.3}); | ||
| 218 | + $.get('/realSchedule/findRouteByLine', {lineId: $('.mapRightWrap select[name=lineCode]').val()} | ||
| 219 | + ,function(route){ | ||
| 220 | + lineRoute = route; | ||
| 221 | + getCurrMap().drawLine(lineRoute); | ||
| 222 | + //开始播放 | ||
| 223 | + play(); | ||
| 224 | + }); | ||
| 188 | } | 225 | } |
| 189 | }); | 226 | }); |
| 190 | }); | 227 | }); |
| 191 | 228 | ||
| 192 | //默认值 | 229 | //默认值 |
| 193 | $('input[name=sDate]').val('2016-04-24'); | 230 | $('input[name=sDate]').val('2016-04-24'); |
| 194 | - $('input[name=sTime]').val('03:10'); | 231 | + $('input[name=sTime]').val('04:00'); |
| 195 | $('input[name=eDate]').val('2016-04-24'); | 232 | $('input[name=eDate]').val('2016-04-24'); |
| 196 | - $('input[name=eTime]').val('03:50'); | 233 | + $('input[name=eTime]').val('04:40'); |
| 197 | } | 234 | } |
| 198 | }; | 235 | }; |
| 199 | 236 | ||
| @@ -204,11 +241,22 @@ var playBack = (function() { | @@ -204,11 +241,22 @@ var playBack = (function() { | ||
| 204 | } | 241 | } |
| 205 | 242 | ||
| 206 | function play(){ | 243 | function play(){ |
| 244 | + if(topW == pWidth){ | ||
| 245 | + //从头再来 | ||
| 246 | + reset(); | ||
| 247 | + } | ||
| 207 | $('#progress-mark-time').show(); | 248 | $('#progress-mark-time').show(); |
| 208 | $('.play-back-btns .playBtn').removeClass('fa-play').addClass('fa-pause').data('status', 1); | 249 | $('.play-back-btns .playBtn').removeClass('fa-play').addClass('fa-pause').data('status', 1); |
| 209 | start(); | 250 | start(); |
| 210 | } | 251 | } |
| 211 | 252 | ||
| 253 | + function reset(){ | ||
| 254 | + topW = 0; | ||
| 255 | + $pmk.css('width', topW + 'px'); | ||
| 256 | + cIndex = 0; | ||
| 257 | + $('.pback-logs').html(''); | ||
| 258 | + } | ||
| 259 | + | ||
| 212 | var topW = 0; | 260 | var topW = 0; |
| 213 | function start(){ | 261 | function start(){ |
| 214 | prgTimer = setTimeout(start, 1000); | 262 | prgTimer = setTimeout(start, 1000); |
| @@ -227,6 +275,8 @@ var playBack = (function() { | @@ -227,6 +275,8 @@ var playBack = (function() { | ||
| 227 | } | 275 | } |
| 228 | 276 | ||
| 229 | function goTo(w){ | 277 | function goTo(w){ |
| 278 | + $('.pback-logs').html(''); | ||
| 279 | + cIndex = 0; | ||
| 230 | stop(); | 280 | stop(); |
| 231 | topW = w; | 281 | topW = w; |
| 232 | showMarkText(w); | 282 | showMarkText(w); |
src/main/resources/static/pages/mapmonitor/real/js/vehicle.js
| @@ -47,7 +47,9 @@ var vehiclePanel = (function() { | @@ -47,7 +47,9 @@ var vehiclePanel = (function() { | ||
| 47 | setTimeout(function(){ | 47 | setTimeout(function(){ |
| 48 | //在地图上画出线路 | 48 | //在地图上画出线路 |
| 49 | var mapObj = getCurrMap(); | 49 | var mapObj = getCurrMap(); |
| 50 | - mapObj.drawLine(lineCode); | 50 | + //从storage里获取路由数据 |
| 51 | + var route = JSON.parse(storage.getItem(lineCode + '_route')); | ||
| 52 | + mapObj.drawLine(route); | ||
| 51 | //画GPS | 53 | //画GPS |
| 52 | mapObj.drawGpsMarker(showList); | 54 | mapObj.drawGpsMarker(showList); |
| 53 | }, 500); | 55 | }, 500); |
src/main/resources/static/pages/mapmonitor/real/real.html
| @@ -43,7 +43,7 @@ | @@ -43,7 +43,7 @@ | ||
| 43 | <!-- 轨迹回放面板 --> | 43 | <!-- 轨迹回放面板 --> |
| 44 | <div class="play-back-list animated fadeInRightBig"> | 44 | <div class="play-back-list animated fadeInRightBig"> |
| 45 | <div class="pback-logs"> | 45 | <div class="pback-logs"> |
| 46 | - <div class="pback-logs-item"> | 46 | + <!-- <div class="pback-logs-item"> |
| 47 | W2B-012 进站 金桥路浦东大道站 | 47 | W2B-012 进站 金桥路浦东大道站 |
| 48 | <span class="pback-logs-item-date">07月17 12:40</span> | 48 | <span class="pback-logs-item-date">07月17 12:40</span> |
| 49 | </div> | 49 | </div> |
| @@ -154,7 +154,7 @@ | @@ -154,7 +154,7 @@ | ||
| 154 | <div class="pback-logs-item"> | 154 | <div class="pback-logs-item"> |
| 155 | W2B-012 出站 金桥路浦东大道站 | 155 | W2B-012 出站 金桥路浦东大道站 |
| 156 | <span class="pback-logs-item-date">07月17 12:42</span> | 156 | <span class="pback-logs-item-date">07月17 12:42</span> |
| 157 | - </div> | 157 | + </div> --> |
| 158 | 158 | ||
| 159 | </div> | 159 | </div> |
| 160 | </div> | 160 | </div> |
| @@ -166,12 +166,12 @@ | @@ -166,12 +166,12 @@ | ||
| 166 | 166 | ||
| 167 | <div class="dropup" > | 167 | <div class="dropup" > |
| 168 | <span id="playSpeed" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> | 168 | <span id="playSpeed" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> |
| 169 | - <i class="fa fa-close"></i><span id="playSpeedText">1</span><i class="fa fa-angle-up" ></i> | 169 | + <i class="fa fa-close"></i><span id="playSpeedText">10</span><i class="fa fa-angle-up" ></i> |
| 170 | </span> | 170 | </span> |
| 171 | <ul class="dropdown-menu play-speed-select" > | 171 | <ul class="dropdown-menu play-speed-select" > |
| 172 | - <li data-speed=10><a href="javascript:;">10秒每帧 </a></li> | ||
| 173 | - <li data-speed=5><a href="javascript:;">5秒每帧 </a></li> | ||
| 174 | - <li data-speed=1><a href="javascript:;">1秒每帧</a></li> | 172 | + <li data-speed=10><a href="javascript:;">10秒 </a></li> |
| 173 | + <li data-speed=5><a href="javascript:;">5秒 </a></li> | ||
| 174 | + <li data-speed=1><a href="javascript:;">1秒</a></li> | ||
| 175 | </ul> | 175 | </ul> |
| 176 | </div> | 176 | </div> |
| 177 | 177 |
src/main/resources/static/pages/mapmonitor/real/temps/playBack.html
| 1 | - | ||
| 2 | <script id="play_back_panel_temp" type="text/html"> | 1 | <script id="play_back_panel_temp" type="text/html"> |
| 3 | <div class="alert alert-info animated flipInX"> | 2 | <div class="alert alert-info animated flipInX"> |
| 4 | -<i class="fa fa-exclamation-circle" ></i> 最多跨一天回放,请尽量小范围的查询 S0I-058,S0I-055 ,隧道六线 </div> | 3 | +<i class="fa fa-exclamation-circle" ></i> 最多跨一天回放,请尽量小范围的查询 W2B-083 , W2B-084 , W2B-087 85路</div> |
| 5 | <form class="form-horizontal" role="form" id="playBackForm"> | 4 | <form class="form-horizontal" role="form" id="playBackForm"> |
| 6 | <div class="form-body"> | 5 | <div class="form-body"> |
| 7 | <div class="form-group"> | 6 | <div class="form-group"> |
| @@ -31,9 +30,7 @@ | @@ -31,9 +30,7 @@ | ||
| 31 | <div class="form-group"> | 30 | <div class="form-group"> |
| 32 | <label class="col-md-3 control-label">线路图层</label> | 31 | <label class="col-md-3 control-label">线路图层</label> |
| 33 | <div class="col-md-9"> | 32 | <div class="col-md-9"> |
| 34 | - <select class="form-control" name="lineCode" > | ||
| 35 | - <option>85路</option> | ||
| 36 | - </select> | 33 | + <select class="form-control" name="lineCode" ></select> |
| 37 | </div> | 34 | </div> |
| 38 | </div> | 35 | </div> |
| 39 | </form> | 36 | </form> |