Commit 51d73d3b03c5854ca28511d718493e6950c0ac2e

Authored by 王通
1 parent 52eb029a

1.解决报站语音生成在centos7下异常问题

2.百度地图商用key替换
3.js压缩兼容es6
@@ -419,10 +419,23 @@ @@ -419,10 +419,23 @@
419 <version>1.5.3</version> 419 <version>1.5.3</version>
420 </dependency> 420 </dependency>
421 421
  422 + <!-- 核心依赖 -->
422 <dependency> 423 <dependency>
423 <groupId>org.bytedeco</groupId> 424 <groupId>org.bytedeco</groupId>
424 - <artifactId>javacv-platform</artifactId>  
425 - <version>1.5.11</version> 425 + <artifactId>javacv</artifactId>
  426 + <version>1.5.5</version>
  427 + </dependency>
  428 + <dependency>
  429 + <groupId>org.bytedeco</groupId>
  430 + <artifactId>javacpp</artifactId>
  431 + <version>1.5.5</version>
  432 + </dependency>
  433 + <!-- Linux x86_64平台特定的FFmpeg依赖 -->
  434 + <dependency>
  435 + <groupId>org.bytedeco</groupId>
  436 + <artifactId>ffmpeg</artifactId>
  437 + <version>4.3.2-1.5.5</version>
  438 + <classifier>${javacpp.platform}</classifier>
426 </dependency> 439 </dependency>
427 </dependencies> 440 </dependencies>
428 441
@@ -496,6 +509,7 @@ @@ -496,6 +509,7 @@
496 509
497 <properties> 510 <properties>
498 <start-class>com.bsth.Application</start-class> 511 <start-class>com.bsth.Application</start-class>
  512 + <!-- 平台配置,只打包Linux x86_64平台的jar包 -->
499 <javacpp.platform>linux-x86_64</javacpp.platform> 513 <javacpp.platform>linux-x86_64</javacpp.platform>
500 </properties> 514 </properties>
501 </project> 515 </project>
src/main/java/com/bsth/service/impl/StationRouteServiceImpl.java
@@ -8,7 +8,6 @@ import com.bsth.service.StationRouteService; @@ -8,7 +8,6 @@ import com.bsth.service.StationRouteService;
8 import com.bsth.util.*; 8 import com.bsth.util.*;
9 import com.bsth.util.Geo.GeoUtils; 9 import com.bsth.util.Geo.GeoUtils;
10 import com.bsth.util.Geo.Point; 10 import com.bsth.util.Geo.Point;
11 -import com.bsth.util.PackTarGZUtils;  
12 import com.bsth.util.db.DBUtils_MS; 11 import com.bsth.util.db.DBUtils_MS;
13 import com.google.common.base.Splitter; 12 import com.google.common.base.Splitter;
14 import org.apache.commons.lang3.StringUtils; 13 import org.apache.commons.lang3.StringUtils;
@@ -27,19 +26,19 @@ import java.util.zip.ZipEntry; @@ -27,19 +26,19 @@ import java.util.zip.ZipEntry;
27 import java.util.zip.ZipOutputStream; 26 import java.util.zip.ZipOutputStream;
28 27
29 /** 28 /**
30 - * 29 + *
31 * @ClassName: StationRouteServiceImpl(站点路由service业务层实现类) 30 * @ClassName: StationRouteServiceImpl(站点路由service业务层实现类)
32 - * 31 + *
33 * @Extends : BaseService 32 * @Extends : BaseService
34 - * 33 + *
35 * @Description: TODO(站点路由service业务层) 34 * @Description: TODO(站点路由service业务层)
36 - * 35 + *
37 * @Author bsth@lq 36 * @Author bsth@lq
38 - * 37 + *
39 * @Date 2016年5月03日 上午9:21:17 38 * @Date 2016年5月03日 上午9:21:17
40 * 39 *
41 * @Version 公交调度系统BS版 0.1 40 * @Version 公交调度系统BS版 0.1
42 - * 41 + *
43 */ 42 */
44 43
45 @Service 44 @Service
@@ -50,16 +49,16 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -50,16 +49,16 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
50 49
51 @Value("${path.speech.line}") 50 @Value("${path.speech.line}")
52 private String linePathPattern; 51 private String linePathPattern;
53 - 52 +
54 @Autowired 53 @Autowired
55 private StationRouteRepository stationRouteRepository; 54 private StationRouteRepository stationRouteRepository;
56 - 55 +
57 @Autowired 56 @Autowired
58 private SectionRouteRepository sectionRouteRepository; 57 private SectionRouteRepository sectionRouteRepository;
59 - 58 +
60 @Autowired 59 @Autowired
61 private LineRepository lineRepository; 60 private LineRepository lineRepository;
62 - 61 +
63 @Autowired 62 @Autowired
64 private StationRepository stationRepository; 63 private StationRepository stationRepository;
65 64
@@ -72,6 +71,11 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -72,6 +71,11 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
72 @Autowired 71 @Autowired
73 private LsSectionRouteRepository lsSectionRouteRepository; 72 private LsSectionRouteRepository lsSectionRouteRepository;
74 73
  74 + @Autowired
  75 + private LineRegionRepository lineRegionRepository;
  76 + @Autowired
  77 + private LineVersionsRepository lineVersionsRepository;
  78 +
75 @Override 79 @Override
76 public Iterable<StationRoute> list(Map<String, Object> map) { 80 public Iterable<StationRoute> list(Map<String, Object> map) {
77 List<Sort.Order> orders = new ArrayList<>(); 81 List<Sort.Order> orders = new ArrayList<>();
@@ -80,7 +84,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -80,7 +84,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
80 84
81 return stationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(orders)); 85 return stationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(orders));
82 } 86 }
83 - 87 +
84 @Override 88 @Override
85 public Map<String, Object> getSectionRouteExport(Integer id, HttpServletResponse resp) { 89 public Map<String, Object> getSectionRouteExport(Integer id, HttpServletResponse resp) {
86 Map<String, Object> resultMap = new HashMap<String, Object>(); 90 Map<String, Object> resultMap = new HashMap<String, Object>();
@@ -132,12 +136,12 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -132,12 +136,12 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
132 } 136 }
133 return resultMap; 137 return resultMap;
134 } 138 }
135 - 139 +
136 /** 140 /**
137 * @Description :TODO(查询树站点与路段数据) 141 * @Description :TODO(查询树站点与路段数据)
138 - * 142 + *
139 * @param map <line.id_eq:线路ID; directions_eq:方向> 143 * @param map <line.id_eq:线路ID; directions_eq:方向>
140 - * 144 + *
141 * @return List<Map<String, Object>> 145 * @return List<Map<String, Object>>
142 */ 146 */
143 @Override 147 @Override
@@ -151,26 +155,26 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -151,26 +155,26 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
151 155
152 return result; 156 return result;
153 } 157 }
154 - 158 +
155 @Override 159 @Override
156 public Map<String, Object> systemQuote(Map<String, Object> map) { 160 public Map<String, Object> systemQuote(Map<String, Object> map) {
157 Map<String, Object> resultmap = new HashMap<>(); 161 Map<String, Object> resultmap = new HashMap<>();
158 try{ 162 try{
159 - 163 +
160 StationRoute route = new StationRoute(); 164 StationRoute route = new StationRoute();
161 - 165 +
162 Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString()); 166 Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
163 - 167 +
164 Integer stationId = map.get("stationId").equals("") ? null : Integer.parseInt(map.get("stationId").toString()); 168 Integer stationId = map.get("stationId").equals("") ? null : Integer.parseInt(map.get("stationId").toString());
165 - 169 +
166 Line line = lineRepository.findById(lineId).get(); 170 Line line = lineRepository.findById(lineId).get();
167 - 171 +
168 Station station = stationRepository.findById(stationId).get(); 172 Station station = stationRepository.findById(stationId).get();
169 - 173 +
170 route.setLine(line); 174 route.setLine(line);
171 - 175 +
172 route.setStation(station); 176 route.setStation(station);
173 - 177 +
174 //baseRepository.save(t); 178 //baseRepository.save(t);
175 resultmap.put("status", ResponseCode.SUCCESS); 179 resultmap.put("status", ResponseCode.SUCCESS);
176 }catch(Exception e){ 180 }catch(Exception e){
@@ -179,13 +183,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -179,13 +183,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
179 } 183 }
180 return resultmap; 184 return resultmap;
181 } 185 }
182 - 186 +
183 /** 187 /**
184 * @Description :TODO(查询线路某方向下的站点序号与类型) 188 * @Description :TODO(查询线路某方向下的站点序号与类型)
185 - * 189 + *
186 * @param map <lineId:线路ID; direction:方向;stationRouteCode:站点编码> 190 * @param map <lineId:线路ID; direction:方向;stationRouteCode:站点编码>
187 - *  
188 - * @return List<Map<String, Object>> 191 + *
  192 + * @return List<Map<String, Object>>
189 */ 193 */
190 @Override 194 @Override
191 public List<Map<String, Object>> findUpStationRouteCode(Map<String, Object> map) { 195 public List<Map<String, Object>> findUpStationRouteCode(Map<String, Object> map) {
@@ -300,40 +304,40 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -300,40 +304,40 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
300 304
301 /** 305 /**
302 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标) 306 * @Description :TODO(查询线路某方向下所有站点的中心百度坐标)
303 - * 307 + *
304 * @param map <lineId:线路ID; direction:方向> 308 * @param map <lineId:线路ID; direction:方向>
305 - *  
306 - * @return List<Map<String, Object>> 309 + *
  310 + * @return List<Map<String, Object>>
307 */ 311 */
308 @Override 312 @Override
309 public List<Map<String, Object>> getStationRouteCenterPoints(Map<String, Object> map) { 313 public List<Map<String, Object>> getStationRouteCenterPoints(Map<String, Object> map) {
310 - 314 +
311 List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>(); 315 List<Map<String, Object>> resultList = new ArrayList<Map<String,Object>>();
312 - 316 +
313 // 线路ID 317 // 线路ID
314 Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString()); 318 Integer lineId = map.get("lineId").equals("") ? null : Integer.parseInt(map.get("lineId").toString());
315 - 319 +
316 // 方向 320 // 方向
317 Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString()); 321 Integer direction = map.get("direction").equals("") ? null : Integer.parseInt(map.get("direction").toString());
318 - 322 +
319 List<Object[]> list = stationRouteRepository.getSelectStationRouteCenterPoints(lineId, direction); 323 List<Object[]> list = stationRouteRepository.getSelectStationRouteCenterPoints(lineId, direction);
320 - 324 +
321 if(list.size()>0) { 325 if(list.size()>0) {
322 - 326 +
323 for(int i = 0;i<list.size();i++) { 327 for(int i = 0;i<list.size();i++) {
324 - 328 +
325 Map<String, Object> tempM = new HashMap<String,Object>(); 329 Map<String, Object> tempM = new HashMap<String,Object>();
326 - 330 +
327 tempM.put("bJwpoints", list.get(i)[0]); 331 tempM.put("bJwpoints", list.get(i)[0]);
328 - 332 +
329 tempM.put("stationName", list.get(i)[1]); 333 tempM.put("stationName", list.get(i)[1]);
330 - 334 +
331 resultList.add(tempM); 335 resultList.add(tempM);
332 - 336 +
333 } 337 }
334 - 338 +
335 } 339 }
336 - 340 +
337 return resultList; 341 return resultList;
338 } 342 }
339 343
@@ -351,7 +355,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -351,7 +355,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
351 } 355 }
352 map.put("destroy_eq", 0); 356 map.put("destroy_eq", 0);
353 List<LsStationRoute> stationRoutes = lsStationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "stationRouteCode")); 357 List<LsStationRoute> stationRoutes = lsStationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Direction.ASC, "stationRouteCode"));
354 - 358 +
355 List<Map<String, Object>> resultList = new ArrayList<>(); 359 List<Map<String, Object>> resultList = new ArrayList<>();
356 360
357 int len = stationRoutes.size(); 361 int len = stationRoutes.size();
@@ -362,44 +366,44 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -362,44 +366,44 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
362 } 366 }
363 return resultList; 367 return resultList;
364 } 368 }
365 - 369 +
366 /** 370 /**
367 * @Description :TODO(撤销站点) 371 * @Description :TODO(撤销站点)
368 - * 372 + *
369 * @param map <lineId:线路ID; destroy:是否撤销(0:否;1:是)> 373 * @param map <lineId:线路ID; destroy:是否撤销(0:否;1:是)>
370 - * 374 + *
371 * @return Map<String, Object> <SUCCESS ; ERROR> 375 * @return Map<String, Object> <SUCCESS ; ERROR>
372 */ 376 */
373 @Override 377 @Override
374 public Map<String, Object> stationRouteIsDestroy(Map<String, Object> map) { 378 public Map<String, Object> stationRouteIsDestroy(Map<String, Object> map) {
375 Map<String, Object> resultMap = new HashMap<String,Object>(); 379 Map<String, Object> resultMap = new HashMap<String,Object>();
376 - 380 +
377 try { 381 try {
378 - 382 +
379 Integer stationRouteId = map.get("stationRouteId").equals("") ? 0 : Integer.parseInt(map.get("stationRouteId").toString()); 383 Integer stationRouteId = map.get("stationRouteId").equals("") ? 0 : Integer.parseInt(map.get("stationRouteId").toString());
380 - 384 +
381 Integer destroy = map.get("destroy").equals("") ? 0 : Integer.parseInt(map.get("destroy").toString()); 385 Integer destroy = map.get("destroy").equals("") ? 0 : Integer.parseInt(map.get("destroy").toString());
382 386
383 lsStationRouteRepository.deleteById(stationRouteId); 387 lsStationRouteRepository.deleteById(stationRouteId);
384 388
385 resultMap.put("status", ResponseCode.SUCCESS); 389 resultMap.put("status", ResponseCode.SUCCESS);
386 - 390 +
387 } catch (Exception e) { 391 } catch (Exception e) {
388 - 392 +
389 resultMap.put("status", ResponseCode.ERROR); 393 resultMap.put("status", ResponseCode.ERROR);
390 - 394 +
391 logger.error("save erro.", e); 395 logger.error("save erro.", e);
392 - 396 +
393 } 397 }
394 - 398 +
395 return resultMap; 399 return resultMap;
396 } 400 }
397 - 401 +
398 /** 402 /**
399 * @Description : TODO(根据线路ID生成行单) 403 * @Description : TODO(根据线路ID生成行单)
400 - * 404 + *
401 * @param map <lineId:线路ID> 405 * @param map <lineId:线路ID>
402 - * 406 + *
403 * @return Map<String, Object> <SUCCESS ; ERROR ; NOTDATA> 407 * @return Map<String, Object> <SUCCESS ; ERROR ; NOTDATA>
404 */ 408 */
405 @Override 409 @Override
@@ -409,10 +413,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -409,10 +413,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
409 try { 413 try {
410 // 获取线路ID 414 // 获取线路ID
411 Integer lineId = map.get("lineId").equals("") ? 0 : Integer.parseInt(map.get("lineId").toString()); 415 Integer lineId = map.get("lineId").equals("") ? 0 : Integer.parseInt(map.get("lineId").toString());
  416 + Integer version = lineVersionsRepository.findCurrentVersion(lineId);
  417 + Map<String, Object> param = new HashMap<>();
  418 + param.put("line_eq", lineId);
  419 + param.put("version_eq", version);
412 /** 查询线路信息 @param:<lineId:线路ID> */ 420 /** 查询线路信息 @param:<lineId:线路ID> */
413 Line line = lineRepository.findById(lineId).get(); 421 Line line = lineRepository.findById(lineId).get();
414 422
415 -  
416 Business company = businessRepository.findByBusinessCode(line.getCompany()).get(0); 423 Business company = businessRepository.findByBusinessCode(line.getCompany()).get(0);
417 424
418 Integer fileVersions = lineRepository.findfileVersions(lineId); 425 Integer fileVersions = lineRepository.findfileVersions(lineId);
@@ -426,13 +433,15 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -426,13 +433,15 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
426 // Integer fileVersions = map.get("fileVersions").equals("") ? 1 : Integer.parseInt(map.get("fileVersions").toString());// 没有输入就默认1 433 // Integer fileVersions = map.get("fileVersions").equals("") ? 1 : Integer.parseInt(map.get("fileVersions").toString());// 没有输入就默认1
427 /** 查询线路信息下的站点路由信息 @param:<lineId:线路ID> */ 434 /** 查询线路信息下的站点路由信息 @param:<lineId:线路ID> */
428 List<Object[]> objects = stationRouteRepository.usingSingle(lineId); 435 List<Object[]> objects = stationRouteRepository.usingSingle(lineId);
  436 + List<LineRegion> lineRegions = lineRegionRepository.findAll(new CustomerSpecs<>(param));
429 if (objects.size()>0) { 437 if (objects.size()>0) {
430 -// // 报站音频  
431 -// Set<String> languages = new HashSet<>();  
432 -// languages.add("cn");  
433 -// languages.add("sh");  
434 -// languages.add("en");  
435 -// InputStream tts = ttsAndZip(objects, line, languages); 438 + // 报站音频
  439 + Set<String> languages = new HashSet<>();
  440 + languages.add("cn");
  441 + languages.add("sh");
  442 + languages.add("en");
  443 + ttsAndZip(objects, line, languages, lineRegions);
  444 +
436 /** 获取配置文件里的ftp登录参数 */ 445 /** 获取配置文件里的ftp登录参数 */
437 Map<String, Object> FTPParamMap = readPropertiesGetFTPParam(); 446 Map<String, Object> FTPParamMap = readPropertiesGetFTPParam();
438 // 压缩文件名 447 // 压缩文件名
@@ -497,12 +506,25 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -497,12 +506,25 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
497 506
498 input = new ByteArrayInputStream(textStr.getBytes("gbk")); 507 input = new ByteArrayInputStream(textStr.getBytes("gbk"));
499 508
  509 + // 线路文件上传(全程)
500 clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", textFileName, input); 510 clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", textFileName, input);
501 -  
502 -// textFile.delete();  
503 -  
504 -// clientUtils.deleteFtpFile(url, port, username, password, remotePath + "/voice/", String.format("%s.zip", line.getLineCode()));  
505 -// clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", String.format("%s.zip", line.getLineCode()), tts); 511 + String linePath = String.format(linePathPattern, lineId), voicePath = String.format("%s%s.zip", linePath, lineId);
  512 + // 报站文件上传(全程)
  513 + clientUtils.deleteFtpFile(url, port, username, password, remotePath + "/voice/", String.format("%s.zip", line.getLineCode()));
  514 + clientUtils.FTPUpLoadFromDisk(new File(voicePath), String.format("%s.zip", line.getLineCode()), url, port, username, password, remotePath + "/voice/");
  515 +
  516 + // 线路区间
  517 + if (lineRegions.size() > 0) {
  518 + FTPClientUtils.deleteFileByPrefix(String.format("%s-", line.getLineCode()), url, port, username, password, String.format("%s/voice/", remotePath));
  519 + for (LineRegion lineRegion : lineRegions) {
  520 + voicePath = String.format("%s%s-%d.zip", linePath, lineId, lineRegion.getSeq());
  521 + textStr = String.format("%s\r\n%s", head, subLine2Ftp(lineRegion));
  522 + input = new ByteArrayInputStream(textStr.getBytes("gbk"));
  523 + clientUtils.uploadFile(url, port, username, password, remotePath + "/voice/", String.format("%s-%d.txt", line.getLineCode(), lineRegion.getSeq()), input);
  524 + clientUtils.deleteFtpFile(url, port, username, password, remotePath + "/voice/", String.format("%s-%d.zip", line.getLineCode(), lineRegion.getSeq()));
  525 + clientUtils.FTPUpLoadFromDisk(new File(voicePath), String.format("%s-%d.zip", line.getLineCode(), lineRegion.getSeq()), url, port, username, password, remotePath + "/voice/");
  526 + }
  527 + }
506 528
507 resultMap.put("status", ResponseCode.SUCCESS); 529 resultMap.put("status", ResponseCode.SUCCESS);
508 }else { 530 }else {
@@ -515,22 +537,22 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -515,22 +537,22 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
515 return resultMap; 537 return resultMap;
516 } 538 }
517 } 539 }
518 - 540 +
519 /** 541 /**
520 * @Description : TODO(形成行单文件内容) 542 * @Description : TODO(形成行单文件内容)
521 - * 543 + *
522 * @param objects :站点路由信息 544 * @param objects :站点路由信息
523 - * 545 + *
524 * {[0]:g_lonx(GPS经度);[1]:g_laty(GPS纬度);[2]:b_jwpoints(百度经纬度坐标) 546 * {[0]:g_lonx(GPS经度);[1]:g_laty(GPS纬度);[2]:b_jwpoints(百度经纬度坐标)
525 - * 547 + *
526 * [3]:station_mark(站点类型);[4]:station_route_code(站点序号);[5]:station_cod(站点编码); 548 * [3]:station_mark(站点类型);[4]:station_route_code(站点序号);[5]:station_cod(站点编码);
527 - * 549 + *
528 * [6]:distances(站点距离);[7]:station_name(站点名称);[8]:directions(方向)} 550 * [6]:distances(站点距离);[7]:station_name(站点名称);[8]:directions(方向)}
529 - * 551 + *
530 * @param lineId :线路ID 552 * @param lineId :线路ID
531 - * 553 + *
532 * @return String 554 * @return String
533 - */ 555 + */
534 public String newTextFileToFTP(List<Object[]> objects,Integer lineId) { 556 public String newTextFileToFTP(List<Object[]> objects,Integer lineId) {
535 557
536 // 返回值String 558 // 返回值String
@@ -545,34 +567,34 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -545,34 +567,34 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
545 defaultZdxh ++ ; 567 defaultZdxh ++ ;
546 // 经度 568 // 经度
547 String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString(); 569 String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();
548 - 570 +
549 // 纬度 571 // 纬度
550 String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString(); 572 String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();
551 - 573 +
552 Point point = new Point(Double.valueOf(lng), Double.valueOf(lat)); 574 Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));
553 - 575 +
554 lat = "\t" + lat; 576 lat = "\t" + lat;
555 - 577 +
556 // 站点类型 578 // 站点类型
557 String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString(); 579 String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();
558 - 580 +
559 String stationMake = ""; 581 String stationMake = "";
560 - 582 +
561 if(stationMakeStr.equals("E")) { 583 if(stationMakeStr.equals("E")) {
562 stationMake = "\t2"; 584 stationMake = "\t2";
563 }else { 585 }else {
564 stationMake ="\t1"; 586 stationMake ="\t1";
565 } 587 }
566 -  
567 - // 站点序号 588 +
  589 + // 站点序号
568 // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString(); 590 // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();
569 String stationNo = String.valueOf(defaultZdxh); 591 String stationNo = String.valueOf(defaultZdxh);
570 - 592 +
571 stationNo = "\t" + stationNo; 593 stationNo = "\t" + stationNo;
572 - 594 +
573 // 站点编码 595 // 站点编码
574 String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString(); 596 String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();
575 - 597 +
576 int len = stationCode.length(); 598 int len = stationCode.length();
577 if(len<8) { 599 if(len<8) {
578 int dx = 8 - len; 600 int dx = 8 - len;
@@ -584,24 +606,24 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -584,24 +606,24 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
584 }else if(len>8){ 606 }else if(len>8){
585 stationCode = stationCode.substring(8); 607 stationCode = stationCode.substring(8);
586 } 608 }
587 - 609 +
588 stationCode = "\t" +stationCode; 610 stationCode = "\t" +stationCode;
589 - 611 +
590 double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000; 612 double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;
591 - 613 +
592 String tempDistc = String.valueOf((int) dis); 614 String tempDistc = String.valueOf((int) dis);
593 - 615 +
594 // 站点距离 616 // 站点距离
595 String staitondistance = "\t" + tempDistc; 617 String staitondistance = "\t" + tempDistc;
596 - 618 +
597 // 站点名称 619 // 站点名称
598 String stationName = objects.get(i)[7].equals("") ? "" : objects.get(i)[7].toString(); 620 String stationName = objects.get(i)[7].equals("") ? "" : objects.get(i)[7].toString();
599 - 621 +
600 stationName = "\t" +stationName; 622 stationName = "\t" +stationName;
601 - 623 +
602 // 限速 624 // 限速
603 // String sleepStr = " " + "60"; 625 // String sleepStr = " " + "60";
604 - 626 +
605 // 限速 627 // 限速
606 String sleepStr = ""; 628 String sleepStr = "";
607 // 方向 629 // 方向
@@ -631,16 +653,16 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -631,16 +653,16 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
631 } 653 }
632 } 654 }
633 } 655 }
634 - if(sleepStr.equals("")) 656 + if(sleepStr.equals(""))
635 sleepStr = "\t" + "60"; 657 sleepStr = "\t" + "60";
636 stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr; 658 stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr;
637 } 659 }
638 - 660 +
639 } 661 }
640 return stationRStr; 662 return stationRStr;
641 - 663 +
642 } 664 }
643 - 665 +
644 public String newTextVoiceFileToFTP(List<Object[]> objects,Integer lineId) { 666 public String newTextVoiceFileToFTP(List<Object[]> objects,Integer lineId) {
645 667
646 // 返回值String 668 // 返回值String
@@ -655,34 +677,34 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -655,34 +677,34 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
655 defaultZdxh ++ ; 677 defaultZdxh ++ ;
656 // 经度 678 // 经度
657 String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString(); 679 String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();
658 - 680 +
659 // 纬度 681 // 纬度
660 String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString(); 682 String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();
661 - 683 +
662 Point point = new Point(Double.valueOf(lng), Double.valueOf(lat)); 684 Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));
663 - 685 +
664 lat = "\t" + lat; 686 lat = "\t" + lat;
665 - 687 +
666 // 站点类型 688 // 站点类型
667 String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString(); 689 String stationMakeStr = objects.get(i)[3].equals("") ? "" : objects.get(i)[3].toString();
668 - 690 +
669 String stationMake = ""; 691 String stationMake = "";
670 - 692 +
671 if(stationMakeStr.equals("E")) { 693 if(stationMakeStr.equals("E")) {
672 stationMake = "\t2"; 694 stationMake = "\t2";
673 }else { 695 }else {
674 stationMake ="\t1"; 696 stationMake ="\t1";
675 } 697 }
676 -  
677 - // 站点序号 698 +
  699 + // 站点序号
678 // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString(); 700 // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();
679 String stationNo = String.valueOf(defaultZdxh); 701 String stationNo = String.valueOf(defaultZdxh);
680 - 702 +
681 stationNo = "\t" + stationNo; 703 stationNo = "\t" + stationNo;
682 - 704 +
683 // 站点编码 705 // 站点编码
684 String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString(); 706 String stationCode = objects.get(i)[5].equals("") ? "" : objects.get(i)[5].toString();
685 - 707 +
686 int len = stationCode.length(); 708 int len = stationCode.length();
687 if(len<8) { 709 if(len<8) {
688 int dx = 8 - len; 710 int dx = 8 - len;
@@ -694,31 +716,31 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -694,31 +716,31 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
694 }else if(len>8){ 716 }else if(len>8){
695 stationCode = stationCode.substring(8); 717 stationCode = stationCode.substring(8);
696 } 718 }
697 - 719 +
698 stationCode = "\t" +stationCode; 720 stationCode = "\t" +stationCode;
699 - 721 +
700 double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000; 722 double dis = objects.get(i)[6]==null ? 0.0 : Double.parseDouble(objects.get(i)[6].toString())*1000;
701 - 723 +
702 String tempDistc = String.valueOf((int) dis); 724 String tempDistc = String.valueOf((int) dis);
703 - 725 +
704 // 站点距离 726 // 站点距离
705 String staitondistance = "\t" + tempDistc; 727 String staitondistance = "\t" + tempDistc;
706 - 728 +
707 // 站点名称 729 // 站点名称
708 String stationName = objects.get(i)[7].equals("") ? " " : objects.get(i)[7].toString(); 730 String stationName = objects.get(i)[7].equals("") ? " " : objects.get(i)[7].toString();
709 - 731 +
710 String stationNameEn = " "; 732 String stationNameEn = " ";
711 if(objects.get(i)[9] != null){ 733 if(objects.get(i)[9] != null){
712 stationNameEn = objects.get(i)[9].equals("") ? " " : objects.get(i)[9].toString(); 734 stationNameEn = objects.get(i)[9].equals("") ? " " : objects.get(i)[9].toString();
713 } 735 }
714 -  
715 - 736 +
  737 +
716 stationName = "\t" +stationName; 738 stationName = "\t" +stationName;
717 stationNameEn = "\t" +stationNameEn; 739 stationNameEn = "\t" +stationNameEn;
718 - 740 +
719 // 限速 741 // 限速
720 // String sleepStr = " " + "60"; 742 // String sleepStr = " " + "60";
721 - 743 +
722 // 限速 744 // 限速
723 String sleepStr = ""; 745 String sleepStr = "";
724 // 方向 746 // 方向
@@ -751,16 +773,16 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -751,16 +773,16 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
751 } 773 }
752 } 774 }
753 } 775 }
754 - if(sleepStr.equals("")) 776 + if(sleepStr.equals(""))
755 sleepStr = "\t" + "60"; 777 sleepStr = "\t" + "60";
756 stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + stationNameEn + enterStr; 778 stationRStr = stationRStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + stationNameEn + enterStr;
757 } 779 }
758 - 780 +
759 } 781 }
760 return stationRStr; 782 return stationRStr;
761 - 783 +
762 } 784 }
763 - 785 +
764 public String hxTextFileToFtp(List<Object[]> objects,Integer lineId) { 786 public String hxTextFileToFtp(List<Object[]> objects,Integer lineId) {
765 String restStr = ""; 787 String restStr = "";
766 // windows下的文本文件换行符 788 // windows下的文本文件换行符
@@ -773,10 +795,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -773,10 +795,10 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
773 if(Integer.valueOf(objects.get(i)[8].toString())==0) { 795 if(Integer.valueOf(objects.get(i)[8].toString())==0) {
774 // 经度 796 // 经度
775 String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString(); 797 String lng = objects.get(i)[0].equals("") ? "0" : objects.get(i)[0].toString();
776 - 798 +
777 // 纬度 799 // 纬度
778 String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString(); 800 String lat = objects.get(i)[1].equals("") ? "0" : objects.get(i)[1].toString();
779 - 801 +
780 Point point = new Point(Double.valueOf(lng), Double.valueOf(lat)); 802 Point point = new Point(Double.valueOf(lng), Double.valueOf(lat));
781 lat = "\t" + lat; 803 lat = "\t" + lat;
782 // 站点类型 804 // 站点类型
@@ -787,7 +809,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -787,7 +809,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
787 }else { 809 }else {
788 stationMake ="\t1"; 810 stationMake ="\t1";
789 } 811 }
790 - // 站点序号 812 + // 站点序号
791 // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString(); 813 // String stationNo = objects.get(i)[4].equals("") ? "" : objects.get(i)[4].toString();
792 String stationNo = "\t" + xh; 814 String stationNo = "\t" + xh;
793 // 站点编码 815 // 站点编码
@@ -843,7 +865,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -843,7 +865,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
843 } 865 }
844 } 866 }
845 } 867 }
846 - if(sleepStr.equals("")) 868 + if(sleepStr.equals(""))
847 sleepStr = "\t" + "60"; 869 sleepStr = "\t" + "60";
848 xh++; 870 xh++;
849 restStr = restStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr; 871 restStr = restStr + lng + lat + stationMake + stationNo + stationCode + staitondistance + sleepStr + stationName + enterStr;
@@ -853,70 +875,70 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -853,70 +875,70 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
853 System.out.println(restStr); 875 System.out.println(restStr);
854 return restStr; 876 return restStr;
855 } 877 }
856 - 878 +
857 public boolean isPointOnPolyline (Map<String, Object> point, List<Map<String, Object>> listMap ){ 879 public boolean isPointOnPolyline (Map<String, Object> point, List<Map<String, Object>> listMap ){
858 - 880 +
859 boolean success = false; 881 boolean success = false;
860 - 882 +
861 for(int l = 0; l < listMap.size() - 1; l ++){ 883 for(int l = 0; l < listMap.size() - 1; l ++){
862 - 884 +
863 Map<String, Object> tempM = listMap.get(l); 885 Map<String, Object> tempM = listMap.get(l);
864 - 886 +
865 Map<String, Object> nextTempM = listMap.get(l+1); 887 Map<String, Object> nextTempM = listMap.get(l+1);
866 - 888 +
867 if (Double.valueOf(point.get("lng").toString())>= Math.min(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) && Double.valueOf(point.get("lng").toString()) <= Math.max(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) && 889 if (Double.valueOf(point.get("lng").toString())>= Math.min(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) && Double.valueOf(point.get("lng").toString()) <= Math.max(Double.valueOf(tempM.get("lng").toString()), Double.valueOf(nextTempM.get("lng").toString())) &&
868 Double.valueOf(point.get("lat").toString()) >= Math.min(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString())) && Double.valueOf(point.get("lat").toString()) <= Math.max(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString()))){ 890 Double.valueOf(point.get("lat").toString()) >= Math.min(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString())) && Double.valueOf(point.get("lat").toString()) <= Math.max(Double.valueOf(tempM.get("lat").toString()), Double.valueOf(nextTempM.get("lat").toString()))){
869 -  
870 -  
871 - double precision = (Double.valueOf(tempM.get("lng").toString()) - Double.valueOf(point.get("lng").toString())) * (Double.valueOf(nextTempM.get("lat").toString()) - Double.valueOf(point.get("lat").toString())) - 891 +
  892 +
  893 + double precision = (Double.valueOf(tempM.get("lng").toString()) - Double.valueOf(point.get("lng").toString())) * (Double.valueOf(nextTempM.get("lat").toString()) - Double.valueOf(point.get("lat").toString())) -
872 (Double.valueOf(nextTempM.get("lng").toString()) - Double.valueOf(tempM.get("lng").toString())) * (Double.valueOf(tempM.get("lat").toString()) - Double.valueOf(nextTempM.get("lat").toString())); 894 (Double.valueOf(nextTempM.get("lng").toString()) - Double.valueOf(tempM.get("lng").toString())) * (Double.valueOf(tempM.get("lat").toString()) - Double.valueOf(nextTempM.get("lat").toString()));
873 - 895 +
874 if(precision < 2e-10 && precision > -2e-10){ 896 if(precision < 2e-10 && precision > -2e-10){
875 - 897 +
876 //实质判断是否接近0 898 //实质判断是否接近0
877 success = true; 899 success = true;
878 -  
879 - }  
880 - 900 +
  901 + }
  902 +
881 } 903 }
882 - 904 +
883 } 905 }
884 - 906 +
885 return success; 907 return success;
886 } 908 }
887 - 909 +
888 /** 910 /**
889 * @Description:TOOD(获取FTP登录参数) 这里暂时只做一个map值返回,以后可以作为ftp登录类提出来 911 * @Description:TOOD(获取FTP登录参数) 这里暂时只做一个map值返回,以后可以作为ftp登录类提出来
890 - * 912 + *
891 * @return : Map<String, Object> <url:IP;port:端口;username:用户名;password:密码;remotePath:相对路径> 913 * @return : Map<String, Object> <url:IP;port:端口;username:用户名;password:密码;remotePath:相对路径>
892 */ 914 */
893 public Map<String, Object> readPropertiesGetFTPParam(){ 915 public Map<String, Object> readPropertiesGetFTPParam(){
894 - 916 +
895 // 返回值map 917 // 返回值map
896 Map<String, Object> resultMap = new HashMap<String, Object>(); 918 Map<String, Object> resultMap = new HashMap<String, Object>();
897 - 919 +
898 Properties env = new Properties(); 920 Properties env = new Properties();
899 - 921 +
900 try { 922 try {
901 - 923 +
902 env.load(DBUtils_MS.class.getClassLoader().getResourceAsStream("ftp.properties")); 924 env.load(DBUtils_MS.class.getClassLoader().getResourceAsStream("ftp.properties"));
903 - 925 +
904 resultMap.put("url", env.getProperty("ftp.url")); 926 resultMap.put("url", env.getProperty("ftp.url"));
905 - 927 +
906 resultMap.put("port", env.getProperty("ftp.port")); 928 resultMap.put("port", env.getProperty("ftp.port"));
907 - 929 +
908 resultMap.put("username", env.getProperty("ftp.username")); 930 resultMap.put("username", env.getProperty("ftp.username"));
909 - 931 +
910 resultMap.put("password", env.getProperty("ftp.password")); 932 resultMap.put("password", env.getProperty("ftp.password"));
911 - 933 +
912 resultMap.put("remotePath", env.getProperty("ftp.path")); 934 resultMap.put("remotePath", env.getProperty("ftp.path"));
913 - 935 +
914 } catch (Exception e) { 936 } catch (Exception e) {
915 937
916 e.printStackTrace(); 938 e.printStackTrace();
917 - 939 +
918 } 940 }
919 - 941 +
920 return resultMap ; 942 return resultMap ;
921 } 943 }
922 944
@@ -943,7 +965,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -943,7 +965,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
943 } 965 }
944 //过滤部分字段 966 //过滤部分字段
945 /*String jsonStr = JSON.toJSONString(list, new PropertyFilter() { 967 /*String jsonStr = JSON.toJSONString(list, new PropertyFilter() {
946 - 968 +
947 @Override 969 @Override
948 public boolean apply(Object object, String name, Object value) { 970 public boolean apply(Object object, String name, Object value) {
949 if(name.equals("line")) 971 if(name.equals("line"))
@@ -951,14 +973,14 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -951,14 +973,14 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
951 return true; 973 return true;
952 } 974 }
953 });*/ 975 });*/
954 - 976 +
955 rs.put("status", ResponseCode.SUCCESS); 977 rs.put("status", ResponseCode.SUCCESS);
956 rs.put("list", list); 978 rs.put("list", list);
957 }catch(Exception e){ 979 }catch(Exception e){
958 logger.error("", e); 980 logger.error("", e);
959 rs.put("status", ResponseCode.ERROR); 981 rs.put("status", ResponseCode.ERROR);
960 } 982 }
961 - 983 +
962 return rs; 984 return rs;
963 } 985 }
964 986
@@ -1047,7 +1069,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1047,7 +1069,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1047 * @param line 1069 * @param line
1048 * @param languages 语言 如:cn、en、sh 1070 * @param languages 语言 如:cn、en、sh
1049 */ 1071 */
1050 - private InputStream ttsAndZip(List<Object[]> objects, Line line, Set<String> languages) throws Exception { 1072 + private void ttsAndZip(List<Object[]> objects, Line line, Set<String> languages, List<LineRegion> lineRegions) throws Exception {
1051 String lineId = line.getLineCode(); 1073 String lineId = line.getLineCode();
1052 StringBuilder cnBuilder = new StringBuilder(line.getName()).append("[p1000]"), enBuilder = new StringBuilder("Hello[p1000]"); 1074 StringBuilder cnBuilder = new StringBuilder(line.getName()).append("[p1000]"), enBuilder = new StringBuilder("Hello[p1000]");
1053 int ups = 0, downs = 0; 1075 int ups = 0, downs = 0;
@@ -1082,47 +1104,90 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1082,47 +1104,90 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1082 // 文本转语音并进行分割 1104 // 文本转语音并进行分割
1083 // 音频存放及压缩文件路径 1105 // 音频存放及压缩文件路径
1084 String linePath = String.format(linePathPattern, lineId), voicePath = String.format("%s%s.zip", linePath, lineId); 1106 String linePath = String.format(linePathPattern, lineId), voicePath = String.format("%s%s.zip", linePath, lineId);
1085 - try {  
1086 - String path = String.format("%scn.mp3", linePath);  
1087 - IFlyUtils.textToSpeechCn(cnBuilder.toString(), path);  
1088 - AudioOperationUtils.splitBySilence(path, String.format("%scn", linePath), 500, -40);  
1089 - } catch (Exception e) {  
1090 - throw new RuntimeException(e);  
1091 - }  
1092 - if (languages.contains("sh")) {  
1093 - try {  
1094 - String path = String.format("%ssh.mp3", linePath);  
1095 - IFlyUtils.textToSpeechSh(cnBuilder.toString(), path);  
1096 - AudioOperationUtils.splitBySilence(path, String.format("%ssh", linePath), 500, -40);  
1097 - } catch (Exception e) {  
1098 - throw new RuntimeException(e);  
1099 - }  
1100 - }  
1101 - if (languages.contains("en")) { 1107 + // 先清理历史生成的文件
  1108 + cleanHistoryAudio(new File(linePath));
  1109 + for (String language : languages) {
1102 try { 1110 try {
1103 - String path = String.format("%sen.mp3", linePath);  
1104 - IFlyUtils.textToSpeechEn(enBuilder.toString(), path);  
1105 - AudioOperationUtils.splitBySilence(path, String.format("%sen", linePath), 500, -40); 1111 + String path = String.format("%s%s.mp3", linePath, language);
  1112 + if ("cn".equals(language) || "sh".equals(language)) {
  1113 + IFlyUtils.textToSpeech(cnBuilder.toString(), language, path);
  1114 + } else if ("en".equals(language)) {
  1115 + IFlyUtils.textToSpeech(enBuilder.toString(), language, path);
  1116 + }
  1117 + AudioOperationUtils.splitBySilence(path, String.format("%s%s", linePath, language), 500, -40);
1106 } catch (Exception e) { 1118 } catch (Exception e) {
1107 throw new RuntimeException(e); 1119 throw new RuntimeException(e);
1108 } 1120 }
1109 } 1121 }
1110 - // 删除原线路音频  
1111 - File file = new File(linePath);  
1112 - for (File f : file.listFiles()) {  
1113 - if (f.isFile() && f.getName().endsWith(".mp3")) {  
1114 - file.delete(); 1122 +
  1123 + // 合并每站起步、到达语音(全程)
  1124 + int seq = 1;
  1125 + List<SeqStationLevel> seqs = new ArrayList<>();
  1126 + for (int i = seq;i <= ups;i++) {
  1127 + seqs.add(new SeqStationLevel(i, i));
  1128 + }
  1129 + seq = merge(lineId, "0", seq, seqs, languages);
  1130 + if (line.getLinePlayType() != 1) {
  1131 + seqs.clear();
  1132 + for (int i = seq;i <= ups + downs;i++) {
  1133 + seqs.add(new SeqStationLevel(i, i, 1));
  1134 + }
  1135 + merge(lineId, "0", seq, seqs, languages);
  1136 + }
  1137 + zipAudio(String.format("%s%s/", linePath, "0"), voicePath);
  1138 +
  1139 + // 线路区间
  1140 + Map<String, List<SeqStationLevel>> region2map = new HashMap<>();
  1141 + for (LineRegion lineRegion : lineRegions) {
  1142 + for (int i = 0;i < objects.size();i++) {
  1143 + Object[] objArr = objects.get(i);
  1144 + String stationCode = (String) objArr[5];
  1145 + int direction = (int) objArr[8];
  1146 + if (lineRegion.getDirection() == direction) {
  1147 + for (int j = 0;j < lineRegion.getStationRoutes().size();j++) {
  1148 + LsStationRoute stationRoute = lineRegion.getStationRoutes().get(j);
  1149 + if (stationCode.equals(stationRoute.getStationCode())) {
  1150 + List<SeqStationLevel> map = region2map.get(lineRegion.getSeq().toString());
  1151 + if (map == null) {
  1152 + map = new ArrayList<>();
  1153 + region2map.put(lineRegion.getSeq().toString(), map);
  1154 + }
  1155 + map.add(new SeqStationLevel(j + 1, i + 1, direction));
  1156 + break;
  1157 + }
  1158 + }
  1159 + }
1115 } 1160 }
1116 } 1161 }
  1162 + for (Map.Entry<String, List<SeqStationLevel>> entry : region2map.entrySet()) {
  1163 + String subLineId = entry.getKey();
  1164 + List<SeqStationLevel> map = entry.getValue();
  1165 + seq = 1;
  1166 + merge(lineId, subLineId, seq, map, languages);
  1167 + zipAudio(String.format("%s%s/", linePath, subLineId), String.format("%s%s-%s.zip", linePath, lineId, subLineId));
  1168 + }
  1169 + }
1117 1170
1118 - // 合并每站起步、到达语音  
1119 - int seq = 1, startSeq = 1, direction = 0;  
1120 - seq = merge(lineId, seq, startSeq, direction, ups, languages);  
1121 - startSeq = ups + 1;  
1122 - direction = 1;  
1123 - merge(lineId, seq, startSeq, direction, ups + downs, languages); 1171 + private void cleanHistoryAudio(File file) throws Exception {
  1172 + if (file.isDirectory()) {
  1173 + File[] files = file.listFiles();
  1174 + for (File f : files) {
  1175 + cleanHistoryAudio(f);
  1176 + }
  1177 + } else {
  1178 + if (file.getName().endsWith(".mp3") || file.getName().endsWith(".zip")) {
  1179 + file.delete();
  1180 + }
  1181 + }
  1182 + }
1124 1183
1125 - // 压缩音频到zip 1184 + /**
  1185 + * 压缩音频到zip
  1186 + * @param subLinePath 子线路文件夹
  1187 + * @param voicePath 语音报站文件压缩包路径
  1188 + */
  1189 + private void zipAudio(String subLinePath, String voicePath) throws Exception {
  1190 + File file = new File(subLinePath);
1126 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(voicePath)); 1191 ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(voicePath));
1127 for (File f : file.listFiles()) { 1192 for (File f : file.listFiles()) {
1128 if (f.isFile() && f.getName().endsWith(".mp3")) { 1193 if (f.isFile() && f.getName().endsWith(".mp3")) {
@@ -1138,8 +1203,6 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1138,8 +1203,6 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1138 } 1203 }
1139 zos.flush(); 1204 zos.flush();
1140 zos.close(); 1205 zos.close();
1141 -  
1142 - return new FileInputStream(voicePath);  
1143 } 1206 }
1144 1207
1145 private static void addFileToZip(ZipOutputStream zos, File file) throws IOException { 1208 private static void addFileToZip(ZipOutputStream zos, File file) throws IOException {
@@ -1157,21 +1220,32 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1157,21 +1220,32 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1157 fis.close(); 1220 fis.close();
1158 } 1221 }
1159 1222
1160 - private int merge(String lineId, int seq, int startSeq, int direction, int terminal, Set<String> languages) throws Exception {  
1161 - for (int i = startSeq;i <= terminal;i++) {  
1162 - if (i > startSeq) {  
1163 - if (i == startSeq + 1) { 1223 + /**
  1224 + *
  1225 + * @param lineId 线路编码
  1226 + * @param seq 线路站级序号(全局)
  1227 + * @param seqs 当前方向站级序号
  1228 + * @param languages 语种
  1229 + * @return
  1230 + * @throws Exception
  1231 + */
  1232 + private int merge(String lineId, String subLineId, int seq, List<SeqStationLevel> seqs, Set<String> languages) throws Exception {
  1233 + SeqStationLevel startSeq = seqs.get(0), terminal = seqs.get(seqs.size() - 1);
  1234 + for (int i = 0;i < seqs.size();i++) {
  1235 + SeqStationLevel current = seqs.get(i);
  1236 + if (current.getStationLevel() > startSeq.getStationLevel()) {
  1237 + if (i == 1) {
1164 // 生成首站 1238 // 生成首站
1165 - mergeOriginStart(lineId, seq, i, direction, terminal, languages);  
1166 - mergeNormalArrive(lineId, seq, i, direction, terminal, languages);  
1167 - } else if (i == terminal) { 1239 + mergeOriginStart(lineId, subLineId, seq, current, current.getDirection(), terminal, languages);
  1240 + mergeNormalArrive(lineId, subLineId, seq, current, current.getDirection(), terminal, languages);
  1241 + } else if (current.getStationLevel() == terminal.getStationLevel()) {
1168 // 生成终点站 1242 // 生成终点站
1169 - mergeNormalStart(lineId, seq, i, direction, terminal, languages);  
1170 - mergeTerminalArrive(lineId, seq, i, direction, terminal, languages); 1243 + mergeNormalStart(lineId, subLineId, seq, current, current.getDirection(), terminal, languages);
  1244 + mergeTerminalArrive(lineId, subLineId, seq, current, current.getDirection(), terminal, languages);
1171 } else { 1245 } else {
1172 // 生成中途站 1246 // 生成中途站
1173 - mergeNormalStart(lineId, seq, i, direction, terminal, languages);  
1174 - mergeNormalArrive(lineId, seq, i, direction, terminal, languages); 1247 + mergeNormalStart(lineId, subLineId, seq, current, current.getDirection(), terminal, languages);
  1248 + mergeNormalArrive(lineId, subLineId, seq, current, current.getDirection(), terminal, languages);
1175 } 1249 }
1176 seq++; 1250 seq++;
1177 } 1251 }
@@ -1180,9 +1254,11 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1180,9 +1254,11 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1180 return seq; 1254 return seq;
1181 } 1255 }
1182 1256
1183 - private void mergeOriginStart(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception { 1257 + private void mergeOriginStart(String lineId, String subLineId, int seq, SeqStationLevel current, int direction, SeqStationLevel terminal, Set<String> languages) throws Exception {
  1258 + // 子线路路径
1184 String linePath = String.format(linePathPattern, lineId); 1259 String linePath = String.format(linePathPattern, lineId);
1185 - List<String> arr = Arrays.asList(commonPath + "cn_origin_1.mp3", linePath + String.format("cn/%03d.mp3", 0), commonPath + "cn_origin_2.mp3", linePath + String.format("cn/%03d.mp3", terminal), commonPath + "sh_origin_1.mp3", linePath + String.format("sh/%03d.mp3", 0), commonPath + "sh_origin_2.mp3", linePath + String.format("cn/%03d.mp3", terminal), commonPath + "cn_start_1.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_start_2.mp3", commonPath + "sh_start_1.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_start_2.mp3", commonPath + "en_1.mp3", linePath + String.format("en/%03d.mp3", stationLevel), commonPath + "cn_start_3.mp3", commonPath + "sh_start_3.mp3"); 1260 + String subLinePath = String.format("%s%s/", linePath, subLineId);
  1261 + List<String> arr = Arrays.asList(commonPath + "cn_origin_1.mp3", linePath + String.format("cn/%03d.mp3", 0), commonPath + "cn_origin_2.mp3", linePath + String.format("cn/%03d.mp3", terminal.getStationLevel()), commonPath + "sh_origin_1.mp3", linePath + String.format("sh/%03d.mp3", 0), commonPath + "sh_origin_2.mp3", linePath + String.format("cn/%03d.mp3", terminal.getStationLevel()), commonPath + "cn_start_1.mp3", linePath + String.format("cn/%03d.mp3", current.getStationLevel()), commonPath + "cn_start_2.mp3", commonPath + "sh_start_1.mp3", linePath + String.format("sh/%03d.mp3", current.getStationLevel()), commonPath + "sh_start_2.mp3", commonPath + "en_1.mp3", linePath + String.format("en/%03d.mp3", current.getStationLevel()), commonPath + "cn_start_3.mp3", commonPath + "sh_start_3.mp3");
1186 List<String> inputPaths = new ArrayList<>(); 1262 List<String> inputPaths = new ArrayList<>();
1187 for (String path : arr) { 1263 for (String path : arr) {
1188 for (String lang : languages) { 1264 for (String lang : languages) {
@@ -1192,12 +1268,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1192,12 +1268,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1192 } 1268 }
1193 } 1269 }
1194 } 1270 }
1195 - AudioOperationUtils.merge(inputPaths, String.format("%s%03da%s-%03d-%s-Start.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn")); 1271 + AudioOperationUtils.merge(inputPaths, String.format("%s%03da%s-%03d-%s-Start.mp3", subLinePath, seq, direction == 0 ? "u" : "d", direction == 0 ? current.getSeq() : terminal.getSeq() - current.getSeq() + 1, direction == 0 ? "Up" : "Dn"));
1196 } 1272 }
1197 1273
1198 - private void mergeNormalStart(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception { 1274 + private void mergeNormalStart(String lineId, String subLineId, int seq, SeqStationLevel current, int direction, SeqStationLevel terminal, Set<String> languages) throws Exception {
1199 String linePath = String.format(linePathPattern, lineId); 1275 String linePath = String.format(linePathPattern, lineId);
1200 - List<String> arr = Arrays.asList(commonPath + "cn_start.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_start_2.mp3", commonPath + "sh_start_1.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_start_2.mp3", commonPath + "en_1.mp3", linePath + String.format("en/%03d.mp3", stationLevel), commonPath + "cn_start_3.mp3", commonPath + "sh_start_3.mp3"); 1276 + String subLinePath = String.format("%s%s/", linePath, subLineId);
  1277 + List<String> arr = Arrays.asList(commonPath + "cn_start.mp3", linePath + String.format("cn/%03d.mp3", current.getStationLevel()), commonPath + "cn_start_2.mp3", commonPath + "sh_start_1.mp3", linePath + String.format("sh/%03d.mp3", current.getStationLevel()), commonPath + "sh_start_2.mp3", commonPath + "en_1.mp3", linePath + String.format("en/%03d.mp3", current.getStationLevel()), commonPath + "cn_start_3.mp3", commonPath + "sh_start_3.mp3");
1201 List<String> inputPaths = new ArrayList<>(); 1278 List<String> inputPaths = new ArrayList<>();
1202 for (String path : arr) { 1279 for (String path : arr) {
1203 for (String lang : languages) { 1280 for (String lang : languages) {
@@ -1207,26 +1284,27 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1207,26 +1284,27 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1207 } 1284 }
1208 } 1285 }
1209 } 1286 }
1210 - AudioOperationUtils.merge(inputPaths, String.format("%s%03da%s-%03d-%s-Start.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn")); 1287 + AudioOperationUtils.merge(inputPaths, String.format("%s%03da%s-%03d-%s-Start.mp3", subLinePath, seq, direction == 0 ? "u" : "d", direction == 0 ? current.getSeq() : terminal.getSeq() - current.getSeq() + 1, direction == 0 ? "Up" : "Dn"));
1211 } 1288 }
1212 1289
1213 - private void mergeNormalArrive(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception { 1290 + private void mergeNormalArrive(String lineId, String subLineId, int seq, SeqStationLevel current, int direction, SeqStationLevel terminal, Set<String> languages) throws Exception {
1214 String linePath = String.format(linePathPattern, lineId); 1291 String linePath = String.format(linePathPattern, lineId);
1215 - List<String> arr = new ArrayList<>(Arrays.asList(commonPath + "cn_arrive.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_arrive_1.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_arrive_1.mp3", commonPath + "en_2.mp3", linePath + String.format("en/%03d.mp3", stationLevel))); 1292 + String subLinePath = String.format("%s%s/", linePath, subLineId);
  1293 + List<String> arr = new ArrayList<>(Arrays.asList(commonPath + "cn_arrive.mp3", linePath + String.format("cn/%03d.mp3", current.getStationLevel()), commonPath + "cn_arrive_1.mp3", linePath + String.format("sh/%03d.mp3", current.getStationLevel()), commonPath + "sh_arrive_1.mp3", commonPath + "en_2.mp3", linePath + String.format("en/%03d.mp3", current.getStationLevel())));
1216 List<String> inputPaths = new ArrayList<>(); 1294 List<String> inputPaths = new ArrayList<>();
1217 if (languages.contains("sh")) { 1295 if (languages.contains("sh")) {
1218 for (int i = 0;i < 3;i++) { 1296 for (int i = 0;i < 3;i++) {
1219 arr.add(linePath + String.format("cn/%03d.mp3", 0)); 1297 arr.add(linePath + String.format("cn/%03d.mp3", 0));
1220 arr.add(commonPath + "cn_origin_2.mp3"); 1298 arr.add(commonPath + "cn_origin_2.mp3");
1221 - arr.add(linePath + String.format("cn/%03d.mp3", terminal)); 1299 + arr.add(linePath + String.format("cn/%03d.mp3", terminal.getStationLevel()));
1222 arr.add(linePath + String.format("sh/%03d.mp3", 0)); 1300 arr.add(linePath + String.format("sh/%03d.mp3", 0));
1223 arr.add(commonPath + "sh_origin_2.mp3"); 1301 arr.add(commonPath + "sh_origin_2.mp3");
1224 - arr.add(linePath + String.format("sh/%03d.mp3", terminal)); 1302 + arr.add(linePath + String.format("sh/%03d.mp3", terminal.getStationLevel()));
1225 } 1303 }
1226 } else { 1304 } else {
1227 arr.add(linePath + String.format("cn/%03d.mp3", 0)); 1305 arr.add(linePath + String.format("cn/%03d.mp3", 0));
1228 arr.add(commonPath + "cn_origin_2.mp3"); 1306 arr.add(commonPath + "cn_origin_2.mp3");
1229 - arr.add(linePath + String.format("cn/%03d.mp3", terminal)); 1307 + arr.add(linePath + String.format("cn/%03d.mp3", terminal.getStationLevel()));
1230 } 1308 }
1231 for (String path : arr) { 1309 for (String path : arr) {
1232 for (String lang : languages) { 1310 for (String lang : languages) {
@@ -1236,12 +1314,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1236,12 +1314,13 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1236 } 1314 }
1237 } 1315 }
1238 } 1316 }
1239 - AudioOperationUtils.merge(inputPaths, String.format("%s%03db%s-%03d-%s-Arrive.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn")); 1317 + AudioOperationUtils.merge(inputPaths, String.format("%s%03db%s-%03d-%s-Arrive.mp3", subLinePath, seq, direction == 0 ? "u" : "d", direction == 0 ? current.getSeq() : terminal.getSeq() - current.getSeq() + 1, direction == 0 ? "Up" : "Dn"));
1240 } 1318 }
1241 1319
1242 - private void mergeTerminalArrive(String lineId, int seq, int stationLevel, int direction, int terminal, Set<String> languages) throws Exception { 1320 + private void mergeTerminalArrive(String lineId, String subLineId, int seq, SeqStationLevel current, int direction, SeqStationLevel terminal, Set<String> languages) throws Exception {
1243 String linePath = String.format(linePathPattern, lineId); 1321 String linePath = String.format(linePathPattern, lineId);
1244 - List<String> arr = Arrays.asList(commonPath + "cn_terminal.mp3", linePath + String.format("cn/%03d.mp3", stationLevel), commonPath + "cn_arrive_1.mp3", commonPath + "sh_terminal.mp3", linePath + String.format("sh/%03d.mp3", stationLevel), commonPath + "sh_arrive_1.mp3", commonPath + "en_3.mp3", linePath + String.format("en/%03d.mp3", stationLevel), commonPath + "terminal_music.mp3"); 1322 + String subLinePath = String.format("%s%s/", linePath, subLineId);
  1323 + List<String> arr = Arrays.asList(commonPath + "cn_terminal.mp3", linePath + String.format("cn/%03d.mp3", current.getStationLevel()), commonPath + "cn_arrive_1.mp3", commonPath + "sh_terminal.mp3", linePath + String.format("sh/%03d.mp3", current.getStationLevel()), commonPath + "sh_arrive_1.mp3", commonPath + "en_3.mp3", linePath + String.format("en/%03d.mp3", current.getStationLevel()), commonPath + "terminal_music.mp3");
1245 List<String> inputPaths = new ArrayList<>(); 1324 List<String> inputPaths = new ArrayList<>();
1246 for (String path : arr) { 1325 for (String path : arr) {
1247 for (String lang : languages) { 1326 for (String lang : languages) {
@@ -1251,7 +1330,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1251,7 +1330,7 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1251 } 1330 }
1252 } 1331 }
1253 } 1332 }
1254 - AudioOperationUtils.merge(inputPaths, String.format("%s%03db%s-%03d-%s-Arrive.mp3", linePath, seq, direction == 0 ? "u" : "d", direction == 0 ? stationLevel : terminal - stationLevel + 1, direction == 0 ? "Up" : "Dn")); 1333 + AudioOperationUtils.merge(inputPaths, String.format("%s%03db%s-%03d-%s-Arrive.mp3", subLinePath, seq, direction == 0 ? "u" : "d", direction == 0 ? current.getSeq() : terminal.getSeq() - current.getSeq() + 1, direction == 0 ? "Up" : "Dn"));
1255 } 1334 }
1256 1335
1257 private void description() { 1336 private void description() {
@@ -1276,4 +1355,50 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ @@ -1276,4 +1355,50 @@ public class StationRouteServiceImpl extends BaseServiceImpl&lt;StationRoute, Integ
1276 // 终点站(沪) (sh_terminal.mp3) 1355 // 终点站(沪) (sh_terminal.mp3)
1277 // 终点音乐 (terminal_music.mp3) 1356 // 终点音乐 (terminal_music.mp3)
1278 } 1357 }
  1358 +
  1359 + /**
  1360 + * 站序和站级的影响,全程和区间时会不一致
  1361 + */
  1362 + private final static class SeqStationLevel {
  1363 +
  1364 + private Integer seq;
  1365 +
  1366 + private Integer stationLevel;
  1367 +
  1368 + private int direction;
  1369 +
  1370 + private SeqStationLevel(Integer seq, Integer stationLevel) {
  1371 + this(seq, stationLevel, 0);
  1372 + }
  1373 +
  1374 + private SeqStationLevel(Integer seq, Integer stationLevel, int direction) {
  1375 + this.seq = seq;
  1376 + this.stationLevel = stationLevel;
  1377 + this.direction = direction;
  1378 + }
  1379 +
  1380 + public Integer getSeq() {
  1381 + return seq;
  1382 + }
  1383 +
  1384 + public void setSeq(Integer seq) {
  1385 + this.seq = seq;
  1386 + }
  1387 +
  1388 + public Integer getStationLevel() {
  1389 + return stationLevel;
  1390 + }
  1391 +
  1392 + public void setStationLevel(Integer stationLevel) {
  1393 + this.stationLevel = stationLevel;
  1394 + }
  1395 +
  1396 + public int getDirection() {
  1397 + return direction;
  1398 + }
  1399 +
  1400 + public void setDirection(int direction) {
  1401 + this.direction = direction;
  1402 + }
  1403 + }
1279 } 1404 }
src/main/java/com/bsth/util/FTPClientUtils.java
1 -package com.bsth.util;  
2 -  
3 -import java.io.ByteArrayInputStream;  
4 -import java.io.File;  
5 -import java.io.FileInputStream;  
6 -import java.io.FileNotFoundException;  
7 -import java.io.FileOutputStream;  
8 -import java.io.IOException;  
9 -import java.io.InputStream;  
10 -import java.io.OutputStream;  
11 -import java.io.UnsupportedEncodingException;  
12 -  
13 -import org.apache.commons.net.ftp.FTPClient;  
14 -import org.apache.commons.net.ftp.FTPFile;  
15 -import org.apache.commons.net.ftp.FTPReply;  
16 -/**  
17 - * @Description: 向FTP服务器上传文件  
18 - *  
19 - * @Version 1.0 2016-06-21 4:31:09 by 李强  
20 - *  
21 - */  
22 -public class FTPClientUtils {  
23 -  
24 - /**  
25 - * @param url FTP服务器hostname;  
26 - *  
27 - * - - - - port FTP服务器端口;  
28 - *  
29 - * - - - - username FTP登录账号;  
30 - *  
31 - * - - - - password FTP登录密码 ;  
32 - *  
33 - * - - - - path FTP服务器保存目录;  
34 - *  
35 - * - - - - filename 上传到FTP服务器上的文件名  
36 - *  
37 - * - - - - input 输入流;  
38 - *  
39 - * @return 成功返回true,否则返回false  
40 - *  
41 - */  
42 - public boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {  
43 -  
44 - boolean success = false;  
45 -  
46 - FTPClient ftp = new FTPClient();  
47 -  
48 - try {  
49 -  
50 - int reply;  
51 -  
52 - //连接FTP服务器,如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器  
53 - ftp.connect(url, port);  
54 -  
55 - //登录  
56 - ftp.login(username, password);  
57 -  
58 - reply = ftp.getReplyCode();  
59 -  
60 - if (!FTPReply.isPositiveCompletion(reply)) {  
61 -  
62 - ftp.disconnect();  
63 -  
64 - return success;  
65 -  
66 - }  
67 -  
68 - ftp.changeWorkingDirectory(path);  
69 - ftp.setFileType(FTPClient.BINARY_FILE_TYPE);  
70 - ftp.enterLocalPassiveMode();  
71 - success = ftp.storeFile(new String(filename.getBytes("gbk"),"gbk"), input);  
72 - /*success = ftp.storeFile(filename, input); */  
73 - input.close();  
74 -  
75 - ftp.logout();  
76 -  
77 - // success = true;  
78 -  
79 - } catch (IOException e) {  
80 -  
81 - e.printStackTrace();  
82 -  
83 - } finally {  
84 -  
85 - if (ftp.isConnected()) {  
86 -  
87 - try {  
88 -  
89 - ftp.disconnect();  
90 -  
91 - } catch (IOException ioe) {  
92 -  
93 - }  
94 -  
95 - }  
96 -  
97 - }  
98 -  
99 - return success;  
100 - }  
101 -  
102 - /**  
103 - * @Description : TOOD(将本地文件上传到FTP服务器上)  
104 - *  
105 - * @param file  
106 - *  
107 - * @param name  
108 - *  
109 - * @param url  
110 - *  
111 - * @param port  
112 - *  
113 - * @param username  
114 - *  
115 - * @param password  
116 - *  
117 - * @param remotePath  
118 - *  
119 - */  
120 - public void FTPUpLoadFromDisk(File file,String name,String url, int port, String username, String password, String remotePath){  
121 -  
122 - try {  
123 - FileInputStream in=new FileInputStream(file);  
124 -  
125 - boolean flag = uploadFile(url, port,username, password, remotePath, name, in);  
126 -  
127 - /* boolean flag = uploadFile("192.168.168.101", 21, "testftpservice", "123", "ftptest/", name, in);*/  
128 -  
129 - /* boolean flag = uploadFile("222.66.0.205", 21, "transport", "transport123", "ftptest/", name, in);*/  
130 -  
131 - } catch (FileNotFoundException e) {  
132 -  
133 - e.printStackTrace();  
134 -  
135 - }  
136 -  
137 - }  
138 -  
139 - // 在FTP服务器上生成一个文件,并将一个字符串写入到该文件中  
140 - public void testUpLoadFromString(){  
141 -  
142 - try {  
143 -  
144 - String str = "test ftp "+ "\r\n"+ "ccccc dddd";  
145 -  
146 - InputStream input = new ByteArrayInputStream(str.getBytes("utf-8"));  
147 -  
148 - uploadFile("192.168.168.101", 21, "testftpservice", "123", "ftptest/", "test.txt", input);  
149 -  
150 - } catch (UnsupportedEncodingException e) {  
151 -  
152 - e.printStackTrace();  
153 -  
154 - }  
155 -  
156 - }  
157 -  
158 - /**  
159 - * @Description (删除FTP上的文件)  
160 - *  
161 - * @param url FTP服务器IP地址  
162 - *  
163 - * @param port FTP服务器端口  
164 - *  
165 - * @param username FTP服务器登录名  
166 - *  
167 - * @param password FTP服务器密码  
168 - *  
169 - * @param remotePath 远程文件路径  
170 - *  
171 - * @param fileName 待删除的文件名  
172 - *  
173 - * @return boolean  
174 - */  
175 - public static boolean deleteFtpFile(String url, int port, String username, String password, String remotePath, String fileName){  
176 -  
177 - boolean success = false;  
178 -  
179 - FTPClient ftp = new FTPClient();  
180 -  
181 - try {  
182 -  
183 - int reply;  
184 -  
185 - // 连接FTP服务器  
186 - if (port > -1)  
187 -  
188 - ftp.connect(url, port);  
189 -  
190 - else  
191 -  
192 - ftp.connect(url);  
193 -  
194 - // 登录  
195 - ftp.login(username, password);  
196 -  
197 - reply = ftp.getReplyCode();  
198 -  
199 - if (!FTPReply.isPositiveCompletion(reply)) {  
200 -  
201 - ftp.disconnect();  
202 -  
203 - return success;  
204 - }  
205 -  
206 - // 转移到FTP服务器目录  
207 -  
208 - ftp.changeWorkingDirectory(remotePath);  
209 -  
210 - /*success = ftp.deleteFile(fileName);*/  
211 -  
212 - success = ftp.deleteFile(new String(fileName.getBytes("gbk"),"gbk"));  
213 -  
214 - ftp.logout();  
215 -  
216 - } catch (IOException e){  
217 -  
218 - e.printStackTrace();  
219 -  
220 - success = false;  
221 -  
222 - } finally {  
223 -  
224 - if (ftp.isConnected()) {  
225 -  
226 - try {  
227 -  
228 - ftp.disconnect();  
229 -  
230 - } catch (IOException e) {  
231 -  
232 - e.printStackTrace();  
233 -  
234 - }  
235 - }  
236 - }  
237 -  
238 - return success;  
239 - }  
240 -  
241 - public static File GetFtpFile(String url, int port, String username, String password, String remotePath, String fileName){  
242 -  
243 - FTPClient ftp = new FTPClient();  
244 -  
245 - /*File destFile = new File(fileName); */  
246 -  
247 - File destFile = new File(fileName);  
248 -  
249 - InputStream in = null;  
250 -  
251 - OutputStream out = null;  
252 -  
253 - try {  
254 -  
255 - int reply;  
256 -  
257 - // 连接FTP服务器  
258 - if (port > -1)  
259 -  
260 - ftp.connect(url, port);  
261 -  
262 - else  
263 -  
264 - ftp.connect(url);  
265 -  
266 - // 登录  
267 - ftp.login(username, password);  
268 -  
269 - reply = ftp.getReplyCode();  
270 -  
271 - if (!FTPReply.isPositiveCompletion(reply)) {  
272 -  
273 - ftp.disconnect();  
274 -  
275 - }  
276 -  
277 - // 转移到FTP服务器目录  
278 -  
279 - ftp.changeWorkingDirectory(remotePath);  
280 -  
281 - ftp.enterLocalPassiveMode();  
282 -  
283 - FTPFile[] fs = ftp.listFiles();  
284 -  
285 - System.out.println(fs.length);  
286 -  
287 - /* for (FTPFile ff : fs) {  
288 - //解决中文乱码问题,两次解码  
289 - byte[] bytes=ff.getName().getBytes("gbk");  
290 - String fn=new String(bytes,"gbk");  
291 - if (fn.equals(fileName)) {  
292 - //6.写操作,将其写入到本地文件中  
293 - File localFile = new File(ff.getName());  
294 -  
295 -  
296 - OutputStream is = new FileOutputStream(localFile);  
297 - ftp.retrieveFile(ff.getName(), is);  
298 - is.close();  
299 - }  
300 - } */  
301 -  
302 - /* File srcFile = new File(fileName); */  
303 -  
304 - /* File srcFile = new File(new String(fileName.getBytes("gbk"),"gbk"));*/  
305 -  
306 - int byteread = 0; // 读取的字节数  
307 -  
308 - /* in = ftp.retrieveFileStream(remotePath + fileName);*/  
309 -  
310 - in = ftp.retrieveFileStream(new String(fileName.getBytes("gbk"),"gbk"));  
311 -  
312 -  
313 - out = new FileOutputStream(destFile);  
314 -  
315 - byte[] buffer = new byte[1024];  
316 -  
317 - while ((byteread = in.read(buffer)) != -1) {  
318 -  
319 - out.write(buffer, 0, byteread);  
320 -  
321 - }  
322 -  
323 - out.flush();  
324 - ftp.logout();  
325 -  
326 - } catch (IOException e){  
327 -  
328 - e.printStackTrace();  
329 -  
330 - } finally {  
331 -  
332 - try {  
333 -  
334 - if (out != null)  
335 -  
336 - out.close();  
337 -  
338 - if (in != null)  
339 -  
340 - in.close();  
341 -  
342 - } catch (IOException e) {  
343 -  
344 - e.printStackTrace();  
345 -  
346 - }  
347 -  
348 - if (ftp.isConnected()) {  
349 -  
350 - try {  
351 -  
352 - ftp.disconnect();  
353 -  
354 - } catch (IOException e) {  
355 -  
356 - e.printStackTrace();  
357 -  
358 - }  
359 - }  
360 - }  
361 -  
362 - return destFile;  
363 - }  
364 -  
365 -  
366 - public static void main(String[] args) {  
367 -  
368 - FTPClientUtils clientUtils = new FTPClientUtils();  
369 -  
370 - Test test= new Test();  
371 -  
372 - File[] sources = new File[] {new File("E:/20079.txt")};  
373 -  
374 - File target = new File("release_package.tar.gz");  
375 -  
376 - File targetFile = test.pack(sources, target);  
377 -  
378 - /* clientUtils.testUpLoadFromDisk(targetFile,targetFile.getName());*/  
379 -  
380 -  
381 - /** 删除文件 */  
382 - /*boolean a =clientUtils.deleteFtpFile("192.168.168.101", 21, "testftpservice", "123", "ftptest/", "release_package.tar.gz");*/  
383 -  
384 - }  
385 -} 1 +package com.bsth.util;
  2 +
  3 +import java.io.ByteArrayInputStream;
  4 +import java.io.File;
  5 +import java.io.FileInputStream;
  6 +import java.io.FileNotFoundException;
  7 +import java.io.FileOutputStream;
  8 +import java.io.IOException;
  9 +import java.io.InputStream;
  10 +import java.io.OutputStream;
  11 +import java.io.UnsupportedEncodingException;
  12 +
  13 +import org.apache.commons.net.ftp.FTPClient;
  14 +import org.apache.commons.net.ftp.FTPFile;
  15 +import org.apache.commons.net.ftp.FTPReply;
  16 +/**
  17 + * @Description: 向FTP服务器上传文件
  18 + *
  19 + * @Version 1.0 2016-06-21 4:31:09 by 李强
  20 + *
  21 + */
  22 +public class FTPClientUtils {
  23 +
  24 + /**
  25 + * @param url FTP服务器hostname;
  26 + *
  27 + * - - - - port FTP服务器端口;
  28 + *
  29 + * - - - - username FTP登录账号;
  30 + *
  31 + * - - - - password FTP登录密码 ;
  32 + *
  33 + * - - - - path FTP服务器保存目录;
  34 + *
  35 + * - - - - filename 上传到FTP服务器上的文件名
  36 + *
  37 + * - - - - input 输入流;
  38 + *
  39 + * @return 成功返回true,否则返回false
  40 + *
  41 + */
  42 + public boolean uploadFile(String url,int port,String username, String password, String path, String filename, InputStream input) {
  43 +
  44 + boolean success = false;
  45 +
  46 + FTPClient ftp = new FTPClient();
  47 +
  48 + try {
  49 +
  50 + int reply;
  51 +
  52 + //连接FTP服务器,如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器
  53 + ftp.connect(url, port);
  54 +
  55 + //登录
  56 + ftp.login(username, password);
  57 +
  58 + reply = ftp.getReplyCode();
  59 +
  60 + if (!FTPReply.isPositiveCompletion(reply)) {
  61 +
  62 + ftp.disconnect();
  63 +
  64 + return success;
  65 +
  66 + }
  67 +
  68 + ftp.changeWorkingDirectory(path);
  69 + ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
  70 + ftp.enterLocalPassiveMode();
  71 + success = ftp.storeFile(new String(filename.getBytes("gbk"),"gbk"), input);
  72 + /*success = ftp.storeFile(filename, input); */
  73 + input.close();
  74 +
  75 + ftp.logout();
  76 +
  77 + // success = true;
  78 +
  79 + } catch (IOException e) {
  80 +
  81 + e.printStackTrace();
  82 +
  83 + } finally {
  84 +
  85 + if (ftp.isConnected()) {
  86 +
  87 + try {
  88 +
  89 + ftp.disconnect();
  90 +
  91 + } catch (IOException ioe) {
  92 +
  93 + }
  94 +
  95 + }
  96 +
  97 + }
  98 +
  99 + return success;
  100 + }
  101 +
  102 + /**
  103 + * @Description : TOOD(将本地文件上传到FTP服务器上)
  104 + *
  105 + * @param file
  106 + *
  107 + * @param name
  108 + *
  109 + * @param url
  110 + *
  111 + * @param port
  112 + *
  113 + * @param username
  114 + *
  115 + * @param password
  116 + *
  117 + * @param remotePath
  118 + *
  119 + */
  120 + public void FTPUpLoadFromDisk(File file,String name,String url, int port, String username, String password, String remotePath){
  121 +
  122 + try {
  123 + FileInputStream in=new FileInputStream(file);
  124 +
  125 + boolean flag = uploadFile(url, port,username, password, remotePath, name, in);
  126 +
  127 + /* boolean flag = uploadFile("192.168.168.101", 21, "testftpservice", "123", "ftptest/", name, in);*/
  128 +
  129 + /* boolean flag = uploadFile("222.66.0.205", 21, "transport", "transport123", "ftptest/", name, in);*/
  130 +
  131 + } catch (FileNotFoundException e) {
  132 +
  133 + e.printStackTrace();
  134 +
  135 + }
  136 +
  137 + }
  138 +
  139 + // 在FTP服务器上生成一个文件,并将一个字符串写入到该文件中
  140 + public void testUpLoadFromString(){
  141 +
  142 + try {
  143 +
  144 + String str = "test ftp "+ "\r\n"+ "ccccc dddd";
  145 +
  146 + InputStream input = new ByteArrayInputStream(str.getBytes("utf-8"));
  147 +
  148 + uploadFile("192.168.168.101", 21, "testftpservice", "123", "ftptest/", "test.txt", input);
  149 +
  150 + } catch (UnsupportedEncodingException e) {
  151 +
  152 + e.printStackTrace();
  153 +
  154 + }
  155 +
  156 + }
  157 +
  158 + /**
  159 + * @Description (删除FTP上的文件)
  160 + *
  161 + * @param url FTP服务器IP地址
  162 + *
  163 + * @param port FTP服务器端口
  164 + *
  165 + * @param username FTP服务器登录名
  166 + *
  167 + * @param password FTP服务器密码
  168 + *
  169 + * @param remotePath 远程文件路径
  170 + *
  171 + * @param fileName 待删除的文件名
  172 + *
  173 + * @return boolean
  174 + */
  175 + public static boolean deleteFtpFile(String url, int port, String username, String password, String remotePath, String fileName){
  176 +
  177 + boolean success = false;
  178 +
  179 + FTPClient ftp = new FTPClient();
  180 +
  181 + try {
  182 +
  183 + int reply;
  184 +
  185 + // 连接FTP服务器
  186 + if (port > -1)
  187 +
  188 + ftp.connect(url, port);
  189 +
  190 + else
  191 +
  192 + ftp.connect(url);
  193 +
  194 + // 登录
  195 + ftp.login(username, password);
  196 +
  197 + reply = ftp.getReplyCode();
  198 +
  199 + if (!FTPReply.isPositiveCompletion(reply)) {
  200 +
  201 + ftp.disconnect();
  202 +
  203 + return success;
  204 + }
  205 +
  206 + // 转移到FTP服务器目录
  207 +
  208 + ftp.changeWorkingDirectory(remotePath);
  209 +
  210 + /*success = ftp.deleteFile(fileName);*/
  211 +
  212 + success = ftp.deleteFile(new String(fileName.getBytes("gbk"),"gbk"));
  213 +
  214 + ftp.logout();
  215 +
  216 + } catch (IOException e){
  217 +
  218 + e.printStackTrace();
  219 +
  220 + success = false;
  221 +
  222 + } finally {
  223 +
  224 + if (ftp.isConnected()) {
  225 +
  226 + try {
  227 +
  228 + ftp.disconnect();
  229 +
  230 + } catch (IOException e) {
  231 +
  232 + e.printStackTrace();
  233 +
  234 + }
  235 + }
  236 + }
  237 +
  238 + return success;
  239 + }
  240 +
  241 + public static File GetFtpFile(String url, int port, String username, String password, String remotePath, String fileName){
  242 +
  243 + FTPClient ftp = new FTPClient();
  244 +
  245 + /*File destFile = new File(fileName); */
  246 +
  247 + File destFile = new File(fileName);
  248 +
  249 + InputStream in = null;
  250 +
  251 + OutputStream out = null;
  252 +
  253 + try {
  254 +
  255 + int reply;
  256 +
  257 + // 连接FTP服务器
  258 + if (port > -1)
  259 +
  260 + ftp.connect(url, port);
  261 +
  262 + else
  263 +
  264 + ftp.connect(url);
  265 +
  266 + // 登录
  267 + ftp.login(username, password);
  268 +
  269 + reply = ftp.getReplyCode();
  270 +
  271 + if (!FTPReply.isPositiveCompletion(reply)) {
  272 +
  273 + ftp.disconnect();
  274 +
  275 + }
  276 +
  277 + // 转移到FTP服务器目录
  278 +
  279 + ftp.changeWorkingDirectory(remotePath);
  280 +
  281 + ftp.enterLocalPassiveMode();
  282 +
  283 + FTPFile[] fs = ftp.listFiles();
  284 +
  285 + System.out.println(fs.length);
  286 +
  287 + /* for (FTPFile ff : fs) {
  288 + //解决中文乱码问题,两次解码
  289 + byte[] bytes=ff.getName().getBytes("gbk");
  290 + String fn=new String(bytes,"gbk");
  291 + if (fn.equals(fileName)) {
  292 + //6.写操作,将其写入到本地文件中
  293 + File localFile = new File(ff.getName());
  294 +
  295 +
  296 + OutputStream is = new FileOutputStream(localFile);
  297 + ftp.retrieveFile(ff.getName(), is);
  298 + is.close();
  299 + }
  300 + } */
  301 +
  302 + /* File srcFile = new File(fileName); */
  303 +
  304 + /* File srcFile = new File(new String(fileName.getBytes("gbk"),"gbk"));*/
  305 +
  306 + int byteread = 0; // 读取的字节数
  307 +
  308 + /* in = ftp.retrieveFileStream(remotePath + fileName);*/
  309 +
  310 + in = ftp.retrieveFileStream(new String(fileName.getBytes("gbk"),"gbk"));
  311 +
  312 +
  313 + out = new FileOutputStream(destFile);
  314 +
  315 + byte[] buffer = new byte[1024];
  316 +
  317 + while ((byteread = in.read(buffer)) != -1) {
  318 +
  319 + out.write(buffer, 0, byteread);
  320 +
  321 + }
  322 +
  323 + out.flush();
  324 + ftp.logout();
  325 +
  326 + } catch (IOException e){
  327 +
  328 + e.printStackTrace();
  329 +
  330 + } finally {
  331 +
  332 + try {
  333 +
  334 + if (out != null)
  335 +
  336 + out.close();
  337 +
  338 + if (in != null)
  339 +
  340 + in.close();
  341 +
  342 + } catch (IOException e) {
  343 +
  344 + e.printStackTrace();
  345 +
  346 + }
  347 +
  348 + if (ftp.isConnected()) {
  349 +
  350 + try {
  351 +
  352 + ftp.disconnect();
  353 +
  354 + } catch (IOException e) {
  355 +
  356 + e.printStackTrace();
  357 +
  358 + }
  359 + }
  360 + }
  361 +
  362 + return destFile;
  363 + }
  364 +
  365 + public static boolean deleteFileByPrefix(String prefix, String url, int port, String username, String password, String remotePath) {
  366 + boolean flag = false;
  367 + FTPClient ftp = new FTPClient();
  368 + try {
  369 + int reply;
  370 + if (port > -1) {
  371 + ftp.connect(url, port);
  372 + } else {
  373 + ftp.connect(url);
  374 + }
  375 + ftp.login(username, password);
  376 + reply = ftp.getReplyCode();
  377 + if (!FTPReply.isPositiveCompletion(reply)) {
  378 + ftp.disconnect();
  379 + return flag;
  380 + }
  381 + ftp.enterLocalPassiveMode();
  382 + ftp.changeWorkingDirectory(remotePath);
  383 + for (FTPFile file : ftp.listFiles()) {
  384 + if (file.getName().startsWith(prefix)) {
  385 + ftp.deleteFile(file.getName());
  386 + }
  387 + }
  388 + ftp.logout();
  389 + } catch (IOException e){
  390 + e.printStackTrace();
  391 + } finally {
  392 + if (ftp.isConnected()) {
  393 + try {
  394 + ftp.disconnect();
  395 + } catch (IOException e) {
  396 + e.printStackTrace();
  397 + }
  398 + }
  399 + }
  400 +
  401 + return flag;
  402 + }
  403 +
  404 +
  405 + public static void main(String[] args) {
  406 +
  407 + FTPClientUtils clientUtils = new FTPClientUtils();
  408 +
  409 + Test test= new Test();
  410 +
  411 + File[] sources = new File[] {new File("E:/20079.txt")};
  412 +
  413 + File target = new File("release_package.tar.gz");
  414 +
  415 + File targetFile = test.pack(sources, target);
  416 +
  417 + /* clientUtils.testUpLoadFromDisk(targetFile,targetFile.getName());*/
  418 +
  419 +
  420 + /** 删除文件 */
  421 + /*boolean a =clientUtils.deleteFtpFile("192.168.168.101", 21, "testftpservice", "123", "ftptest/", "release_package.tar.gz");*/
  422 +
  423 + }
  424 +}
src/main/java/com/bsth/util/IFlyUtils.java
@@ -31,65 +31,36 @@ public class IFlyUtils { @@ -31,65 +31,36 @@ public class IFlyUtils {
31 31
32 private final static String appId = "b4b21ad4"; 32 private final static String appId = "b4b21ad4";
33 33
34 - /**  
35 - * 生成普通话语音  
36 - * text以","进行分割  
37 - * @param text  
38 - */  
39 - public static void textToSpeechCn(String text, String outputPath) throws Exception { 34 + private static Map<String, String> language2vcn = new HashMap<>();
  35 +
  36 + static {
  37 + language2vcn.put("cn", "x4_lingxiaoshan_profnews");
  38 + language2vcn.put("sh", "x3_ziling");
  39 + language2vcn.put("en", "x4_enus_luna_assist");
  40 + }
  41 +
  42 + public static void textToSpeech(String text, String language, String outputPath) throws Exception {
40 File file = new File(outputPath); 43 File file = new File(outputPath);
41 if (!file.getParentFile().exists()) { 44 if (!file.getParentFile().exists()) {
42 file.getParentFile().mkdirs(); 45 file.getParentFile().mkdirs();
43 } 46 }
44 - String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://");  
45 - SpeechRequest request = new SpeechRequest();  
46 - request.getCommon().put("app_id", appId);  
47 - request.getBusiness().put("aue", "lame");  
48 - request.getBusiness().put("sfl", 1);  
49 - request.getBusiness().put("vcn", "x4_lingxiaoshan_profnews");  
50 - request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes("GBK")));  
51 - request.getData().put("status", 2);  
52 - websocketWork(wsUrl, request, new FileOutputStream(file));  
53 - while (!request.isCompleted()) {  
54 - Thread.sleep(500); 47 + String vcn = language2vcn.get(language);
  48 + if (vcn == null) {
  49 + throw new IllegalArgumentException("Language is not supported: " + language);
55 } 50 }
56 - }  
57 -  
58 - /**  
59 - * 生成上海话语音  
60 - * text以","进行分割  
61 - * @param text  
62 - */  
63 - public static void textToSpeechSh(String text, String outputPath) throws Exception {  
64 String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://"); 51 String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://");
65 SpeechRequest request = new SpeechRequest(); 52 SpeechRequest request = new SpeechRequest();
66 request.getCommon().put("app_id", appId); 53 request.getCommon().put("app_id", appId);
67 request.getBusiness().put("aue", "lame"); 54 request.getBusiness().put("aue", "lame");
68 request.getBusiness().put("sfl", 1); 55 request.getBusiness().put("sfl", 1);
69 - request.getBusiness().put("vcn", "x3_ziling");  
70 - request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes("GBK")));  
71 - request.getData().put("status", 2);  
72 - websocketWork(wsUrl, request, new FileOutputStream(outputPath));  
73 - while (!request.isCompleted()) {  
74 - Thread.sleep(500); 56 + request.getBusiness().put("vcn", vcn);
  57 + String charset = "GBK";
  58 + if (language.equals("en")) {
  59 + charset = "UTF-8";
75 } 60 }
76 - }  
77 -  
78 - /**  
79 - * 生成英语语音  
80 - * text以","进行分割  
81 - * @param text  
82 - */  
83 - public static void textToSpeechEn(String text, String outputPath) throws Exception {  
84 - String wsUrl = getAuthUrl("https://tts-api.xfyun.cn/v2/tts", apiKey, apiSecret).replace("https://", "wss://");  
85 - SpeechRequest request = new SpeechRequest();  
86 - request.getCommon().put("app_id", appId);  
87 - request.getBusiness().put("aue", "lame");  
88 - request.getBusiness().put("sfl", 1);  
89 - request.getBusiness().put("vcn", "x4_enus_luna_assist");  
90 - request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes(StandardCharsets.UTF_8))); 61 + request.getData().put("text", Base64.getEncoder().encodeToString(text.replace(",", "[p1000]").getBytes(charset)));
91 request.getData().put("status", 2); 62 request.getData().put("status", 2);
92 - websocketWork(wsUrl, request, new FileOutputStream(outputPath)); 63 + websocketWork(wsUrl, request, new FileOutputStream(file));
93 while (!request.isCompleted()) { 64 while (!request.isCompleted()) {
94 Thread.sleep(500); 65 Thread.sleep(500);
95 } 66 }
src/main/resources/application-dev.properties
1 server.port=9088 1 server.port=9088
2 2
3 -# dubbo服务化使用开关flag 3 +# dubbo����ʹ�ÿ���flag
4 dubbo.use=false 4 dubbo.use=false
5 5
6 #JPA 6 #JPA
@@ -9,21 +9,14 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im @@ -9,21 +9,14 @@ spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.Im
9 spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy 9 spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
10 spring.jpa.database= MYSQL 10 spring.jpa.database= MYSQL
11 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true 11 spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
12 -spring.jpa.show-sql= true 12 +spring.jpa.show-sql= false
13 spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect 13 spring.jpa.properties.hibernate.dialect= org.hibernate.spatial.dialect.mysql.MySQL56InnoDBSpatialDialect
14 14
15 #DATABASE 15 #DATABASE
16 spring.datasource.driver-class-name= com.mysql.jdbc.Driver 16 spring.datasource.driver-class-name= com.mysql.jdbc.Driver
17 -#spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
18 -##spring.datasource.url= jdbc:mysql://192.168.168.222/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
19 -#spring.datasource.username= root  
20 -#spring.datasource.password=  
21 -spring.datasource.url= jdbc:mysql://127.0.0.1/control?useUnicode=true&characterEncoding=utf-8&useSSL=false 17 +spring.datasource.url= jdbc:mysql://192.168.168.152/control_lg?useUnicode=true&characterEncoding=utf-8&useSSL=false
22 spring.datasource.username= root 18 spring.datasource.username= root
23 -spring.datasource.password= root  
24 -#spring.datasource.url= jdbc:mysql://192.168.168.241/control?useUnicode=true&characterEncoding=utf-8&useSSL=false  
25 -#spring.datasource.username= root  
26 -#spring.datasource.password= root2jsp 19 +spring.datasource.password= root2jsp
27 spring.datasource.type= com.zaxxer.hikari.HikariDataSource 20 spring.datasource.type= com.zaxxer.hikari.HikariDataSource
28 21
29 #DATASOURCE SETTING 22 #DATASOURCE SETTING
@@ -39,17 +32,17 @@ spring.datasource.hikari.validation-timeout= 3000 @@ -39,17 +32,17 @@ spring.datasource.hikari.validation-timeout= 3000
39 spring.datasource.hikari.register-mbeans=true 32 spring.datasource.hikari.register-mbeans=true
40 33
41 kafka.use= false 34 kafka.use= false
42 -spring.kafka.consumer.bootstrap-servers= localhost:9092  
43 -spring.kafka.consumer.group-id= schedule-system 35 +spring.kafka.consumer.bootstrap-servers= 192.170.100.114:9092,192.170.100.114:9093,192.170.100.114:9094
  36 +spring.kafka.consumer.group-id= schedule-system-test
44 spring.kafka.consumer.auto-offset-reset= latest 37 spring.kafka.consumer.auto-offset-reset= latest
45 spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer 38 spring.kafka.consumer.key-deserializer= org.apache.kafka.common.serialization.StringDeserializer
46 spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer 39 spring.kafka.consumer.value-deserializer= org.apache.kafka.common.serialization.StringDeserializer
47 40
48 sso.enabled= false 41 sso.enabled= false
49 -sso.systemcode = SYS0019  
50 -sso.http.url.login= http://180.169.154.251:28090/portal/index.html#/login  
51 -sso.http.url.logout= http://180.169.154.251:18080/information/api/v1/logout  
52 -sso.http.url.auth= http://180.169.154.251:18080/information/authenticate/authorityAuthentication 42 +sso.systemcode = SYS0023
  43 +sso.http.url.login= https://112.64.45.51/portal/index.html#/login
  44 +sso.http.url.logout= https://112.64.45.51/information/api/v1/logout
  45 +sso.http.url.auth= https://112.64.45.51/information/authenticate/authorityAuthentication
53 46
54 -path.speech.common = /data/control/speech/common/  
55 -path.speech.line = /data/control/speech/%s/  
56 \ No newline at end of file 47 \ No newline at end of file
  48 +path.speech.common = D:/speech/common/
  49 +path.speech.line = D:/speech/%s/
57 \ No newline at end of file 50 \ No newline at end of file
src/main/resources/fatso/handle_real_ctl.js
1 -/**  
2 - * 处理线调文件  
3 - */  
4 -var fs = require('fs')  
5 - , cheerio = require('cheerio')  
6 - , minifier = require('./minifier')  
7 - , crypto = require("crypto")  
8 - , CleanCSS = require('clean-css')  
9 - , UglifyJS = require("uglify-js");  
10 -;  
11 -  
12 -var platform = process.platform;  
13 -var iswin = platform=='win32';  
14 -var sp = platform=='win32'?'\\':'/';  
15 -//不参与的目录  
16 -var pName = 'bsth_control'  
17 - , path = process.cwd()  
18 - //根目录  
19 - , root = path.substr(0, path.indexOf(sp + 'src'+sp+'main'))  
20 - , workspace = root.substr(0, root.lastIndexOf(sp + pName))  
21 - //临时目录  
22 - , dest = (workspace + sp + pName + '@fatso_copy')//.replace(/\//g, '\\')  
23 - , _static = sp + 'src'+sp+'main'+sp+'resources'+sp+'static';  
24 -  
25 -  
26 -var mainFile = dest + _static + sp + 'real_control_v2'+sp+'main.html';  
27 -var aloneMapWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'map'+sp+'alone_wrap.html';  
28 -var aloneHomeWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'home'+sp+'home_wrap.html';  
29 -var mapFile = dest + _static + sp + 'real_control_v2'+sp+'mapmonitor'+sp+'real.html';  
30 -var realCtl = {  
31 - /**  
32 - * 处理线调首页  
33 - */  
34 - handleMain: function (cb) {  
35 - //处理main.html  
36 - var data = fs.readFileSync(mainFile, 'utf-8'),  
37 - $ = cheerio.load(data);  
38 - handleCss($, function () {  
39 - handleJs($, mainFile, cb);  
40 - });  
41 -  
42 -  
43 - },  
44 - /**  
45 - * 处理地图模块  
46 - * @param cb  
47 - */  
48 - handleMap: function (cb) {  
49 - //读取文件  
50 - var data = fs.readFileSync(mapFile, 'utf-8')  
51 - , $ = cheerio.load(data);  
52 -  
53 - handleCss($, function () {  
54 - handleJs($, mapFile, cb);  
55 - });  
56 - },  
57 - /**  
58 - * 处理单屏地图页面  
59 - * @param cb  
60 - */  
61 - handleAlonePage: function (cb) {  
62 - var data = fs.readFileSync(aloneMapWrapFile, 'utf-8');  
63 - var $ = cheerio.load(data);  
64 - handleCss($, function () {  
65 - handleJs($, aloneMapWrapFile, cb);  
66 - });  
67 - },  
68 - /**  
69 - * 处理单屏主页  
70 - * @param cb  
71 - */  
72 - handleAloneHomePage: function (cb) {  
73 - var data = fs.readFileSync(aloneHomeWrapFile, 'utf-8');  
74 - var $ = cheerio.load(data);  
75 - handleCss($, function () {  
76 - handleJs($, aloneHomeWrapFile, cb);  
77 - });  
78 - }  
79 -  
80 -};  
81 -  
82 -/**  
83 - * 处理css  
84 - * @type {any}  
85 - */  
86 -var handleCss = function ($, cb) {  
87 - var cssArray = $('link[rel=stylesheet][merge]');  
88 - //按 merge 值分组  
89 - var cssMap = {}, mergeName;  
90 - for (var i = 0, c; c = cssArray[i++];) {  
91 - mergeName = $(c).attr('merge');  
92 - if (!cssMap[mergeName])  
93 - cssMap[mergeName] = [];  
94 - cssMap[mergeName].push(dest + _static + $(c).attr('href'));  
95 - //remove  
96 - $(c).remove();  
97 - }  
98 - //按 merge 合并压缩css  
99 - var ks = get_keys(cssMap), index = 0;  
100 - (function () {  
101 - if (index >= ks.length) {  
102 - cb && cb();  
103 - return;  
104 - }  
105 - var k = ks[index];  
106 - index++;  
107 - var f = arguments.callee;  
108 - //合并css  
109 - new CleanCSS().minify(cssMap[k], function (error, out) {  
110 - var data = out.styles;  
111 - var fName = (k + '_' + md5(data)) + '.css';  
112 - //写入 assets css 目录下  
113 - var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'css' + sp + fName;  
114 - fs.open(descFile, 'a', function (err, fd) {  
115 -  
116 - fs.write(fd, data, function () {  
117 - var tag = '<link rel="stylesheet" href="/real_control_v2/assets/css/' + fName + '"/>';  
118 - if ($('head').length > 0)  
119 - $('head').append(tag);  
120 - else {  
121 - if($('link').length > 0)  
122 - $('link').last().before(tag);  
123 - else  
124 - $('div').first().before(tag);  
125 - }  
126 - console.log(k + ' css', '结束,下一个');  
127 - f();  
128 - });  
129 - });  
130 - });  
131 - })();  
132 -};  
133 -  
134 -/**  
135 - * 处理js  
136 - */  
137 -var handleJs = function ($, file, cb) {  
138 - var scriptArray = $('script[merge]');  
139 - //按 merge 值分组  
140 - var jsMap = {}, mergeName;  
141 - for (var i = 0, s; s = scriptArray[i++];) {  
142 - mergeName = $(s).attr('merge');  
143 - if (!jsMap[mergeName])  
144 - jsMap[mergeName] = [];  
145 - jsMap[mergeName].push(dest + _static + $(s).attr('src'));  
146 - //remove  
147 - $(s).remove();  
148 - }  
149 -  
150 - //按 merge 合并压缩js  
151 - var ks = get_keys(jsMap), index = 0;  
152 - (function () {  
153 - if (index >= ks.length) {  
154 - write(file, $.html());  
155 - console.log(file + ' 结束'.green);  
156 - cb && cb();  
157 - return;  
158 - }  
159 - var k = ks[index];  
160 - index++;  
161 - var f = arguments.callee;  
162 - //合并压缩js  
163 - var result = UglifyJS.minify(jsMap[k]);  
164 - var data = result.code;  
165 - var fName = (k + '_' + md5(data)) + '.js';  
166 - //写入 assets js 目录下  
167 - var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'js' + sp + fName;  
168 - fs.open(descFile, 'a', function (err, fd) {  
169 -  
170 - fs.write(fd, data, function () {  
171 - var tag = '<script src="/real_control_v2/assets/js/' + fName + '"></script>';  
172 - if ($('body').length > 0)  
173 - $('body').append(tag);  
174 - else {  
175 - //没有body 就写在尾部  
176 - $('*').last().after(tag);  
177 - }  
178 - console.log(k + ' js', '结束,下一个');  
179 - f();  
180 - });  
181 - });  
182 - })();  
183 -};  
184 -  
185 -var get_keys = function (json) {  
186 - var array = [];  
187 - for (var key in json) {  
188 - array.push(key);  
189 - }  
190 - return array;  
191 -};  
192 -  
193 -function md5(text) {  
194 - return crypto.createHash("md5").update(text).digest("hex");  
195 -}  
196 -  
197 -function write(file, text) {  
198 - fs.writeFile(file, text, function (err) {  
199 - if (err) {  
200 - console.log(err.toString().red);  
201 - process.exit();  
202 - }  
203 - console.log(file.green);  
204 - });  
205 -}  
206 - 1 +/**
  2 + * 处理线调文件
  3 + */
  4 +var fs = require('fs')
  5 + , cheerio = require('cheerio')
  6 + , minifier = require('./minifier')
  7 + , crypto = require("crypto")
  8 + , CleanCSS = require('clean-css');
  9 +;
  10 +
  11 +var platform = process.platform;
  12 +var iswin = platform=='win32';
  13 +var sp = platform=='win32'?'\\':'/';
  14 +//不参与的目录
  15 +var pName = 'bsth_control'
  16 + , path = process.cwd()
  17 + //根目录
  18 + , root = path.substr(0, path.indexOf(sp + 'src'+sp+'main'))
  19 + , workspace = root.substr(0, root.lastIndexOf(sp + pName))
  20 + //临时目录
  21 + , dest = (workspace + sp + pName + '@fatso_copy')//.replace(/\//g, '\\')
  22 + , _static = sp + 'src'+sp+'main'+sp+'resources'+sp+'static';
  23 +
  24 +
  25 +var mainFile = dest + _static + sp + 'real_control_v2'+sp+'main.html';
  26 +var aloneMapWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'map'+sp+'alone_wrap.html';
  27 +var aloneHomeWrapFile = dest + _static + sp + 'real_control_v2'+sp+'alone_page'+sp+'home'+sp+'home_wrap.html';
  28 +var mapFile = dest + _static + sp + 'real_control_v2'+sp+'mapmonitor'+sp+'real.html';
  29 +var realCtl = {
  30 + /**
  31 + * 处理线调首页
  32 + */
  33 + handleMain: function (cb) {
  34 + //处理main.html
  35 + var data = fs.readFileSync(mainFile, 'utf-8'),
  36 + $ = cheerio.load(data);
  37 + handleCss($, function () {
  38 + handleJs($, mainFile, cb);
  39 + });
  40 +
  41 +
  42 + },
  43 + /**
  44 + * 处理地图模块
  45 + * @param cb
  46 + */
  47 + handleMap: function (cb) {
  48 + //读取文件
  49 + var data = fs.readFileSync(mapFile, 'utf-8')
  50 + , $ = cheerio.load(data);
  51 +
  52 + handleCss($, function () {
  53 + handleJs($, mapFile, cb);
  54 + });
  55 + },
  56 + /**
  57 + * 处理单屏地图页面
  58 + * @param cb
  59 + */
  60 + handleAlonePage: function (cb) {
  61 + var data = fs.readFileSync(aloneMapWrapFile, 'utf-8');
  62 + var $ = cheerio.load(data);
  63 + handleCss($, function () {
  64 + handleJs($, aloneMapWrapFile, cb);
  65 + });
  66 + },
  67 + /**
  68 + * 处理单屏主页
  69 + * @param cb
  70 + */
  71 + handleAloneHomePage: function (cb) {
  72 + var data = fs.readFileSync(aloneHomeWrapFile, 'utf-8');
  73 + var $ = cheerio.load(data);
  74 + handleCss($, function () {
  75 + handleJs($, aloneHomeWrapFile, cb);
  76 + });
  77 + }
  78 +
  79 +};
  80 +
  81 +/**
  82 + * 处理css
  83 + * @type {any}
  84 + */
  85 +var handleCss = function ($, cb) {
  86 + var cssArray = $('link[rel=stylesheet][merge]');
  87 + //按 merge 值分组
  88 + var cssMap = {}, mergeName;
  89 + for (var i = 0, c; c = cssArray[i++];) {
  90 + mergeName = $(c).attr('merge');
  91 + if (!cssMap[mergeName])
  92 + cssMap[mergeName] = [];
  93 + cssMap[mergeName].push(dest + _static + $(c).attr('href'));
  94 + //remove
  95 + $(c).remove();
  96 + }
  97 + //按 merge 合并压缩css
  98 + var ks = get_keys(cssMap), index = 0;
  99 + (function () {
  100 + if (index >= ks.length) {
  101 + cb && cb();
  102 + return;
  103 + }
  104 + var k = ks[index];
  105 + index++;
  106 + var f = arguments.callee;
  107 + //合并css
  108 + new CleanCSS().minify(cssMap[k], function (error, out) {
  109 + var data = out.styles;
  110 + var fName = (k + '_' + md5(data)) + '.css';
  111 + //写入 assets css 目录下
  112 + var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'css' + sp + fName;
  113 + fs.open(descFile, 'a', function (err, fd) {
  114 +
  115 + fs.write(fd, data, function () {
  116 + var tag = '<link rel="stylesheet" href="/real_control_v2/assets/css/' + fName + '"/>';
  117 + if ($('head').length > 0)
  118 + $('head').append(tag);
  119 + else {
  120 + if($('link').length > 0)
  121 + $('link').last().before(tag);
  122 + else
  123 + $('div').first().before(tag);
  124 + }
  125 + console.log(k + ' css', '结束,下一个');
  126 + f();
  127 + });
  128 + });
  129 + });
  130 + })();
  131 +};
  132 +
  133 +/**
  134 + * 处理js
  135 + */
  136 +var handleJs = function ($, file, cb) {
  137 + var scriptArray = $('script[merge]');
  138 + //按 merge 值分组
  139 + var jsMap = {}, mergeName;
  140 + for (var i = 0, s; s = scriptArray[i++];) {
  141 + mergeName = $(s).attr('merge');
  142 + if (!jsMap[mergeName])
  143 + jsMap[mergeName] = [];
  144 + jsMap[mergeName].push(dest + _static + $(s).attr('src'));
  145 + //remove
  146 + $(s).remove();
  147 + }
  148 +
  149 + //按 merge 合并压缩js
  150 + var ks = get_keys(jsMap), index = 0;
  151 + (function () {
  152 + if (index >= ks.length) {
  153 + write(file, $.html());
  154 + console.log(file + ' 结束'); // 移除.green调用
  155 + cb && cb();
  156 + return;
  157 + }
  158 + var k = ks[index];
  159 + index++;
  160 + var f = arguments.callee;
  161 + //合并压缩js
  162 + try {
  163 + // 先合并文件内容
  164 + let code = '';
  165 + for(let j = 0; j < jsMap[k].length; j++) {
  166 + code += fs.readFileSync(jsMap[k][j], 'utf8') + '\n';
  167 + }
  168 + // 使用Terser压缩
  169 + var data = minifier.mini(code);
  170 + if (code !== '' && data === '') {
  171 + console.error('压缩出错')
  172 + process.exit();
  173 + }
  174 + var fName = (k + '_' + md5(data)) + '.js';
  175 + //写入 assets js 目录下
  176 + var descFile = dest + _static + sp + 'real_control_v2'+sp+'assets'+sp+'js' + sp + fName;
  177 + fs.open(descFile, 'a', function (err, fd) {
  178 + fs.write(fd, data, function () {
  179 + var tag = '<script src="/real_control_v2/assets/js/' + fName + '"></script>';
  180 + if ($('body').length > 0)
  181 + $('body').append(tag);
  182 + else {
  183 + //没有body 就写在尾部
  184 + $('*').last().after(tag);
  185 + }
  186 + console.log(k + ' js', '结束,下一个');
  187 + f();
  188 + });
  189 + });
  190 + } catch (e) {
  191 + console.error('合并压缩错误:', e);
  192 + process.exit();
  193 + }
  194 + })();
  195 +};
  196 +
  197 +var get_keys = function (json) {
  198 + var array = [];
  199 + for (var key in json) {
  200 + array.push(key);
  201 + }
  202 + return array;
  203 +};
  204 +
  205 +function md5(text) {
  206 + return crypto.createHash("md5").update(text).digest("hex");
  207 +}
  208 +
  209 +function write(file, text) {
  210 + fs.writeFile(file, text, function (err) {
  211 + if (err) {
  212 + console.log(err.toString()); // 移除.red调用
  213 + process.exit();
  214 + }
  215 + console.log(file); // 移除.green调用
  216 + });
  217 +}
  218 +
207 module.exports = realCtl; 219 module.exports = realCtl;
208 \ No newline at end of file 220 \ No newline at end of file
src/main/resources/fatso/minifier.js
1 -/**  
2 - * @author PanZhao  
3 - * @date 2016年3月17日 下午12:44:06  
4 - */  
5 -var fs = require('fs');  
6 -var UglifyJS = require("uglify-js");  
7 -  
8 -var platform = process.platform;  
9 -var iswin = platform=='win32';  
10 -var separator = platform=='win32'?'\\':'/';  
11 -var minifier = {  
12 -  
13 - mergeAndMini: function(fileArray,scriptString, root, file){  
14 - var len = fileArray.length;  
15 - for(var i = 0; i < len; i ++){  
16 - fileArray[i] = root + fileArray[i].split('/').join(separator);  
17 - }  
18 -  
19 - var result, indoorRs;  
20 -  
21 - try {  
22 - if(fileArray && len > 0)  
23 - result = UglifyJS.minify(fileArray);  
24 -  
25 - if(scriptString)  
26 - indoorRs = UglifyJS.minify(scriptString, {fromString: true});  
27 - } catch (e) {  
28 - console.log(e);  
29 - console.log(file.red);  
30 - process.exit();  
31 - }  
32 -  
33 - return {outside: result?result.code:'', inside: indoorRs?indoorRs.code:''};  
34 - },  
35 - mini: function(file){  
36 - return UglifyJS.minify(file).code;  
37 - }  
38 -}  
39 - 1 +var fs = require('fs');
  2 +var Terser = require('terser');
  3 +
  4 +var platform = process.platform;
  5 +var iswin = platform=='win32';
  6 +var separator = platform=='win32'?'\\':'/';
  7 +var minifier = {
  8 +
  9 + mergeAndMini: function(fileArray, scriptString, root, file) {
  10 + var len = fileArray.length;
  11 + for(var i = 0; i < len; i ++){
  12 + fileArray[i] = root + fileArray[i].split('/').join(separator);
  13 + }
  14 +
  15 + var result, indoorRs;
  16 +
  17 + try {
  18 + if(fileArray && len > 0) {
  19 + // Terser可以直接接受文件路径数组
  20 + result = Terser.minify_sync(fs.readFileSync(fileArray[0], 'utf8'));
  21 + // 如果有多个文件,需要先合并内容
  22 + if(len > 1) {
  23 + let code = '';
  24 + for(let j = 0; j < len; j++) {
  25 + code += fs.readFileSync(fileArray[j], 'utf8') + '\n';
  26 + }
  27 + result = Terser.minify_sync(code);
  28 + }
  29 + }
  30 +
  31 + if(scriptString) {
  32 + // Terser不需要fromString选项,直接传递代码字符串
  33 + indoorRs = Terser.minify_sync(scriptString);
  34 + }
  35 + } catch (e) {
  36 + console.log(e);
  37 + console.log(file); // 移除.red调用,除非有chalk等库
  38 + process.exit();
  39 + }
  40 +
  41 + return {outside: result && !result.error ? result.code : '', inside: indoorRs && !indoorRs.error ? indoorRs.code : ''};
  42 + },
  43 +
  44 + mini: function(file) {
  45 + try {
  46 + // 检查file是文件路径还是代码字符串
  47 + if(typeof file === 'string' && fs.existsSync(file)) {
  48 + const code = fs.readFileSync(file, 'utf8');
  49 + const result = Terser.minify_sync(code);
  50 + return result && !result.error ? result.code : '';
  51 + } else {
  52 + // 假设是代码字符串
  53 + const result = Terser.minify_sync(file);
  54 + return result && !result.error ? result.code : '';
  55 + }
  56 + } catch (e) {
  57 + console.log(e);
  58 + return '';
  59 + }
  60 + }
  61 +};
  62 +
40 module.exports = minifier; 63 module.exports = minifier;
41 \ No newline at end of file 64 \ No newline at end of file
src/main/resources/fatso/package.json
1 -{  
2 - "name": "fatso",  
3 - "version": "1.0.0",  
4 - "description": "子页面js检查、合并、压缩等处理",  
5 - "main": "start.js",  
6 - "scripts": {  
7 - "test": "echo \"Error: no test specified\" && exit 1"  
8 - },  
9 - "author": "panzhaov5",  
10 - "license": "ISC",  
11 - "dependencies": {  
12 - "cheerio": "^0.20.0",  
13 - "clean-css": "^4.0.12",  
14 - "colors": "^1.3.3",  
15 - "eventproxy": "^0.3.4",  
16 - "uglify-js": "^2.6.2"  
17 - }  
18 -} 1 +{
  2 + "name": "fatso",
  3 + "version": "1.0.0",
  4 + "description": "子页面js检查、合并、压缩等处理",
  5 + "main": "start.js",
  6 + "scripts": {
  7 + "test": "echo \"Error: no test specified\" && exit 1"
  8 + },
  9 + "author": "panzhaov5",
  10 + "license": "ISC",
  11 + "dependencies": {
  12 + "cheerio": "^0.20.0",
  13 + "clean-css": "^4.0.12",
  14 + "colors": "^1.3.3",
  15 + "eventproxy": "^0.3.4",
  16 + "terser": "^5.44.0",
  17 + "uglify-js": "^2.6.2"
  18 + }
  19 +}
src/main/resources/static/gpsTest/test.html
1 -<!DOCTYPE html>  
2 -<html>  
3 -<head>  
4 -<meta charset="UTF-8">  
5 -<title>GPS点测试</title>  
6 -<meta name=”renderer” content=”webkit”>  
7 -<meta http-equiv=”X-UA-Compatible” content=”IE=Edge,chrome=1″>  
8 -  
9 -<meta http-equiv="Pragma" content="no-cache">  
10 -<meta http-equiv="Cache-control" content="no-cache">  
11 -<meta http-equiv="Cache" content="no-cache">  
12 -<head>  
13 -<!-- select2 下拉框插件 -->  
14 -<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css"  
15 - rel="stylesheet" type="text/css" />  
16 -<style type="text/css">  
17 -html,body {  
18 - height: 100%;  
19 - overflow: hidden;  
20 -}  
21 -  
22 -#mapContainer {  
23 - width: 100%;  
24 - height: calc(100% - 93px);  
25 -}  
26 -  
27 -form {  
28 - padding: 25px;  
29 -}  
30 -  
31 -form .item {  
32 - display: inline-block;  
33 -}  
34 -  
35 -form .item input {  
36 - height: 26px;  
37 - width: 110px;  
38 -}  
39 -  
40 -form .item select {  
41 - height: 32px;  
42 -}  
43 -</style>  
44 -</head>  
45 -<body>  
46 - <form action="">  
47 - <div class="item">  
48 - 线路: <select name="xl" style="width: 150px;">  
49 - </select>  
50 - </div>  
51 - <div class="item">  
52 - 方向: <select name="directions" style="width: 70px;">  
53 - <option value="0">上行</option>  
54 - <option value="1">下行</option>  
55 - </select>  
56 - </div>  
57 - <div class="item">  
58 - 设备号: <input name="device" value="059L0903" />  
59 - </div>  
60 - <div class="item">  
61 - 开始时间戳: <input type="number" name="startTime" value="1461380940000" />  
62 - </div>  
63 - <div class="item">  
64 - 结束时间戳: <input type="number" name="endTime" value="1461381960000" />  
65 - </div>  
66 - <div class="item">  
67 - <input type="button" value="查询GPS轨迹" onclick="searchGps()">  
68 - </div>  
69 - <div class="item">  
70 - <input type="button" value="开启测距" onclick="myDis.open();"  
71 - style="width: 75px" /> <input type="button" value="关闭测距"  
72 - onclick="myDis.close()" style="width: 75px" />  
73 -  
74 - </div>  
75 -  
76 - <div class="item">  
77 - <a target="_blank" href="http://tool.chinaz.com/Tools/unixtime.aspx"  
78 - style="font-size: 12px; color: red;">毫秒时间戳转换</a>  
79 - </div>  
80 - </form>  
81 -  
82 - <div id="mapContainer"></div>  
83 - <script src="/assets/plugins/pinyin.js"></script>  
84 - <script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>  
85 - <script src="/assets/plugins/jquery.serializejson.js"></script>  
86 - <script  
87 - src="//api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>  
88 - <script type="text/javascript"  
89 - src="//api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>  
90 - <!-- moment.js 日期处理类库 -->  
91 - <script src="/assets/plugins/moment-with-locales.js"></script>  
92 - <!-- select2 下拉框 -->  
93 - <script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>  
94 - <script>  
95 -  
96 - var inMark = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA1CAYAAABSrotqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAGW0lEQVRYw62XX2wc1RWHv3vv7NhrQkKCIa0poaKRmjdUFUGr+IH+ITy0Kg/0qVRV1ZamVV95al94oPSBVmoRUZTIKRFBLW1aapBK6gIChYTgFJRQHoITqCCO7eC1vY7t2Z1/954+zK69Xs9mx4mPdLWjmTvnO79z7zl3VlHAvv3XmXuM8R4EBpVSu1DqpiQRBJlH5APn5KQ4NzzycP/pbr7U1R5+6y+Vr2njP6EVX1FKoRTZAOJUQMBlP4gIIrwtNvnlyMO3vL4u4AND49vMjZsOaqMfUgpMA+ZEiBJIrJAkQslT+B4YrXACzknj1x4N6rWfnfrJ7XNdgd888NEOs+XmEaPVLq0zRVEiRGnmsGlJsnKtFfT4ih5PIQJWwDr3QRJUHzix9wsXOwLvOzDW72269ZQxeqcxIAL1WLAtoDzgMlgr+vwsG6kTrOXDoDL91Xcf/eLM8pxWuJT7j4hSO5UC66AW5cM6mXNCEDmsA60UAjv9rf1HWoU1L9Tg0OT3dU/5Wd9TeFpRiwWRFZhNhSvTMbX5hDh0uNhR6jWUb/LYvL0H460kSyko+xrrhCgVJAp/MPrzgecAMVkuH/PuuHv335VSW3s8TZgIrgUWzKdMXagRLqU4KygF4gRnhSiwLFZivF6N32tWAhTwPUWSCmhz18RC3z4+fsNpgN3f+/H9oO4ESO3qNNaupFQ+qWeRa5U7AGY/rlO7kq5Kb+qkUUrqzru/+8M9zTXUeKUHs92miG3LmlhhbjJCGVVoVCdCnG3ZyamgVRaQLvV+B9AeoJUu3QtgdLZWy6mspgigzdpyFS+/ZwTVhBv7/WyOgDbZBtTa3NMEKqX0Dsg6RqvFoUN3cOyczr2f1F3+FtbmDkB5gEKzFQFr215OBe3lO9Yu33GSrg47XUnxtiYQRKUgpdadCaAbnSMfmK+8Pf3L74ssATSAtorSt7a/vKnPUA87pMhTa9cAKJfzMwKysAwU56aUWQvcssUQJ/lA6aBw8xaPJHe+m4asLERcOpb3cvkGg1/SeEatGSZn+CVFeZPJDQRnxwDJgDY5nzcniIXbBkq5zo3Jyqg5PAMDAz5BlL/oLo0uLAOT4MqZvEnWCbEoPjfgU/LUKoDRK/BSSXHbgE8kqmOzt+HiGUA8QBY+Ov127823u0YAq1VGDno0n9/hs7BoWQocSSKIQKmk6OvTbN5sqAZCLeqw3uBmz791ChBFdmL4g4dnziptdnXYYhit2FxWlH2N72WHcmqhFjkW61c/xsTZc6OP3PIlIPayAHA2Dt/wem/oCLROqAZCNchU5B3AnczF9dcBR0sKxQZzI4U9rNOS+vwrDWHLJ76bOH7gTZBwo2GCBDOv/OF4Q+EyUCb+sW/JJeGxDQfG4b8vjRwK2hUKYNPF6gsbDUyC6lHAtgMB3NTfnv5ns+dtkL6F2eF9/6KRznagXDyxvyZx9PJG4WxUf+niif01Wtr8KiBgo8VPj24UMA5mXqAlne1AAPfhc79+DZHZ66aJq0wM/eJVWtKZB5Tqu0frNlr80/Xy0jB4fmbsZNQVCNj6+LlDoFxh7+2mkHjy3OFGOtse5U2H3sE/Xn5ZeT33dfJ5tdYmNjk5+tPt9wMhbd8Fed8DAqTJwuyhaxWYLM4MASk5HyGdPkDshT8/+hLiLq8XJuIu/+/Ir4bz0nk1oMyNHgttuPTseoGuvnh4/uzwqtorBATszNnXDqyvoUu48N6rB2mrvSJAAHd+/48mbVgr3AhsGDw/NvTIFG2lUBQoQFr/5L2nipSIgAvH//s0HTZL01QXPwro3X3o8rAu9expfdBeFpJGx0b3fvYhckqhqMJllVFl/PfdFNanx5/qpq6IwmZQvYPPTB9XpvTlPIWSxqOjez/z9YY6181ZN3NAEs5d+k2nCfHc5JNA0g1WVGGLyspbynh3tSp0aXLm9N7tg0XUFVXYVJlG81NPrlE3P/k7srUr1OyLAgHS/zzxjRex9v3mDbHp+2d/u+fFBrBwqoqaUKnEYfXS480b4dzk41QqMV125vWYBvoGn5l+596Dn74D9K0z6MY/4M7WvqkESOPK+GNRlsRm3eXNK+SwVYkPlBpBacA05uvGfVgpBSFr2K4RRALE5GykTif+toZT1WFu87pVSft1Asy1q70WhYrVwOa4ZoXred7JOq7h/wF6az0ukZgX/AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0wNy0yNVQyMTo1MDo0MyswODowMOgS43cAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMTEtMjBUMjI6NDc6MTErMDg6MDAou1syAAAATnRFWHRzb2Z0d2FyZQBJbWFnZU1hZ2ljayA2LjguOC0xMCBRMTYgeDg2XzY0IDIwMTUtMDctMTkgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcFDJw1AAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OkhlaWdodAA1Mwmpb+QAAAAWdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMjgpleAmAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADEzODQ5NTg4MzEXUMEwAAAAE3RFWHRUaHVtYjo6U2l6ZQA0LjUzS0JC/AyPiAAAAFp0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC93d3cuZWFzeWljb24ubmV0L2Nkbi1pbWcuZWFzeWljb24uY24vc3JjLzExMjk3LzExMjk3NzIucG5nqXNeUQAAAABJRU5ErkJggg==';  
97 - var outMark = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAvCAMAAAC18jgTAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABO1BMVEUAAAAiu4ggv40gvowgvowgvosgvowfvo0jv44hv40gvosgvowcxo4fvowgvowdvYogv4whvo0gvowhvYwrqoAhv4wnxIkgv4wA//8gvIshvosgvowhvIshvowgvowrv5Ugv4ohvosgvowhv4wgv4whvYwXuYsgvowgvowiu4gfvo0zzJkhvowktpIgvowgv40hvo0gv4wgvowAqqogvosgvowjv4sgvowivIskv4khvowgvYsiu44hvosfvI0hv4sgvYofvowgvowgv40gv4wjuYsgvowhvowfvIsgvYsgvo0hvoxAv4Agv4wgvowgvoshvo0mv4whvowgvowfwo8gv4wgv40duokAAAAfvYsgvYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAYjGUYj2kAAAAAAAAAAAAgvoz///9v2GMAAAAAZ3RSTlMAD1eZyOr4miSc950Jivoj0i/pfAarDaoBWH3JLuv5DDDL0ZunbQvu/h6CBbQO5jhOkNwDtfAsz0Qc42EtdUGLYKKOwsYW7/s5f7nMBCj9N40U8/YZh48aAaOmAggNERMWF0lLGBkanzLKGQAAAAFiS0dEaMts9CIAAAGZSURBVDjLfZRnW8IwFIUvyN6FUlCx4AZxKw7cA/eeKKNUwfz/f2ChZNAmnC+U+54m9548KQCRwznicns8bpfX6QC7fP4AIgoEfRYcCkfQgCLhEMujMWRTLEq55EYcuSXyPpcbjv4aoRgSKGb2EUZChXvzRcSGSHfaIP0fT0iyLCXitOI38qP5JBWzKSVFE3OAk/I0HiudJMVR8JL1FRqMQgb3ggs/Jthox3B1HIg3wxoyuDoBKn6UWYOMqyp4uIYsNfC3yNEtJoc3OQXT3DFJmDNMUCkaFI1yFubmqcMedb4AsMAeVqaYzbGHtWj4l5bFx51f6a64mhca/OaeayK+3m9qY5PPS1tk7G0eV3doMLtlToN7bLT7JZvhYPByHqoWfmS93ceD/CRtNcApy89kG4fiOeXlCucLAoULzC+vgCvSxjUIdGPy2zuR4b53jx8eQagn5gi5en5B6PVtiAHeEfoYxqHiUT9FrNrT17f5a8O1eqOptXT951fXW1qzUa9ZXtfanU7nry/jsa1VuSsYtjZ3BdIDFin/A1AVNdoKDyAYAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTI1VDIxOjUwOjQzKzA4OjAw6BLjdwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0xMS0yMFQyMjo0NzoxMyswODowML8kShsAAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTEwIFExNiB4ODZfNjQgMjAxNS0wNy0xOSBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZwUMnDUAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAXdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADQ3F9+avAAAABZ0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAzMtBbOHkAAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTM4NDk1ODgzM/leoBwAAAATdEVYdFRodW1iOjpTaXplADQuMDFLQkKe5chzAAAAWnRFWHRUaHVtYjo6VVJJAGZpbGU6Ly8vaG9tZS93d3dyb290L3d3dy5lYXN5aWNvbi5uZXQvY2RuLWltZy5lYXN5aWNvbi5jbi9zcmMvMTEyOTcvMTEyOTc4Ni5wbmetpUpEAAAAAElFTkSuQmCC';  
98 -  
99 - var inOuts = [outMark, inMark];  
100 -  
101 - var stationCodeMap = {};  
102 -  
103 - var map = new BMap.Map("mapContainer");  
104 - map.centerAndZoom(new BMap.Point(121.544336, 31.221315), 15);  
105 - map.enableScrollWheelZoom();  
106 - //中心点和缩放级别  
107 - map.setCurrentCity("上海");  
108 - var myDis = new BMapLib.DistanceTool(map);  
109 -  
110 -  
111 - $.get('/line/all', function(rs){  
112 - var data = [];  
113 - $.each(rs, function(){  
114 - data.push({id: this.id, text: this.name});  
115 - });  
116 -  
117 - initPinYinSelect2('select[name=xl]', data);  
118 - });  
119 -  
120 - function searchGps(){  
121 - var params = $('form').serializeJSON();  
122 - //查询线路路由站点  
123 - $.get('/test/gps/route', params, function(rs){  
124 - var array = rs[0].children[0].children  
125 - ,coords,circle, cdsArray, points, polygon;  
126 - //画出站点  
127 - console.log(array);  
128 - $.each(array, function(){  
129 - stationCodeMap[this.stationStationCod] = this.name;  
130 - if(this.stationShapesType === 'r'){  
131 - //画圆  
132 - coords = this.stationBJwpoints.split(' ');  
133 - circle = new BMap.Circle(new BMap.Point(coords[0], coords[1]),this.stationRadius);  
134 - circle.setStrokeColor('red');  
135 - circle.setStrokeWeight(2)  
136 - map.addOverlay(circle);  
137 - }  
138 - else if(this.stationShapesType === 'd'){  
139 - //画多边形  
140 - coords = this.stationBPolygonGrid.substring(9, this.stationBPolygonGrid.length - 2);  
141 - cdsArray = coords.split(',');  
142 - points = [];  
143 - $.each(cdsArray, function(){  
144 - coords = this.split(' ');  
145 - points.push(new BMap.Point(coords[0], coords[1]));  
146 - });  
147 -  
148 - polygon = new BMap.Polygon(points, {strokeColor:"red", strokeWeight:2, strokeOpacity:0.5});  
149 - map.addOverlay(polygon);  
150 - }  
151 - });  
152 - coords = array[array.length / 2].stationBJwpoints.split(' ');  
153 - map.setCenter(new BMap.Point(coords[0], coords[1]))  
154 - });  
155 -  
156 - //查询gps点  
157 - $.get('/gps/history/' + params.device, params, function(gpsArray){  
158 - console.log(stationCodeMap);  
159 - var marker, label, point, state, text;  
160 - $.each(gpsArray, function(){  
161 - point = new BMap.Point(this.lon, this.lat);  
162 - marker = new BMap.Marker(point);  
163 - state = this.inout_stop;  
164 -  
165 - if(state == 0 || state == 1){  
166 - text = state == 0?'出':'进';  
167 -  
168 - console.log(stationCodeMap[this.stopNo], this);  
169 - marker.setIcon(new BMap.Icon(inOuts[this.inout_stop], new BMap.Size(25,25)));  
170 - label = new BMap.Label(  
171 - stationCodeMap[this.stopNo] + '/' +moment(this.ts).format('HH:mm.ss') + ' -'+text  
172 - , {position: point, offset: new BMap.Size(-25,-18)});  
173 - marker.setLabel(label);  
174 - }  
175 - else{  
176 - label = new BMap.Label(moment(this.ts).format('HH:mm.ss')  
177 - , {position: point, offset: new BMap.Size(-25,-18)});  
178 - marker.setLabel(label);  
179 - }  
180 -  
181 - map.addOverlay(marker);  
182 - });  
183 - });  
184 - }  
185 -  
186 -  
187 - /**  
188 - * 支持拼音搜索的select2  
189 - * @param selector  
190 - * @param data  
191 - */  
192 - function initPinYinSelect2(selector, data, cb){  
193 -  
194 - $.each(data, function(){  
195 - this.fullChars = pinyin.getFullChars(this.text).toUpperCase();  
196 - this.camelChars = pinyin.getCamelChars(this.text);  
197 - });  
198 -  
199 - $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {  
200 - $(selector).select2({  
201 - data: data,  
202 - matcher: oldMatcher(function(term, text, item){  
203 - var upTerm = term.toUpperCase();  
204 - if(item.fullChars.indexOf(upTerm) != -1  
205 - || item.camelChars.indexOf(upTerm) != -1)  
206 - return true;  
207 -  
208 - return text.indexOf(term) != -1;  
209 - })  
210 - });  
211 -  
212 - cb && cb();  
213 - });  
214 -  
215 - return $(selector);  
216 - }  
217 -</script>  
218 -</body>  
219 -</html> 1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 +<meta charset="UTF-8">
  5 +<title>GPS点测试</title>
  6 +<meta name=”renderer” content=”webkit”>
  7 +<meta http-equiv=”X-UA-Compatible” content=”IE=Edge,chrome=1″>
  8 +
  9 +<meta http-equiv="Pragma" content="no-cache">
  10 +<meta http-equiv="Cache-control" content="no-cache">
  11 +<meta http-equiv="Cache" content="no-cache">
  12 +<head>
  13 +<!-- select2 下拉框插件 -->
  14 +<link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css"
  15 + rel="stylesheet" type="text/css" />
  16 +<style type="text/css">
  17 +html,body {
  18 + height: 100%;
  19 + overflow: hidden;
  20 +}
  21 +
  22 +#mapContainer {
  23 + width: 100%;
  24 + height: calc(100% - 93px);
  25 +}
  26 +
  27 +form {
  28 + padding: 25px;
  29 +}
  30 +
  31 +form .item {
  32 + display: inline-block;
  33 +}
  34 +
  35 +form .item input {
  36 + height: 26px;
  37 + width: 110px;
  38 +}
  39 +
  40 +form .item select {
  41 + height: 32px;
  42 +}
  43 +</style>
  44 +</head>
  45 +<body>
  46 + <form action="">
  47 + <div class="item">
  48 + 线路: <select name="xl" style="width: 150px;">
  49 + </select>
  50 + </div>
  51 + <div class="item">
  52 + 方向: <select name="directions" style="width: 70px;">
  53 + <option value="0">上行</option>
  54 + <option value="1">下行</option>
  55 + </select>
  56 + </div>
  57 + <div class="item">
  58 + 设备号: <input name="device" value="059L0903" />
  59 + </div>
  60 + <div class="item">
  61 + 开始时间戳: <input type="number" name="startTime" value="1461380940000" />
  62 + </div>
  63 + <div class="item">
  64 + 结束时间戳: <input type="number" name="endTime" value="1461381960000" />
  65 + </div>
  66 + <div class="item">
  67 + <input type="button" value="查询GPS轨迹" onclick="searchGps()">
  68 + </div>
  69 + <div class="item">
  70 + <input type="button" value="开启测距" onclick="myDis.open();"
  71 + style="width: 75px" /> <input type="button" value="关闭测距"
  72 + onclick="myDis.close()" style="width: 75px" />
  73 +
  74 + </div>
  75 +
  76 + <div class="item">
  77 + <a target="_blank" href="http://tool.chinaz.com/Tools/unixtime.aspx"
  78 + style="font-size: 12px; color: red;">毫秒时间戳转换</a>
  79 + </div>
  80 + </form>
  81 +
  82 + <div id="mapContainer"></div>
  83 + <script src="/assets/plugins/pinyin.js"></script>
  84 + <script src="/metronic_v4.5.4/plugins/jquery.min.js"></script>
  85 + <script src="/assets/plugins/jquery.serializejson.js"></script>
  86 + <script
  87 + src="//api.map.baidu.com/api?v=2.0&ak=1TgEKvYqohJyeGXnN6yHSSTb4psOarQw"></script>
  88 + <script type="text/javascript"
  89 + src="//api.map.baidu.com/library/DistanceTool/1.2/src/DistanceTool_min.js"></script>
  90 + <!-- moment.js 日期处理类库 -->
  91 + <script src="/assets/plugins/moment-with-locales.js"></script>
  92 + <!-- select2 下拉框 -->
  93 + <script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>
  94 + <script>
  95 +
  96 + var inMark = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAA1CAYAAABSrotqAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAGW0lEQVRYw62XX2wc1RWHv3vv7NhrQkKCIa0poaKRmjdUFUGr+IH+ITy0Kg/0qVRV1ZamVV95al94oPSBVmoRUZTIKRFBLW1aapBK6gIChYTgFJRQHoITqCCO7eC1vY7t2Z1/954+zK69Xs9mx4mPdLWjmTvnO79z7zl3VlHAvv3XmXuM8R4EBpVSu1DqpiQRBJlH5APn5KQ4NzzycP/pbr7U1R5+6y+Vr2njP6EVX1FKoRTZAOJUQMBlP4gIIrwtNvnlyMO3vL4u4AND49vMjZsOaqMfUgpMA+ZEiBJIrJAkQslT+B4YrXACzknj1x4N6rWfnfrJ7XNdgd888NEOs+XmEaPVLq0zRVEiRGnmsGlJsnKtFfT4ih5PIQJWwDr3QRJUHzix9wsXOwLvOzDW72269ZQxeqcxIAL1WLAtoDzgMlgr+vwsG6kTrOXDoDL91Xcf/eLM8pxWuJT7j4hSO5UC66AW5cM6mXNCEDmsA60UAjv9rf1HWoU1L9Tg0OT3dU/5Wd9TeFpRiwWRFZhNhSvTMbX5hDh0uNhR6jWUb/LYvL0H460kSyko+xrrhCgVJAp/MPrzgecAMVkuH/PuuHv335VSW3s8TZgIrgUWzKdMXagRLqU4KygF4gRnhSiwLFZivF6N32tWAhTwPUWSCmhz18RC3z4+fsNpgN3f+/H9oO4ESO3qNNaupFQ+qWeRa5U7AGY/rlO7kq5Kb+qkUUrqzru/+8M9zTXUeKUHs92miG3LmlhhbjJCGVVoVCdCnG3ZyamgVRaQLvV+B9AeoJUu3QtgdLZWy6mspgigzdpyFS+/ZwTVhBv7/WyOgDbZBtTa3NMEKqX0Dsg6RqvFoUN3cOyczr2f1F3+FtbmDkB5gEKzFQFr215OBe3lO9Yu33GSrg47XUnxtiYQRKUgpdadCaAbnSMfmK+8Pf3L74ssATSAtorSt7a/vKnPUA87pMhTa9cAKJfzMwKysAwU56aUWQvcssUQJ/lA6aBw8xaPJHe+m4asLERcOpb3cvkGg1/SeEatGSZn+CVFeZPJDQRnxwDJgDY5nzcniIXbBkq5zo3Jyqg5PAMDAz5BlL/oLo0uLAOT4MqZvEnWCbEoPjfgU/LUKoDRK/BSSXHbgE8kqmOzt+HiGUA8QBY+Ov127823u0YAq1VGDno0n9/hs7BoWQocSSKIQKmk6OvTbN5sqAZCLeqw3uBmz791ChBFdmL4g4dnziptdnXYYhit2FxWlH2N72WHcmqhFjkW61c/xsTZc6OP3PIlIPayAHA2Dt/wem/oCLROqAZCNchU5B3AnczF9dcBR0sKxQZzI4U9rNOS+vwrDWHLJ76bOH7gTZBwo2GCBDOv/OF4Q+EyUCb+sW/JJeGxDQfG4b8vjRwK2hUKYNPF6gsbDUyC6lHAtgMB3NTfnv5ns+dtkL6F2eF9/6KRznagXDyxvyZx9PJG4WxUf+niif01Wtr8KiBgo8VPj24UMA5mXqAlne1AAPfhc79+DZHZ66aJq0wM/eJVWtKZB5Tqu0frNlr80/Xy0jB4fmbsZNQVCNj6+LlDoFxh7+2mkHjy3OFGOtse5U2H3sE/Xn5ZeT33dfJ5tdYmNjk5+tPt9wMhbd8Fed8DAqTJwuyhaxWYLM4MASk5HyGdPkDshT8/+hLiLq8XJuIu/+/Ir4bz0nk1oMyNHgttuPTseoGuvnh4/uzwqtorBATszNnXDqyvoUu48N6rB2mrvSJAAHd+/48mbVgr3AhsGDw/NvTIFG2lUBQoQFr/5L2nipSIgAvH//s0HTZL01QXPwro3X3o8rAu9expfdBeFpJGx0b3fvYhckqhqMJllVFl/PfdFNanx5/qpq6IwmZQvYPPTB9XpvTlPIWSxqOjez/z9YY6181ZN3NAEs5d+k2nCfHc5JNA0g1WVGGLyspbynh3tSp0aXLm9N7tg0XUFVXYVJlG81NPrlE3P/k7srUr1OyLAgHS/zzxjRex9v3mDbHp+2d/u+fFBrBwqoqaUKnEYfXS480b4dzk41QqMV125vWYBvoGn5l+596Dn74D9K0z6MY/4M7WvqkESOPK+GNRlsRm3eXNK+SwVYkPlBpBacA05uvGfVgpBSFr2K4RRALE5GykTif+toZT1WFu87pVSft1Asy1q70WhYrVwOa4ZoXred7JOq7h/wF6az0ukZgX/AAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxNS0wNy0yNVQyMTo1MDo0MyswODowMOgS43cAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMTEtMjBUMjI6NDc6MTErMDg6MDAou1syAAAATnRFWHRzb2Z0d2FyZQBJbWFnZU1hZ2ljayA2LjguOC0xMCBRMTYgeDg2XzY0IDIwMTUtMDctMTkgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcFDJw1AAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OkhlaWdodAA1Mwmpb+QAAAAWdEVYdFRodW1iOjpJbWFnZTo6V2lkdGgAMjgpleAmAAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADEzODQ5NTg4MzEXUMEwAAAAE3RFWHRUaHVtYjo6U2l6ZQA0LjUzS0JC/AyPiAAAAFp0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC93d3cuZWFzeWljb24ubmV0L2Nkbi1pbWcuZWFzeWljb24uY24vc3JjLzExMjk3LzExMjk3NzIucG5nqXNeUQAAAABJRU5ErkJggg==';
  97 + var outMark = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAvCAMAAAC18jgTAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABO1BMVEUAAAAiu4ggv40gvowgvowgvosgvowfvo0jv44hv40gvosgvowcxo4fvowgvowdvYogv4whvo0gvowhvYwrqoAhv4wnxIkgv4wA//8gvIshvosgvowhvIshvowgvowrv5Ugv4ohvosgvowhv4wgv4whvYwXuYsgvowgvowiu4gfvo0zzJkhvowktpIgvowgv40hvo0gv4wgvowAqqogvosgvowjv4sgvowivIskv4khvowgvYsiu44hvosfvI0hv4sgvYofvowgvowgv40gv4wjuYsgvowhvowfvIsgvYsgvo0hvoxAv4Agv4wgvowgvoshvo0mv4whvowgvowfwo8gv4wgv40duokAAAAfvYsgvYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAYjGUYj2kAAAAAAAAAAAAgvoz///9v2GMAAAAAZ3RSTlMAD1eZyOr4miSc950Jivoj0i/pfAarDaoBWH3JLuv5DDDL0ZunbQvu/h6CBbQO5jhOkNwDtfAsz0Qc42EtdUGLYKKOwsYW7/s5f7nMBCj9N40U8/YZh48aAaOmAggNERMWF0lLGBkanzLKGQAAAAFiS0dEaMts9CIAAAGZSURBVDjLfZRnW8IwFIUvyN6FUlCx4AZxKw7cA/eeKKNUwfz/f2ChZNAmnC+U+54m9548KQCRwznicns8bpfX6QC7fP4AIgoEfRYcCkfQgCLhEMujMWRTLEq55EYcuSXyPpcbjv4aoRgSKGb2EUZChXvzRcSGSHfaIP0fT0iyLCXitOI38qP5JBWzKSVFE3OAk/I0HiudJMVR8JL1FRqMQgb3ggs/Jthox3B1HIg3wxoyuDoBKn6UWYOMqyp4uIYsNfC3yNEtJoc3OQXT3DFJmDNMUCkaFI1yFubmqcMedb4AsMAeVqaYzbGHtWj4l5bFx51f6a64mhca/OaeayK+3m9qY5PPS1tk7G0eV3doMLtlToN7bLT7JZvhYPByHqoWfmS93ceD/CRtNcApy89kG4fiOeXlCucLAoULzC+vgCvSxjUIdGPy2zuR4b53jx8eQagn5gi5en5B6PVtiAHeEfoYxqHiUT9FrNrT17f5a8O1eqOptXT951fXW1qzUa9ZXtfanU7nry/jsa1VuSsYtjZ3BdIDFin/A1AVNdoKDyAYAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE1LTA3LTI1VDIxOjUwOjQzKzA4OjAw6BLjdwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0xMS0yMFQyMjo0NzoxMyswODowML8kShsAAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOC44LTEwIFExNiB4ODZfNjQgMjAxNS0wNy0xOSBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZwUMnDUAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAXdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADQ3F9+avAAAABZ0RVh0VGh1bWI6OkltYWdlOjpXaWR0aAAzMtBbOHkAAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTM4NDk1ODgzM/leoBwAAAATdEVYdFRodW1iOjpTaXplADQuMDFLQkKe5chzAAAAWnRFWHRUaHVtYjo6VVJJAGZpbGU6Ly8vaG9tZS93d3dyb290L3d3dy5lYXN5aWNvbi5uZXQvY2RuLWltZy5lYXN5aWNvbi5jbi9zcmMvMTEyOTcvMTEyOTc4Ni5wbmetpUpEAAAAAElFTkSuQmCC';
  98 +
  99 + var inOuts = [outMark, inMark];
  100 +
  101 + var stationCodeMap = {};
  102 +
  103 + var map = new BMap.Map("mapContainer");
  104 + map.centerAndZoom(new BMap.Point(121.544336, 31.221315), 15);
  105 + map.enableScrollWheelZoom();
  106 + //中心点和缩放级别
  107 + map.setCurrentCity("上海");
  108 + var myDis = new BMapLib.DistanceTool(map);
  109 +
  110 +
  111 + $.get('/line/all', function(rs){
  112 + var data = [];
  113 + $.each(rs, function(){
  114 + data.push({id: this.id, text: this.name});
  115 + });
  116 +
  117 + initPinYinSelect2('select[name=xl]', data);
  118 + });
  119 +
  120 + function searchGps(){
  121 + var params = $('form').serializeJSON();
  122 + //查询线路路由站点
  123 + $.get('/test/gps/route', params, function(rs){
  124 + var array = rs[0].children[0].children
  125 + ,coords,circle, cdsArray, points, polygon;
  126 + //画出站点
  127 + console.log(array);
  128 + $.each(array, function(){
  129 + stationCodeMap[this.stationStationCod] = this.name;
  130 + if(this.stationShapesType === 'r'){
  131 + //画圆
  132 + coords = this.stationBJwpoints.split(' ');
  133 + circle = new BMap.Circle(new BMap.Point(coords[0], coords[1]),this.stationRadius);
  134 + circle.setStrokeColor('red');
  135 + circle.setStrokeWeight(2)
  136 + map.addOverlay(circle);
  137 + }
  138 + else if(this.stationShapesType === 'd'){
  139 + //画多边形
  140 + coords = this.stationBPolygonGrid.substring(9, this.stationBPolygonGrid.length - 2);
  141 + cdsArray = coords.split(',');
  142 + points = [];
  143 + $.each(cdsArray, function(){
  144 + coords = this.split(' ');
  145 + points.push(new BMap.Point(coords[0], coords[1]));
  146 + });
  147 +
  148 + polygon = new BMap.Polygon(points, {strokeColor:"red", strokeWeight:2, strokeOpacity:0.5});
  149 + map.addOverlay(polygon);
  150 + }
  151 + });
  152 + coords = array[array.length / 2].stationBJwpoints.split(' ');
  153 + map.setCenter(new BMap.Point(coords[0], coords[1]))
  154 + });
  155 +
  156 + //查询gps点
  157 + $.get('/gps/history/' + params.device, params, function(gpsArray){
  158 + console.log(stationCodeMap);
  159 + var marker, label, point, state, text;
  160 + $.each(gpsArray, function(){
  161 + point = new BMap.Point(this.lon, this.lat);
  162 + marker = new BMap.Marker(point);
  163 + state = this.inout_stop;
  164 +
  165 + if(state == 0 || state == 1){
  166 + text = state == 0?'出':'进';
  167 +
  168 + console.log(stationCodeMap[this.stopNo], this);
  169 + marker.setIcon(new BMap.Icon(inOuts[this.inout_stop], new BMap.Size(25,25)));
  170 + label = new BMap.Label(
  171 + stationCodeMap[this.stopNo] + '/' +moment(this.ts).format('HH:mm.ss') + ' -'+text
  172 + , {position: point, offset: new BMap.Size(-25,-18)});
  173 + marker.setLabel(label);
  174 + }
  175 + else{
  176 + label = new BMap.Label(moment(this.ts).format('HH:mm.ss')
  177 + , {position: point, offset: new BMap.Size(-25,-18)});
  178 + marker.setLabel(label);
  179 + }
  180 +
  181 + map.addOverlay(marker);
  182 + });
  183 + });
  184 + }
  185 +
  186 +
  187 + /**
  188 + * 支持拼音搜索的select2
  189 + * @param selector
  190 + * @param data
  191 + */
  192 + function initPinYinSelect2(selector, data, cb){
  193 +
  194 + $.each(data, function(){
  195 + this.fullChars = pinyin.getFullChars(this.text).toUpperCase();
  196 + this.camelChars = pinyin.getCamelChars(this.text);
  197 + });
  198 +
  199 + $.fn.select2.amd.require(['select2/compat/matcher'], function (oldMatcher) {
  200 + $(selector).select2({
  201 + data: data,
  202 + matcher: oldMatcher(function(term, text, item){
  203 + var upTerm = term.toUpperCase();
  204 + if(item.fullChars.indexOf(upTerm) != -1
  205 + || item.camelChars.indexOf(upTerm) != -1)
  206 + return true;
  207 +
  208 + return text.indexOf(term) != -1;
  209 + })
  210 + });
  211 +
  212 + cb && cb();
  213 + });
  214 +
  215 + return $(selector);
  216 + }
  217 +</script>
  218 +</body>
  219 +</html>
src/main/resources/static/index.html
1 -<!DOCTYPE html>  
2 -<html lang="zh">  
3 -<head>  
4 - <meta name="renderer" content="webkit" />  
5 - <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />  
6 - <meta charset="UTF-8">  
7 - <title>调度系统</title>  
8 -  
9 - <meta http-equiv="Pragma" content="no-cache">  
10 - <meta http-equiv="Cache-control" content="no-cache">  
11 - <meta http-equiv="Cache" content="no-cache">  
12 -  
13 - <!-- Font Awesome 图标字体 -->  
14 - <link  
15 - href="/metronic_v4.5.4/plugins/font-awesome/css/font-awesome.min.css"  
16 - rel="stylesheet" type="text/css" />  
17 - <!-- Bootstrap style -->  
18 - <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css"  
19 - rel="stylesheet" type="text/css" />  
20 - <!-- jsTree 数插件 -->  
21 - <link  
22 - href="/metronic_v4.5.4/plugins/jstree/dist/themes/default/style.min.css"  
23 - rel="stylesheet" type="text/css" />  
24 - <!-- MULTI-select 多选下拉框美化 -->  
25 - <link  
26 - href="/metronic_v4.5.4/plugins/jquery-multi-select/css/multi-select.css"  
27 - rel="stylesheet" type="text/css" />  
28 -  
29 - <!-- editable -->  
30 - <link  
31 - href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css"  
32 - rel="stylesheet" type="text/css" />  
33 - <!-- METRONIC style -->  
34 - <link href="/metronic_v4.5.4/layout4/css/themes/light.min.css"  
35 - rel="stylesheet" type="text/css" id="style_color" />  
36 - <link href="/metronic_v4.5.4/css/components.css" rel="stylesheet"  
37 - type="text/css" />  
38 - <link href="/metronic_v4.5.4/css/plugins.css" rel="stylesheet"  
39 - type="text/css" />  
40 - <link href="/metronic_v4.5.4/layout4/css/layout.min.css"  
41 - rel="stylesheet" type="text/css" />  
42 - <link href="/metronic_v4.5.4/layout4/css/custom.min.css"  
43 - rel="stylesheet" type="text/css" />  
44 - <!-- select2 下拉框插件 -->  
45 - <link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css"  
46 - rel="stylesheet" type="text/css" />  
47 - <link  
48 - href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css"  
49 - rel="stylesheet" type="text/css" />  
50 - <!-- layer 弹层 插件 -->  
51 - <link href="/assets/plugins/layer-v2.4/layer/skin/layer.css"  
52 - rel="stylesheet" type="text/css" />  
53 - <!-- fileinput 上传 插件 -->  
54 - <link href="/assets/plugins/fileinput/css/fileinput.min.css"  
55 - rel="stylesheet" type="text/css" />  
56 - <!-- iCheck 单选框和复选框 -->  
57 - <link href="/metronic_v4.5.4/plugins/icheck/skins/all.css"  
58 - rel="stylesheet" type="text/css" />  
59 - <!-- 日期控件 -->  
60 - <link  
61 - href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css"  
62 - rel="stylesheet" type="text/css" />  
63 - <!-- table 表格控件 -->  
64 - <!--<link rel="stylesheet"-->  
65 - <!--href="//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css"-->  
66 - <!--type="text/css" />-->  
67 - <link href="/metronic_v4.5.4/plugins/bootstrap-tagsinput/bootstrap-tagsinput.css" rel="stylesheet" type="text/css"/>  
68 - <!-- handsontable样式 -->  
69 - <link rel="stylesheet"  
70 - href="/assets/bower_components/handsontable/dist/handsontable.full.css" />  
71 - <!-- sweetalert样式 -->  
72 - <link rel="stylesheet"  
73 - href="/assets/bower_components/sweetalert/dist/sweetalert.css" />  
74 - <!-- schedule计划调度AngularJS模块主css -->  
75 - <link rel="stylesheet" href="/pages/scheduleApp/module/common/main.css"  
76 - type="text/css" />  
77 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" merge="plugins"/>  
78 -  
79 - <!-- CSS动画 -->  
80 - <link  
81 - href="/metronic_v4.5.4/plugins/tipso/css/animate.css"  
82 - rel="stylesheet" type="text/css" />  
83 -  
84 - <!-- 提示工具样式 -->  
85 - <link  
86 - href="/metronic_v4.5.4/plugins/tipso/css/tipso.css"  
87 - rel="stylesheet" type="text/css" />  
88 -  
89 - <style type="text/css">  
90 - .searchForm {  
91 -  
92 - }  
93 -  
94 - .searchForm .form-group .control-label {  
95 - padding-right: 0px;  
96 - text-align: right;  
97 - margin-top: 7px;  
98 - }  
99 -  
100 - .searchForm .form-group>div {  
101 - padding-left: 10px;  
102 - padding-right: 0px;  
103 - }  
104 -  
105 - .searchForm .row>div {  
106 - padding-left: 0px;  
107 - padding-right: 0px;  
108 - padding: 5px 0 5px 0;  
109 - width: 270px;  
110 - display: inline-block;  
111 - }  
112 -  
113 - .searchForm .form-actions {  
114 -  
115 - }  
116 -  
117 - tr.row-active td {  
118 - border-bottom: 1px solid blue !important;  
119 - color: blue;  
120 - }  
121 -  
122 - .ms-container .ms-selectable li.ms-elem-selectable,.ms-container .ms-selection li.ms-elem-selection  
123 - {  
124 - font-size: 14px;  
125 - }  
126 -  
127 - .ms-container .ms-selectable li.ms-elem-selectable,.ms-container .ms-selection li.ms-elem-selection  
128 - {  
129 - padding: 6px 26px;  
130 - }  
131 -  
132 - .ms-container .ms-list {  
133 - height: 306px;  
134 - }  
135 -  
136 - .ms-container .ms-selectable,.ms-container .ms-selection {  
137 - width: 47%;  
138 - }  
139 -  
140 - .ms-container {  
141 - width: 470px;  
142 - margin: auto;  
143 - }  
144 -  
145 - .multi-custom-header-left {  
146 - text-align: center;  
147 - padding: 7px;  
148 - color: #3B3F51;  
149 - }  
150 -  
151 - .multi-custom-header-right {  
152 - text-align: center;  
153 - padding: 7px;  
154 - font-weight: bold;  
155 - color: #36C6D3;  
156 - }  
157 -  
158 - .mt-element-list .list-simple.mt-list-container ul>.mt-list-item>.list-item-content  
159 - {  
160 - padding: 0 55px 0 0px;  
161 - }  
162 -  
163 - .mt-element-list .list-simple.mt-list-container ul>.mt-list-item {  
164 - padding: 3.3px 0;  
165 - }  
166 -  
167 - #route-container {  
168 - display: none;  
169 - }  
170 -  
171 - .page-content.active {  
172 - display: block !important;  
173 - }  
174 -  
175 - .page-header.navbar .page-logo .logo-default {  
176 - margin: 0;  
177 - }  
178 -  
179 - .page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle  
180 - {  
181 - background-color: #284a99;  
182 - }  
183 -  
184 - .page-header.navbar .page-logo {  
185 - padding-right: 10px;  
186 - }  
187 -  
188 - .page-logo .logo-default.logo-default-text {  
189 - font-weight: 600;  
190 - color: white !important;  
191 - margin-top: 19px !important;  
192 - font-size: 24px;  
193 - text-decoration: none;  
194 - }  
195 -  
196 - .page-logo .logo-default.logo-default-text:HOVER {  
197 - color: #dedede !important;  
198 - }  
199 -  
200 - body,.page-content-wrapper,#pjax-container{  
201 - height: 100%;  
202 - }  
203 - html{  
204 - height: 90%;  
205 - }  
206 - .page-container{  
207 - height: 100%;  
208 - }  
209 - </style>  
210 -  
211 - <!-- ocLazyLoading载入文件的位置 -->  
212 - <link id="ng_load_plugins_before" />  
213 -  
214 -</head>  
215 -<body  
216 - class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed">  
217 -<div class="page-header navbar navbar-fixed-top"  
218 - style="background: linear-gradient(to bottom, #124e78, #125688);">  
219 - <div class="page-header-inner ">  
220 - <!-- LOGO -->  
221 - <div class="page-logo">  
222 - <a href="index.html" class="logo-default logo-default-text">  
223 - 浦东公交调度系统 </a>  
224 - <div class="menu-toggler sidebar-toggler"></div>  
225 - </div>  
226 - <!-- END LOGO -->  
227 - <a href="javascript:;" class="menu-toggler responsive-toggler"  
228 - data-toggle="collapse" data-target=".navbar-collapse"> </a>  
229 - <div class="page-top">  
230 - <div class="top-menu">  
231 - <ul class="nav navbar-nav pull-right">  
232 - <!-- 信息通知区 -->  
233 - <li  
234 - class="dropdown dropdown-extended dropdown-notification dropdown-dark"  
235 - id="header_notification_bar"><a href="javascript:;"  
236 - class="dropdown-toggle" data-toggle="dropdown"  
237 - data-hover="dropdown" data-close-others="true"> <i  
238 - class="fa fa-bell"></i> <span class="badge badge-success">  
239 - 0 </span>  
240 - </a>  
241 - <ul class="dropdown-menu" style="max-width: 345px; width: 345px;">  
242 - <li class="external">  
243 - <h3>  
244 - 今日 <span class="bold">0 条</span> 通知  
245 - </h3> <a href="javascript:;">查看全部</a>  
246 - </li>  
247 - <li>  
248 - <ul class="dropdown-menu-list scroller" style="height: 250px;"  
249 - data-handle-color="#637283">  
250 - </ul>  
251 - </li>  
252 - </ul></li>  
253 - <li class="dropdown dropdown-user dropdown-dark"><a  
254 - href="javascript:;" class="dropdown-toggle"  
255 - data-toggle="dropdown" data-hover="dropdown"  
256 - data-close-others="true"> <span id="indexTopUName"  
257 - class="username username-hide-on-mobile"  
258 - style="vertical-align: middle;"> <i class="fa fa-user"></i></span>  
259 - </a>  
260 - <ul class="dropdown-menu dropdown-menu-default">  
261 - <li><a href="javascript:;"> <i class="fa fa-user"></i>  
262 - 我的信息  
263 - </a></li>  
264 - <li><a href="javascript:;" id="changePWD"> <i  
265 - class="fa fa-unlock-alt"></i> 修改密码  
266 - </a></li>  
267 - <li class="divider"></li>  
268 - <li><a href="javascript:;"> <i class="fa fa-lock"></i>  
269 - 锁屏  
270 - </a></li>  
271 - <li><a href="/logout"> <i class="fa fa-key"></i> 注销登陆  
272 - </a></li>  
273 - </ul></li>  
274 - </ul>  
275 - </div>  
276 - </div>  
277 - </div>  
278 -</div>  
279 -<div class="page-container">  
280 - <div class="page-sidebar-wrapper">  
281 - <div class="page-sidebar navbar-collapse collapse">  
282 - <ul class="page-sidebar-menu page-sidebar-menu-fixed"  
283 - data-keep-expanded="false" data-auto-scroll="true"  
284 - data-slide-speed="200" id="leftMenuSidebar">  
285 - </ul>  
286 - </div>  
287 - </div>  
288 - <div class="page-content-wrapper">  
289 - <div id="pjax-container" class="page-content"></div>  
290 -  
291 - <div id="route-container">  
292 - <div ng-app="ScheduleApp">  
293 - <div ng-controller="ScheduleAppController">  
294 -  
295 - <!-- loading widget -->  
296 - <div id="loadingWidget" class="flyover mask" loading-widget>  
297 - <div class="alert alert-info">  
298 - <strong>载入中......</strong>  
299 - </div>  
300 - </div>  
301 -  
302 - <div ui-view class="uv"></div>  
303 - </div>  
304 - </div>  
305 - </div>  
306 - </div>  
307 -</div>  
308 -  
309 -<script id="menu_list_temp" type="text/html">  
310 - {{each list as group i}}  
311 - <li class="heading">  
312 - <h3 class="uppercase">{{group.name}}</h3>  
313 - </li>  
314 - {{each group.children as dir j}}  
315 - <li class="nav-item">  
316 - <a href="javascript:;" class="nav-link nav-toggle ">  
317 - <i class="{{dir.icon}}"></i>  
318 - <span class="title">{{dir.name}}</span>  
319 - <span class="arrow"></span>  
320 - </a>  
321 - <ul class="sub-menu">  
322 - {{each dir.children as module s}}  
323 - <li class="nav-item ">  
324 - {{if module.container=="pjax-container"}}  
325 - <a href="/pages/{{module.path}}" class="nav-link " data-pjax>  
326 - <span class="title">{{module.name}}</span>  
327 - </a>  
328 - {{else}}  
329 - <a href="{{module.path}}" class="nav-link " data-angularjs>  
330 - <span class="title">{{module.name}}</span>  
331 - </a>  
332 - {{/if}}  
333 - </li>  
334 - {{/each}}  
335 - </ul>  
336 - </li>  
337 - {{/each}}  
338 - {{/each}}  
339 -  
340 -</script>  
341 -<script>  
342 - delete window.require;  
343 - delete window.exports;  
344 - delete window.module;  
345 -</script>  
346 -<!-- jQuery -->  
347 -<script src="/metronic_v4.5.4/plugins/jquery.min.js" data-exclude=1></script>  
348 -<!-- bootstrap -->  
349 -<script src="/metronic_v4.5.4/plugins/bootstrap/js/bootstrap.min.js"  
350 - data-exclude=1></script>  
351 -<script src="/pages/forms/statement/js/jquery.autocompleter.js"></script>  
352 -<script src="/pages/forms/statement/js/jquery.PrintArea.js"></script>  
353 -<!-- MTRONIC JS -->  
354 -<script src="/metronic_v4.5.4/scripts/app.min.js" data-exclude=1></script>  
355 -<script src="/metronic_v4.5.4/layout4/scripts/layout.min.js"  
356 - data-exclude=1></script>  
357 -<!-- 虚拟滚动条 -->  
358 -<script  
359 - src="/metronic_v4.5.4/plugins/jquery-slimscroll/jquery.slimscroll.min.js"></script>  
360 -<!-- jsTree 树插件 -->  
361 -<script src="/metronic_v4.5.4/plugins/jstree/dist/jstree.min.js"></script>  
362 -<!-- bootstrap-hover-dropDown -->  
363 -<script  
364 - src="/metronic_v4.5.4/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js"></script>  
365 -<!-- jquery.validate 表单验证 -->  
366 -<script  
367 - src="/metronic_v4.5.4/plugins/jquery-validation/js/jquery.validate.min.js"></script>  
368 -<script  
369 - src="/metronic_v4.5.4/plugins/jquery-validation/js/localization/messages_zh.js"></script>  
370 -<!-- 向导式插件 -->  
371 -<script  
372 - src="/metronic_v4.5.4//plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>  
373 -<!-- iCheck 单选框和复选框 -->  
374 -<script src="/metronic_v4.5.4/plugins/icheck/icheck.min.js"></script>  
375 -<!-- select2 下拉框 -->  
376 -<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>  
377 -<!-- MULTI SELECT 多选下拉框 -->  
378 -<script  
379 - src="/metronic_v4.5.4/plugins/jquery-multi-select/js/jquery.multi-select.js"></script>  
380 -<!-- editable.js -->  
381 -<script  
382 - src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>  
383 -<!-- PJAX -->  
384 -<script src="/assets/plugins/jquery.pjax.js"></script>  
385 -<!-- layer 弹层 -->  
386 -<script src="/assets/plugins/layer-v2.4/layer/layer.js" data-exclude=1></script>  
387 -<!-- fileinput 上传 -->  
388 -<script src="/assets/plugins/fileinput/canvas-to-blob.min.js"></script>  
389 -<script src="/assets/plugins/fileinput/purify.min.js"></script>  
390 -<script src="/assets/plugins/fileinput/sortable.min.js"></script>  
391 -<script src="/assets/plugins/fileinput/fileinput.min.js"></script>  
392 -<script src="/assets/plugins/fileinput/fileinput_locale_zh.js"></script>  
393 -<!-- jquery.purl URL解析 -->  
394 -<script src="/assets/plugins/purl.js"></script>  
395 -<!-- jquery.serializejson JSON序列化插件 -->  
396 -<script src="/assets/plugins/jquery.serializejson.js"></script>  
397 -<!-- art-template 模版引擎 -->  
398 -<script src="/assets/plugins/template.js"></script>  
399 -<!-- jquery.pageinator 分页 -->  
400 -<script src="/assets/plugins/jqPaginator.min.js"></script>  
401 -<!-- moment.js 日期处理类库 -->  
402 -<script src="/assets/plugins/moment-with-locales.js"></script>  
403 -  
404 -<script src="/assets/plugins/pinyin.js"></script>  
405 -<!-- 日期控件 -->  
406 -<script  
407 - src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script>  
408 -<!-- 表格控件 -->  
409 -<script src="/metronic_v4.5.4/plugins/bootstrap-tagsinput/bootstrap-tagsinput.min.js"></script>  
410 -<!-- 统计图控件 -->  
411 -<!--<script src="/assets/global/getEchart.js"></script>  
412 -<script src="/assets/global/echarts.js"></script> -->  
413 -<script src="/assets/js/common.js"></script>  
414 -<script src="/assets/js/dictionary.js"></script>  
415 -<!-- tipso JS -->  
416 -<script src="/metronic_v4.5.4/plugins/tipso/js/tipso.js"></script>  
417 -<script data-exclude=1>  
418 - //初始打开的片段地址  
419 - var initFragment = "^_^initFragment^_^";  
420 - //静态文件目录  
421 - var dir = '/pages/';  
422 - //片段容器  
423 - var pjaxContainer = '#pjax-container'  
424 - , angJsContainer = '#route-container';  
425 -  
426 - $(document).ajaxError(function (event, jqxhr, settings, thrownError) {  
427 - if(jqxhr.status == 403){  
428 - layer.closeAll();  
429 - layer.alert(jqxhr.message?jqxhr.message:'访问被拒绝', {icon: 2, title: '操作失败'});  
430 - }  
431 - });  
432 -  
433 - $(function () {  
434 - $.ajax({  
435 - url: '/user/isWeakCipher',  
436 - type: 'POST',  
437 - async: false,  
438 - success: function (result,status,xhr) {  
439 - if (result.data == 1) {  
440 - $.get('/pages/permission/user/forceChangePWD.html', function (content) {  
441 - layer.open({  
442 - type: 1,  
443 - area: ['600px', '360px'],  
444 - content: content,  
445 - title: '修改密码',  
446 - shift: 5,  
447 - scrollbar: false,  
448 - closeBtn: 0,  
449 - success: function () {  
450 - }  
451 - });  
452 - });  
453 - }  
454 - }  
455 - });  
456 -  
457 - $.ajax({  
458 - url: '/user/isRealName',  
459 - type: 'POST',  
460 - async: false,  
461 - success: function (result,status,xhr) {  
462 - if (result.data == 0) {  
463 - $.get('/pages/permission/user/jobCode.html', function (content) {  
464 - layer.open({  
465 - type: 1,  
466 - area: ['600px', '360px'],  
467 - content: content,  
468 - title: '设置工号(后期统一登录平台接入)',  
469 - shift: 5,  
470 - scrollbar: false,  
471 - success: function () {  
472 - }  
473 - });  
474 - });  
475 - }  
476 - }  
477 - });  
478 -  
479 - $.get('/user/currentUser', function (user) {  
480 - $('#indexTopUName').text(user.userName);  
481 - });  
482 -  
483 - //带 data-pjax 的链接由pjax加载  
484 - $(document).pjax('a[data-pjax]', pjaxContainer);  
485 -  
486 - //pjax左菜单点击事件  
487 - $(document).on('click', '#leftMenuSidebar a[data-pjax]', function () {  
488 - setTitle(this);  
489 -  
490 - $('#leftMenuSidebar li.nav-item.active').removeClass('active');  
491 - $(this).parent().addClass('active');  
492 - showPjax();  
493 - });  
494 -  
495 - //angularjs左菜单点击事件  
496 - $(document).on('click', '#leftMenuSidebar a[data-angularjs]', function () {  
497 - setTitle(this);  
498 -  
499 - $('#leftMenuSidebar li.nav-item.active').removeClass('active');  
500 - $(this).parent().addClass('active');  
501 - showAngJs();  
502 - });  
503 -  
504 - //加载左菜单栏  
505 - $get('/module/findByCurrentUser', null,  
506 - function (ms) {  
507 - var treeArray = createTreeData(ms);  
508 - treeArray.sort(function (a, b) {  
509 - return a.createDate - b.createDate;  
510 - });  
511 - var menuHtml = template('menu_list_temp', {list: treeArray});  
512 - $('#leftMenuSidebar').html(menuHtml);  
513 -  
514 - //----------- 检查URL ----------------  
515 - var h = location.hash;  
516 - if (initFragment && initFragment != '') {  
517 - showPjax();  
518 - //普通片段  
519 - loadPage(initFragment);  
520 - //选中菜单  
521 - $.each($('#leftMenuSidebar a'), function (i, item) {  
522 - if (urlPattern($(item).attr('href'), initFragment)) {  
523 - activeLeftMenu(item);  
524 - }  
525 - });  
526 - } else if (h) {  
527 - //angularjs片段  
528 - showAngJs();  
529 - //选中菜单  
530 - $.each($('#leftMenuSidebar a'), function (i, item) {  
531 - if ($(item).attr('href') == h) {  
532 - activeLeftMenu(item);  
533 - }  
534 - });  
535 - }  
536 - else {  
537 - //加载主页  
538 - loadPage('/pages/home.html');  
539 - }  
540 - });  
541 -  
542 - //修改密码  
543 - $('#changePWD').on('click', function () {  
544 - $.get('/pages/permission/user/changePWD.html', function (content) {  
545 - layer.open({  
546 - type: 1,  
547 - area: ['600px', '360px'],  
548 - content: content,  
549 - title: '修改密码',  
550 - shift: 5,  
551 - scrollbar: false,  
552 - success: function () {  
553 - }  
554 - });  
555 - });  
556 - });  
557 - });  
558 -  
559 - //modal关闭时销毁dom  
560 - $(document).on('hidden.bs.modal', '.modal', function () {  
561 - $(this).remove();  
562 - });  
563 -  
564 - //pjax加载完成事件  
565 - $(document).on('pjax:success', function () {  
566 - var dicts = $(pjaxContainer).find('.nt-dictionary');  
567 - dictionaryUtils.transformDom(dicts);  
568 - });  
569 -  
570 - function loadPage(url) {  
571 - $.pjax({url: url, container: pjaxContainer})  
572 - }  
573 -  
574 - function urlPattern(a, b) {  
575 - var r;  
576 - try {  
577 - r = a.substring(0, a.lastIndexOf('/')) == b.substring(0, b.lastIndexOf('/'));  
578 - } catch (e) {  
579 - r = false;  
580 - }  
581 - return r;  
582 - }  
583 -  
584 - function showPjax() {  
585 - $(angJsContainer).removeClass('page-content active').hide();  
586 - $(pjaxContainer).addClass('page-content active');  
587 - }  
588 -  
589 - function showAngJs() {  
590 - $(pjaxContainer).html('').removeClass('page-content active').hide();  
591 - $(angJsContainer).addClass('page-content active');  
592 - }  
593 -  
594 - function activeLeftMenu(item) {  
595 - $(item).parent('.nav-item').addClass('active').parent('.sub-menu').show().parent().addClass('open');  
596 - setTitle(item);  
597 - }  
598 -  
599 - function setTitle(menuItem){  
600 - document.title = $('span.title', menuItem).text();  
601 - }  
602 -  
603 -</script>  
604 -<!-- d3 -->  
605 -<script src="/assets/js/d3.min.js" data-exclude=1></script>  
606 -<!-- webSocket JS -->  
607 -<script src="/assets/js/sockjs.min.js"></script>  
608 -  
609 -<!-- TODO:angularJS相关库 -->  
610 -  
611 -<!-- angularJS相关库 -->  
612 -<!-- 这个是基于angularjs 1.4.10修改的版本,主要是修改了history控制部分,用于兼容route和pjax的同时操作history的冲突 -->  
613 -<script src="/assets/js/angular.js" data-autocephaly=1></script>  
614 -<script src="/assets/bower_components/angular-i18n/angular-locale_zh-cn.js" data-autocephaly=1></script>  
615 -<script  
616 - src="/assets/bower_components/angular-resource/angular-resource.min.js"  
617 - data-exclude=1></script>  
618 -<script  
619 - src="/assets/bower_components/angular-sanitize/angular-sanitize.min.js"  
620 - data-exclude=1></script>  
621 -<script  
622 - src="/assets/bower_components/angular-animate/angular-animate.min.js"  
623 - data-exclude=1></script>  
624 -<script  
625 - src="/assets/bower_components/angular-touch/angular-touch.min.js"  
626 - data-exclude=1></script>  
627 -<script  
628 - src="/assets/bower_components/angular-ui-router/release/angular-ui-router.min.js"  
629 - data-exclude=1></script>  
630 -<script  
631 - src="/assets/bower_components/oclazyload/dist/ocLazyLoad.min.js"  
632 - data-exclude=1></script>  
633 -<script  
634 - src="/assets/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"  
635 - data-exclude=1></script>  
636 -<!-- handsontable相关js -->  
637 -<script  
638 - src="/assets/bower_components/handsontable/dist/handsontable.full.js"></script>  
639 -<script  
640 - src="/assets/bower_components/ngHandsontable/dist/ngHandsontable.js"></script>  
641 -<!-- sweetalert相关js -->  
642 -<script src="/assets/bower_components/sweetalert/dist/sweetalert.min.js"></script>  
643 -<script src="/assets/bower_components/ng-sweet-alert/ng-sweet-alert.js"></script>  
644 -  
645 -<!-- schedule计划调度AngularJS模块主JS -->  
646 -<script src="/pages/scheduleApp/module/common/main.js" data-exclude=1></script>  
647 -<script  
648 - src="/pages/scheduleApp/module/common/prj-common-globalservice.js"  
649 - data-exclude=1></script>  
650 -<script src="/pages/scheduleApp/module/common/prj-common-filter.js"  
651 - data-exclude=1></script>  
652 -<script src="/pages/scheduleApp/module/common/prj-common-directive.js"  
653 - data-exclude=1></script>  
654 -<script  
655 - src="/pages/scheduleApp/module/common/prj-common-ui-route-state.js"  
656 - data-exclude=1></script>  
657 -  
658 -<!-- 地图相关 -->  
659 -<!-- 百度 -->  
660 -<script  
661 - src="//api.map.baidu.com/api?v=3.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"  
662 - data-exclude=1></script>  
663 -<script  
664 - src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"  
665 - data-exclude=1></script>  
666 -<script type="text/javascript"  
667 - src="//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"  
668 - data-exclude=1></script>  
669 -<script type="text/javascript"  
670 - src="//api.map.baidu.com/library/RichMarker/1.2/src/RichMarker_min.js "  
671 - data-exclude=1></script>  
672 -<script src="/assets/js/baidu/TextIconOverlay.js" data-exclude=1></script>  
673 -<script src="/assets/js/baidu//MarkerClusterer.js" data-exclude=1></script>  
674 -<!-- 高德 -->  
675 -<script  
676 - src="//webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"  
677 - data-exclude=1></script>  
678 -<!-- echarts4 -->  
679 -<script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script>  
680 -<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>  
681 -<!-- RSA加密 -->  
682 -<script src="/assets/plugins/jsencrypt.min.js"></script>  
683 -<script src="/assets/js/eventproxy.js"></script>  
684 -<!-- 线路路由信息操作 -->  
685 -<script src="/pages/base/stationroute/js/routes-operation.js"></script>  
686 -<script src="/pages/base/stationroute/js/routes-service.js"></script>  
687 -<script src="/assets/js/CoordinateConverter.js"></script>  
688 -</body> 1 +<!DOCTYPE html>
  2 +<html lang="zh">
  3 +<head>
  4 + <meta name="renderer" content="webkit" />
  5 + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
  6 + <meta charset="UTF-8">
  7 + <title>调度系统</title>
  8 +
  9 + <meta http-equiv="Pragma" content="no-cache">
  10 + <meta http-equiv="Cache-control" content="no-cache">
  11 + <meta http-equiv="Cache" content="no-cache">
  12 +
  13 + <!-- Font Awesome 图标字体 -->
  14 + <link
  15 + href="/metronic_v4.5.4/plugins/font-awesome/css/font-awesome.min.css"
  16 + rel="stylesheet" type="text/css" />
  17 + <!-- Bootstrap style -->
  18 + <link href="/metronic_v4.5.4/plugins/bootstrap/css/bootstrap.min.css"
  19 + rel="stylesheet" type="text/css" />
  20 + <!-- jsTree 数插件 -->
  21 + <link
  22 + href="/metronic_v4.5.4/plugins/jstree/dist/themes/default/style.min.css"
  23 + rel="stylesheet" type="text/css" />
  24 + <!-- MULTI-select 多选下拉框美化 -->
  25 + <link
  26 + href="/metronic_v4.5.4/plugins/jquery-multi-select/css/multi-select.css"
  27 + rel="stylesheet" type="text/css" />
  28 +
  29 + <!-- editable -->
  30 + <link
  31 + href="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/css/bootstrap-editable.css"
  32 + rel="stylesheet" type="text/css" />
  33 + <!-- METRONIC style -->
  34 + <link href="/metronic_v4.5.4/layout4/css/themes/light.min.css"
  35 + rel="stylesheet" type="text/css" id="style_color" />
  36 + <link href="/metronic_v4.5.4/css/components.css" rel="stylesheet"
  37 + type="text/css" />
  38 + <link href="/metronic_v4.5.4/css/plugins.css" rel="stylesheet"
  39 + type="text/css" />
  40 + <link href="/metronic_v4.5.4/layout4/css/layout.min.css"
  41 + rel="stylesheet" type="text/css" />
  42 + <link href="/metronic_v4.5.4/layout4/css/custom.min.css"
  43 + rel="stylesheet" type="text/css" />
  44 + <!-- select2 下拉框插件 -->
  45 + <link href="/metronic_v4.5.4/plugins/select2/css/select2.min.css"
  46 + rel="stylesheet" type="text/css" />
  47 + <link
  48 + href="/metronic_v4.5.4/plugins/select2/css/select2-bootstrap.min.css"
  49 + rel="stylesheet" type="text/css" />
  50 + <!-- layer 弹层 插件 -->
  51 + <link href="/assets/plugins/layer-v2.4/layer/skin/layer.css"
  52 + rel="stylesheet" type="text/css" />
  53 + <!-- fileinput 上传 插件 -->
  54 + <link href="/assets/plugins/fileinput/css/fileinput.min.css"
  55 + rel="stylesheet" type="text/css" />
  56 + <!-- iCheck 单选框和复选框 -->
  57 + <link href="/metronic_v4.5.4/plugins/icheck/skins/all.css"
  58 + rel="stylesheet" type="text/css" />
  59 + <!-- 日期控件 -->
  60 + <link
  61 + href="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/css/bootstrap-datetimepicker.min.css"
  62 + rel="stylesheet" type="text/css" />
  63 + <!-- table 表格控件 -->
  64 + <!--<link rel="stylesheet"-->
  65 + <!--href="//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.css"-->
  66 + <!--type="text/css" />-->
  67 + <link href="/metronic_v4.5.4/plugins/bootstrap-tagsinput/bootstrap-tagsinput.css" rel="stylesheet" type="text/css"/>
  68 + <!-- handsontable样式 -->
  69 + <link rel="stylesheet"
  70 + href="/assets/bower_components/handsontable/dist/handsontable.full.css" />
  71 + <!-- sweetalert样式 -->
  72 + <link rel="stylesheet"
  73 + href="/assets/bower_components/sweetalert/dist/sweetalert.css" />
  74 + <!-- schedule计划调度AngularJS模块主css -->
  75 + <link rel="stylesheet" href="/pages/scheduleApp/module/common/main.css"
  76 + type="text/css" />
  77 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" merge="plugins"/>
  78 +
  79 + <!-- CSS动画 -->
  80 + <link
  81 + href="/metronic_v4.5.4/plugins/tipso/css/animate.css"
  82 + rel="stylesheet" type="text/css" />
  83 +
  84 + <!-- 提示工具样式 -->
  85 + <link
  86 + href="/metronic_v4.5.4/plugins/tipso/css/tipso.css"
  87 + rel="stylesheet" type="text/css" />
  88 +
  89 + <style type="text/css">
  90 + .searchForm {
  91 +
  92 + }
  93 +
  94 + .searchForm .form-group .control-label {
  95 + padding-right: 0px;
  96 + text-align: right;
  97 + margin-top: 7px;
  98 + }
  99 +
  100 + .searchForm .form-group>div {
  101 + padding-left: 10px;
  102 + padding-right: 0px;
  103 + }
  104 +
  105 + .searchForm .row>div {
  106 + padding-left: 0px;
  107 + padding-right: 0px;
  108 + padding: 5px 0 5px 0;
  109 + width: 270px;
  110 + display: inline-block;
  111 + }
  112 +
  113 + .searchForm .form-actions {
  114 +
  115 + }
  116 +
  117 + tr.row-active td {
  118 + border-bottom: 1px solid blue !important;
  119 + color: blue;
  120 + }
  121 +
  122 + .ms-container .ms-selectable li.ms-elem-selectable,.ms-container .ms-selection li.ms-elem-selection
  123 + {
  124 + font-size: 14px;
  125 + }
  126 +
  127 + .ms-container .ms-selectable li.ms-elem-selectable,.ms-container .ms-selection li.ms-elem-selection
  128 + {
  129 + padding: 6px 26px;
  130 + }
  131 +
  132 + .ms-container .ms-list {
  133 + height: 306px;
  134 + }
  135 +
  136 + .ms-container .ms-selectable,.ms-container .ms-selection {
  137 + width: 47%;
  138 + }
  139 +
  140 + .ms-container {
  141 + width: 470px;
  142 + margin: auto;
  143 + }
  144 +
  145 + .multi-custom-header-left {
  146 + text-align: center;
  147 + padding: 7px;
  148 + color: #3B3F51;
  149 + }
  150 +
  151 + .multi-custom-header-right {
  152 + text-align: center;
  153 + padding: 7px;
  154 + font-weight: bold;
  155 + color: #36C6D3;
  156 + }
  157 +
  158 + .mt-element-list .list-simple.mt-list-container ul>.mt-list-item>.list-item-content
  159 + {
  160 + padding: 0 55px 0 0px;
  161 + }
  162 +
  163 + .mt-element-list .list-simple.mt-list-container ul>.mt-list-item {
  164 + padding: 3.3px 0;
  165 + }
  166 +
  167 + #route-container {
  168 + display: none;
  169 + }
  170 +
  171 + .page-content.active {
  172 + display: block !important;
  173 + }
  174 +
  175 + .page-header.navbar .page-logo .logo-default {
  176 + margin: 0;
  177 + }
  178 +
  179 + .page-header.navbar .top-menu .navbar-nav>li.dropdown.open .dropdown-toggle
  180 + {
  181 + background-color: #284a99;
  182 + }
  183 +
  184 + .page-header.navbar .page-logo {
  185 + padding-right: 10px;
  186 + }
  187 +
  188 + .page-logo .logo-default.logo-default-text {
  189 + font-weight: 600;
  190 + color: white !important;
  191 + margin-top: 19px !important;
  192 + font-size: 24px;
  193 + text-decoration: none;
  194 + }
  195 +
  196 + .page-logo .logo-default.logo-default-text:HOVER {
  197 + color: #dedede !important;
  198 + }
  199 +
  200 + body,.page-content-wrapper,#pjax-container{
  201 + height: 100%;
  202 + }
  203 + html{
  204 + height: 90%;
  205 + }
  206 + .page-container{
  207 + height: 100%;
  208 + }
  209 + </style>
  210 +
  211 + <!-- ocLazyLoading载入文件的位置 -->
  212 + <link id="ng_load_plugins_before" />
  213 +
  214 +</head>
  215 +<body
  216 + class="page-container-bg-solid page-header-fixed page-sidebar-closed-hide-logo page-sidebar-fixed">
  217 +<div class="page-header navbar navbar-fixed-top"
  218 + style="background: linear-gradient(to bottom, #124e78, #125688);">
  219 + <div class="page-header-inner ">
  220 + <!-- LOGO -->
  221 + <div class="page-logo">
  222 + <a href="index.html" class="logo-default logo-default-text">
  223 + 浦东公交调度系统 </a>
  224 + <div class="menu-toggler sidebar-toggler"></div>
  225 + </div>
  226 + <!-- END LOGO -->
  227 + <a href="javascript:;" class="menu-toggler responsive-toggler"
  228 + data-toggle="collapse" data-target=".navbar-collapse"> </a>
  229 + <div class="page-top">
  230 + <div class="top-menu">
  231 + <ul class="nav navbar-nav pull-right">
  232 + <!-- 信息通知区 -->
  233 + <li
  234 + class="dropdown dropdown-extended dropdown-notification dropdown-dark"
  235 + id="header_notification_bar"><a href="javascript:;"
  236 + class="dropdown-toggle" data-toggle="dropdown"
  237 + data-hover="dropdown" data-close-others="true"> <i
  238 + class="fa fa-bell"></i> <span class="badge badge-success">
  239 + 0 </span>
  240 + </a>
  241 + <ul class="dropdown-menu" style="max-width: 345px; width: 345px;">
  242 + <li class="external">
  243 + <h3>
  244 + 今日 <span class="bold">0 条</span> 通知
  245 + </h3> <a href="javascript:;">查看全部</a>
  246 + </li>
  247 + <li>
  248 + <ul class="dropdown-menu-list scroller" style="height: 250px;"
  249 + data-handle-color="#637283">
  250 + </ul>
  251 + </li>
  252 + </ul></li>
  253 + <li class="dropdown dropdown-user dropdown-dark"><a
  254 + href="javascript:;" class="dropdown-toggle"
  255 + data-toggle="dropdown" data-hover="dropdown"
  256 + data-close-others="true"> <span id="indexTopUName"
  257 + class="username username-hide-on-mobile"
  258 + style="vertical-align: middle;"> <i class="fa fa-user"></i></span>
  259 + </a>
  260 + <ul class="dropdown-menu dropdown-menu-default">
  261 + <li><a href="javascript:;"> <i class="fa fa-user"></i>
  262 + 我的信息
  263 + </a></li>
  264 + <li><a href="javascript:;" id="changePWD"> <i
  265 + class="fa fa-unlock-alt"></i> 修改密码
  266 + </a></li>
  267 + <li class="divider"></li>
  268 + <li><a href="javascript:;"> <i class="fa fa-lock"></i>
  269 + 锁屏
  270 + </a></li>
  271 + <li><a href="/logout"> <i class="fa fa-key"></i> 注销登陆
  272 + </a></li>
  273 + </ul></li>
  274 + </ul>
  275 + </div>
  276 + </div>
  277 + </div>
  278 +</div>
  279 +<div class="page-container">
  280 + <div class="page-sidebar-wrapper">
  281 + <div class="page-sidebar navbar-collapse collapse">
  282 + <ul class="page-sidebar-menu page-sidebar-menu-fixed"
  283 + data-keep-expanded="false" data-auto-scroll="true"
  284 + data-slide-speed="200" id="leftMenuSidebar">
  285 + </ul>
  286 + </div>
  287 + </div>
  288 + <div class="page-content-wrapper">
  289 + <div id="pjax-container" class="page-content"></div>
  290 +
  291 + <div id="route-container">
  292 + <div ng-app="ScheduleApp">
  293 + <div ng-controller="ScheduleAppController">
  294 +
  295 + <!-- loading widget -->
  296 + <div id="loadingWidget" class="flyover mask" loading-widget>
  297 + <div class="alert alert-info">
  298 + <strong>载入中......</strong>
  299 + </div>
  300 + </div>
  301 +
  302 + <div ui-view class="uv"></div>
  303 + </div>
  304 + </div>
  305 + </div>
  306 + </div>
  307 +</div>
  308 +
  309 +<script id="menu_list_temp" type="text/html">
  310 + {{each list as group i}}
  311 + <li class="heading">
  312 + <h3 class="uppercase">{{group.name}}</h3>
  313 + </li>
  314 + {{each group.children as dir j}}
  315 + <li class="nav-item">
  316 + <a href="javascript:;" class="nav-link nav-toggle ">
  317 + <i class="{{dir.icon}}"></i>
  318 + <span class="title">{{dir.name}}</span>
  319 + <span class="arrow"></span>
  320 + </a>
  321 + <ul class="sub-menu">
  322 + {{each dir.children as module s}}
  323 + <li class="nav-item ">
  324 + {{if module.container=="pjax-container"}}
  325 + <a href="/pages/{{module.path}}" class="nav-link " data-pjax>
  326 + <span class="title">{{module.name}}</span>
  327 + </a>
  328 + {{else}}
  329 + <a href="{{module.path}}" class="nav-link " data-angularjs>
  330 + <span class="title">{{module.name}}</span>
  331 + </a>
  332 + {{/if}}
  333 + </li>
  334 + {{/each}}
  335 + </ul>
  336 + </li>
  337 + {{/each}}
  338 + {{/each}}
  339 +
  340 +</script>
  341 +<script>
  342 + delete window.require;
  343 + delete window.exports;
  344 + delete window.module;
  345 +</script>
  346 +<!-- jQuery -->
  347 +<script src="/metronic_v4.5.4/plugins/jquery.min.js" data-exclude=1></script>
  348 +<!-- bootstrap -->
  349 +<script src="/metronic_v4.5.4/plugins/bootstrap/js/bootstrap.min.js"
  350 + data-exclude=1></script>
  351 +<script src="/pages/forms/statement/js/jquery.autocompleter.js"></script>
  352 +<script src="/pages/forms/statement/js/jquery.PrintArea.js"></script>
  353 +<!-- MTRONIC JS -->
  354 +<script src="/metronic_v4.5.4/scripts/app.min.js" data-exclude=1></script>
  355 +<script src="/metronic_v4.5.4/layout4/scripts/layout.min.js"
  356 + data-exclude=1></script>
  357 +<!-- 虚拟滚动条 -->
  358 +<script
  359 + src="/metronic_v4.5.4/plugins/jquery-slimscroll/jquery.slimscroll.min.js"></script>
  360 +<!-- jsTree 树插件 -->
  361 +<script src="/metronic_v4.5.4/plugins/jstree/dist/jstree.min.js"></script>
  362 +<!-- bootstrap-hover-dropDown -->
  363 +<script
  364 + src="/metronic_v4.5.4/plugins/bootstrap-hover-dropdown/bootstrap-hover-dropdown.min.js"></script>
  365 +<!-- jquery.validate 表单验证 -->
  366 +<script
  367 + src="/metronic_v4.5.4/plugins/jquery-validation/js/jquery.validate.min.js"></script>
  368 +<script
  369 + src="/metronic_v4.5.4/plugins/jquery-validation/js/localization/messages_zh.js"></script>
  370 +<!-- 向导式插件 -->
  371 +<script
  372 + src="/metronic_v4.5.4//plugins/bootstrap-wizard/jquery.bootstrap.wizard.min.js"></script>
  373 +<!-- iCheck 单选框和复选框 -->
  374 +<script src="/metronic_v4.5.4/plugins/icheck/icheck.min.js"></script>
  375 +<!-- select2 下拉框 -->
  376 +<script src="/metronic_v4.5.4/plugins/select2/js/select2.full.min.js"></script>
  377 +<!-- MULTI SELECT 多选下拉框 -->
  378 +<script
  379 + src="/metronic_v4.5.4/plugins/jquery-multi-select/js/jquery.multi-select.js"></script>
  380 +<!-- editable.js -->
  381 +<script
  382 + src="/metronic_v4.5.4/plugins/bootstrap-editable/bootstrap-editable/js/bootstrap-editable.min.js"></script>
  383 +<!-- PJAX -->
  384 +<script src="/assets/plugins/jquery.pjax.js"></script>
  385 +<!-- layer 弹层 -->
  386 +<script src="/assets/plugins/layer-v2.4/layer/layer.js" data-exclude=1></script>
  387 +<!-- fileinput 上传 -->
  388 +<script src="/assets/plugins/fileinput/canvas-to-blob.min.js"></script>
  389 +<script src="/assets/plugins/fileinput/purify.min.js"></script>
  390 +<script src="/assets/plugins/fileinput/sortable.min.js"></script>
  391 +<script src="/assets/plugins/fileinput/fileinput.min.js"></script>
  392 +<script src="/assets/plugins/fileinput/fileinput_locale_zh.js"></script>
  393 +<!-- jquery.purl URL解析 -->
  394 +<script src="/assets/plugins/purl.js"></script>
  395 +<!-- jquery.serializejson JSON序列化插件 -->
  396 +<script src="/assets/plugins/jquery.serializejson.js"></script>
  397 +<!-- art-template 模版引擎 -->
  398 +<script src="/assets/plugins/template.js"></script>
  399 +<!-- jquery.pageinator 分页 -->
  400 +<script src="/assets/plugins/jqPaginator.min.js"></script>
  401 +<!-- moment.js 日期处理类库 -->
  402 +<script src="/assets/plugins/moment-with-locales.js"></script>
  403 +
  404 +<script src="/assets/plugins/pinyin.js"></script>
  405 +<!-- 日期控件 -->
  406 +<script
  407 + src="/metronic_v4.5.4/plugins/bootstrap-datetimepicker-2/js/bootstrap-datetimepicker.min.js"></script>
  408 +<!-- 表格控件 -->
  409 +<script src="/metronic_v4.5.4/plugins/bootstrap-tagsinput/bootstrap-tagsinput.min.js"></script>
  410 +<!-- 统计图控件 -->
  411 +<!--<script src="/assets/global/getEchart.js"></script>
  412 +<script src="/assets/global/echarts.js"></script> -->
  413 +<script src="/assets/js/common.js"></script>
  414 +<script src="/assets/js/dictionary.js"></script>
  415 +<!-- tipso JS -->
  416 +<script src="/metronic_v4.5.4/plugins/tipso/js/tipso.js"></script>
  417 +<script data-exclude=1>
  418 + //初始打开的片段地址
  419 + var initFragment = "^_^initFragment^_^";
  420 + //静态文件目录
  421 + var dir = '/pages/';
  422 + //片段容器
  423 + var pjaxContainer = '#pjax-container'
  424 + , angJsContainer = '#route-container';
  425 +
  426 + $(document).ajaxError(function (event, jqxhr, settings, thrownError) {
  427 + if(jqxhr.status == 403){
  428 + layer.closeAll();
  429 + layer.alert(jqxhr.message?jqxhr.message:'访问被拒绝', {icon: 2, title: '操作失败'});
  430 + }
  431 + });
  432 +
  433 + $(function () {
  434 + $.ajax({
  435 + url: '/user/isWeakCipher',
  436 + type: 'POST',
  437 + async: false,
  438 + success: function (result,status,xhr) {
  439 + if (result.data == 1) {
  440 + $.get('/pages/permission/user/forceChangePWD.html', function (content) {
  441 + layer.open({
  442 + type: 1,
  443 + area: ['600px', '360px'],
  444 + content: content,
  445 + title: '修改密码',
  446 + shift: 5,
  447 + scrollbar: false,
  448 + closeBtn: 0,
  449 + success: function () {
  450 + }
  451 + });
  452 + });
  453 + }
  454 + }
  455 + });
  456 +
  457 + $.ajax({
  458 + url: '/user/isRealName',
  459 + type: 'POST',
  460 + async: false,
  461 + success: function (result,status,xhr) {
  462 + if (result.data == 0) {
  463 + $.get('/pages/permission/user/jobCode.html', function (content) {
  464 + layer.open({
  465 + type: 1,
  466 + area: ['600px', '360px'],
  467 + content: content,
  468 + title: '设置工号(后期统一登录平台接入)',
  469 + shift: 5,
  470 + scrollbar: false,
  471 + success: function () {
  472 + }
  473 + });
  474 + });
  475 + }
  476 + }
  477 + });
  478 +
  479 + $.get('/user/currentUser', function (user) {
  480 + $('#indexTopUName').text(user.userName);
  481 + });
  482 +
  483 + //带 data-pjax 的链接由pjax加载
  484 + $(document).pjax('a[data-pjax]', pjaxContainer);
  485 +
  486 + //pjax左菜单点击事件
  487 + $(document).on('click', '#leftMenuSidebar a[data-pjax]', function () {
  488 + setTitle(this);
  489 +
  490 + $('#leftMenuSidebar li.nav-item.active').removeClass('active');
  491 + $(this).parent().addClass('active');
  492 + showPjax();
  493 + });
  494 +
  495 + //angularjs左菜单点击事件
  496 + $(document).on('click', '#leftMenuSidebar a[data-angularjs]', function () {
  497 + setTitle(this);
  498 +
  499 + $('#leftMenuSidebar li.nav-item.active').removeClass('active');
  500 + $(this).parent().addClass('active');
  501 + showAngJs();
  502 + });
  503 +
  504 + //加载左菜单栏
  505 + $get('/module/findByCurrentUser', null,
  506 + function (ms) {
  507 + var treeArray = createTreeData(ms);
  508 + treeArray.sort(function (a, b) {
  509 + return a.createDate - b.createDate;
  510 + });
  511 + var menuHtml = template('menu_list_temp', {list: treeArray});
  512 + $('#leftMenuSidebar').html(menuHtml);
  513 +
  514 + //----------- 检查URL ----------------
  515 + var h = location.hash;
  516 + if (initFragment && initFragment != '') {
  517 + showPjax();
  518 + //普通片段
  519 + loadPage(initFragment);
  520 + //选中菜单
  521 + $.each($('#leftMenuSidebar a'), function (i, item) {
  522 + if (urlPattern($(item).attr('href'), initFragment)) {
  523 + activeLeftMenu(item);
  524 + }
  525 + });
  526 + } else if (h) {
  527 + //angularjs片段
  528 + showAngJs();
  529 + //选中菜单
  530 + $.each($('#leftMenuSidebar a'), function (i, item) {
  531 + if ($(item).attr('href') == h) {
  532 + activeLeftMenu(item);
  533 + }
  534 + });
  535 + }
  536 + else {
  537 + //加载主页
  538 + loadPage('/pages/home.html');
  539 + }
  540 + });
  541 +
  542 + //修改密码
  543 + $('#changePWD').on('click', function () {
  544 + $.get('/pages/permission/user/changePWD.html', function (content) {
  545 + layer.open({
  546 + type: 1,
  547 + area: ['600px', '360px'],
  548 + content: content,
  549 + title: '修改密码',
  550 + shift: 5,
  551 + scrollbar: false,
  552 + success: function () {
  553 + }
  554 + });
  555 + });
  556 + });
  557 + });
  558 +
  559 + //modal关闭时销毁dom
  560 + $(document).on('hidden.bs.modal', '.modal', function () {
  561 + $(this).remove();
  562 + });
  563 +
  564 + //pjax加载完成事件
  565 + $(document).on('pjax:success', function () {
  566 + var dicts = $(pjaxContainer).find('.nt-dictionary');
  567 + dictionaryUtils.transformDom(dicts);
  568 + });
  569 +
  570 + function loadPage(url) {
  571 + $.pjax({url: url, container: pjaxContainer})
  572 + }
  573 +
  574 + function urlPattern(a, b) {
  575 + var r;
  576 + try {
  577 + r = a.substring(0, a.lastIndexOf('/')) == b.substring(0, b.lastIndexOf('/'));
  578 + } catch (e) {
  579 + r = false;
  580 + }
  581 + return r;
  582 + }
  583 +
  584 + function showPjax() {
  585 + $(angJsContainer).removeClass('page-content active').hide();
  586 + $(pjaxContainer).addClass('page-content active');
  587 + }
  588 +
  589 + function showAngJs() {
  590 + $(pjaxContainer).html('').removeClass('page-content active').hide();
  591 + $(angJsContainer).addClass('page-content active');
  592 + }
  593 +
  594 + function activeLeftMenu(item) {
  595 + $(item).parent('.nav-item').addClass('active').parent('.sub-menu').show().parent().addClass('open');
  596 + setTitle(item);
  597 + }
  598 +
  599 + function setTitle(menuItem){
  600 + document.title = $('span.title', menuItem).text();
  601 + }
  602 +
  603 +</script>
  604 +<!-- d3 -->
  605 +<script src="/assets/js/d3.min.js" data-exclude=1></script>
  606 +<!-- webSocket JS -->
  607 +<script src="/assets/js/sockjs.min.js"></script>
  608 +
  609 +<!-- TODO:angularJS相关库 -->
  610 +
  611 +<!-- angularJS相关库 -->
  612 +<!-- 这个是基于angularjs 1.4.10修改的版本,主要是修改了history控制部分,用于兼容route和pjax的同时操作history的冲突 -->
  613 +<script src="/assets/js/angular.js" data-autocephaly=1></script>
  614 +<script src="/assets/bower_components/angular-i18n/angular-locale_zh-cn.js" data-autocephaly=1></script>
  615 +<script
  616 + src="/assets/bower_components/angular-resource/angular-resource.min.js"
  617 + data-exclude=1></script>
  618 +<script
  619 + src="/assets/bower_components/angular-sanitize/angular-sanitize.min.js"
  620 + data-exclude=1></script>
  621 +<script
  622 + src="/assets/bower_components/angular-animate/angular-animate.min.js"
  623 + data-exclude=1></script>
  624 +<script
  625 + src="/assets/bower_components/angular-touch/angular-touch.min.js"
  626 + data-exclude=1></script>
  627 +<script
  628 + src="/assets/bower_components/angular-ui-router/release/angular-ui-router.min.js"
  629 + data-exclude=1></script>
  630 +<script
  631 + src="/assets/bower_components/oclazyload/dist/ocLazyLoad.min.js"
  632 + data-exclude=1></script>
  633 +<script
  634 + src="/assets/bower_components/angular-bootstrap/ui-bootstrap-tpls.min.js"
  635 + data-exclude=1></script>
  636 +<!-- handsontable相关js -->
  637 +<script
  638 + src="/assets/bower_components/handsontable/dist/handsontable.full.js"></script>
  639 +<script
  640 + src="/assets/bower_components/ngHandsontable/dist/ngHandsontable.js"></script>
  641 +<!-- sweetalert相关js -->
  642 +<script src="/assets/bower_components/sweetalert/dist/sweetalert.min.js"></script>
  643 +<script src="/assets/bower_components/ng-sweet-alert/ng-sweet-alert.js"></script>
  644 +
  645 +<!-- schedule计划调度AngularJS模块主JS -->
  646 +<script src="/pages/scheduleApp/module/common/main.js" data-exclude=1></script>
  647 +<script
  648 + src="/pages/scheduleApp/module/common/prj-common-globalservice.js"
  649 + data-exclude=1></script>
  650 +<script src="/pages/scheduleApp/module/common/prj-common-filter.js"
  651 + data-exclude=1></script>
  652 +<script src="/pages/scheduleApp/module/common/prj-common-directive.js"
  653 + data-exclude=1></script>
  654 +<script
  655 + src="/pages/scheduleApp/module/common/prj-common-ui-route-state.js"
  656 + data-exclude=1></script>
  657 +
  658 +<!-- 地图相关 -->
  659 +<!-- 百度 -->
  660 +<script
  661 + src="//api.map.baidu.com/api?v=3.0&ak=1TgEKvYqohJyeGXnN6yHSSTb4psOarQw"
  662 + data-exclude=1></script>
  663 +<script
  664 + src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"
  665 + data-exclude=1></script>
  666 +<script type="text/javascript"
  667 + src="//api.map.baidu.com/library/DrawingManager/1.4/src/DrawingManager_min.js"
  668 + data-exclude=1></script>
  669 +<script type="text/javascript"
  670 + src="//api.map.baidu.com/library/RichMarker/1.2/src/RichMarker_min.js "
  671 + data-exclude=1></script>
  672 +<script src="/assets/js/baidu/TextIconOverlay.js" data-exclude=1></script>
  673 +<script src="/assets/js/baidu//MarkerClusterer.js" data-exclude=1></script>
  674 +<!-- 高德 -->
  675 +<script
  676 + src="//webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"
  677 + data-exclude=1></script>
  678 +<!-- echarts4 -->
  679 +<script src="/metronic_v4.5.4/plugins/echarts4/echarts.min.js"></script>
  680 +<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>
  681 +<!-- RSA加密 -->
  682 +<script src="/assets/plugins/jsencrypt.min.js"></script>
  683 +<script src="/assets/js/eventproxy.js"></script>
  684 +<!-- 线路路由信息操作 -->
  685 +<script src="/pages/base/stationroute/js/routes-operation.js"></script>
  686 +<script src="/pages/base/stationroute/js/routes-service.js"></script>
  687 +<script src="/assets/js/CoordinateConverter.js"></script>
  688 +</body>
689 </html> 689 </html>
690 \ No newline at end of file 690 \ No newline at end of file
src/main/resources/static/pages/base/carpark/js/add-vmap-world.js
1 -var addCarParkVmapWorlds = function() {  
2 - var mapB = '', circle = '', drawingManager = '',circle='',marker='';  
3 - var Bmap = {  
4 - init : function() {  
5 - // 设置中心点,  
6 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};  
7 - // 百度API Key  
8 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
9 - // 初始化百度地图  
10 - mapB = new BMap.Map("addCarParkbmap_basic");  
11 - //中心点和缩放级别  
12 - mapB.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);  
13 - //启用地图拖拽事件,默认启用(可不写)  
14 - mapB.enableDragging();  
15 - //启用地图滚轮放大缩小  
16 - mapB.enableScrollWheelZoom();  
17 - //禁用鼠标双击放大  
18 - mapB.disableDoubleClickZoom();  
19 - //启用键盘上下左右键移动地图  
20 - mapB.enableKeyboard();  
21 - var styleOptions = {  
22 - //边线颜色。  
23 - strokeColor : "blue",  
24 - //填充颜色。当参数为空时,圆形将没有填充效果。  
25 - fillColor : "blue",  
26 - //边线的宽度,以像素为单位。  
27 - strokeWeight : 3,  
28 - //边线透明度,取值范围0 - 1。  
29 - strokeOpacity : 0.8,  
30 - //填充的透明度,取值范围0 - 1。  
31 - fillOpacity : 0.6,  
32 - //边线的样式,solid或dashed。  
33 - strokeStyle : 'solid'  
34 - };  
35 - // 创建鼠标绘制管理类  
36 - drawingManager = new BMapLib.DrawingManager(mapB, {  
37 - //是否开启绘制模式  
38 - isOpen : false,  
39 - //是否显示工具栏  
40 - enableDrawingTool : false,  
41 - drawingToolOptions : {  
42 - //位置  
43 - anchor : BMAP_ANCHOR_TOP_RIGHT,  
44 - //偏离值  
45 - offset : new BMap.Size(5, 5),  
46 - //工具栏缩放比例  
47 - scale : 0.8  
48 - },  
49 - //线的样式  
50 - polygonOptions : styleOptions  
51 - });  
52 - // 添加绘画完成事件  
53 - drawingManager.addEventListener('polygoncomplete', function(e) {  
54 - drawingManager.close();  
55 - if (e.getPath().length <= 2) {  
56 - // 弹出提示消息  
57 - layer.msg('坐标点不能小于等于两个...');  
58 - // 清除地图覆盖物  
59 - mapB.clearOverlays();  
60 - drawingManager.open();  
61 - return false;  
62 - }else {  
63 - var pointE = e;  
64 - // 多变行质心点  
65 - var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat;  
66 - var addPolyGonLen_ = pointE.getPath().length;  
67 - for(var k =0;k<addPolyGonLen_;k++) {  
68 - if(k==0) {  
69 - bPloygonGrid = pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;  
70 - }else {  
71 - bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;  
72 - }  
73 - }  
74 - bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[0].lng + ' ' + pointE.getPath()[0].lat;  
75 - PublicFunctions.setFormInputValue(addSttationPoints_,bPloygonGrid,'d','');  
76 - }  
77 - });  
78 - return mapB;  
79 - },  
80 - // 根据地理名称获取百度经纬度坐标  
81 - localSearchFromAdreesToPoint: function(Address,cb) {  
82 - // 创建一个搜索类实例  
83 - var localSearch = new BMap.LocalSearch(mapB);  
84 - // 检索完成后的回调函数。  
85 - localSearch.setSearchCompleteCallback(function (searchResult) {  
86 - var resultPoints = '';  
87 - if(searchResult) {  
88 - // 返回索引指定的结果。索引0表示第1条结果  
89 - var poi = searchResult.getPoi(0);  
90 - if(poi) {  
91 - //获取经度和纬度  
92 - var stationNameChangePoint = new BMap.Point( poi.point.lng, poi.point.lat);  
93 - marker = new BMap.Marker(stationNameChangePoint);  
94 - var PanOptions ={noAnimation :true};  
95 - mapB.panTo(stationNameChangePoint,PanOptions);  
96 - // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)  
97 - mapB.setZoom(18);  
98 - mapB.panBy(0,-80);  
99 - // 将标注添加到地图中  
100 - mapB.addOverlay(marker);  
101 - //跳动的动画  
102 - marker.setAnimation(BMAP_ANIMATION_BOUNCE);  
103 - cb && cb(stationNameChangePoint);  
104 - }else {  
105 - // 弹出添加成功提示消息  
106 - layer.msg('无法获取停车场【'+Address+'】地理位置!');  
107 - cb && cb(false);  
108 - }  
109 - }else {  
110 - // 弹出添加成功提示消息  
111 - layer.msg('无法获取停车场【'+Address+'】地理位置!');  
112 - cb && cb(false);  
113 - }  
114 - });  
115 - // 根据检索词发起检索。  
116 - localSearch.search(Address);  
117 - },  
118 -  
119 - // 画圆  
120 - pointsCircle : function(stationNameChangePoint) {  
121 - //创建圆  
122 - circle = new BMap.Circle(stationNameChangePoint,100,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});  
123 - // 百度地图添加覆盖物圆  
124 - mapB.addOverlay(circle);  
125 - // 开启编辑功能  
126 - circle.enableEditing();  
127 - // 编辑圆监听事件  
128 - circle.addEventListener('remove',function() {  
129 - // 清除marker  
130 - mapB.removeOverlay(marker);  
131 - // 返回圆形的半径,单位为米。  
132 - var newRadius = circle.getRadius();  
133 - // 返回圆形的中心点坐标。  
134 - var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;  
135 - var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];  
136 - circle = '';  
137 - PublicFunctions.setFormInputValue(newCenter,'','r',Math.round(newRadius));  
138 - });  
139 - },  
140 - // 打开绘画工具  
141 - drawingManagerOpen : function() {  
142 - // 打开鼠标绘画工具  
143 - drawingManager.open();  
144 - // 设置属性  
145 - drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);  
146 - },  
147 - drawingManagerClose : function() {  
148 - drawingManager.close();  
149 - },  
150 - clearMarkAndOverlays : function() {  
151 - // 清楚地图覆盖物  
152 - mapB.clearOverlays();  
153 - }  
154 - }  
155 - return Bmap; 1 +var addCarParkVmapWorlds = function() {
  2 + var mapB = '', circle = '', drawingManager = '',circle='',marker='';
  3 + var Bmap = {
  4 + init : function() {
  5 + // 设置中心点,
  6 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};
  7 + // 百度API Key
  8 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
  9 + // 初始化百度地图
  10 + mapB = new BMap.Map("addCarParkbmap_basic");
  11 + //中心点和缩放级别
  12 + mapB.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);
  13 + //启用地图拖拽事件,默认启用(可不写)
  14 + mapB.enableDragging();
  15 + //启用地图滚轮放大缩小
  16 + mapB.enableScrollWheelZoom();
  17 + //禁用鼠标双击放大
  18 + mapB.disableDoubleClickZoom();
  19 + //启用键盘上下左右键移动地图
  20 + mapB.enableKeyboard();
  21 + var styleOptions = {
  22 + //边线颜色。
  23 + strokeColor : "blue",
  24 + //填充颜色。当参数为空时,圆形将没有填充效果。
  25 + fillColor : "blue",
  26 + //边线的宽度,以像素为单位。
  27 + strokeWeight : 3,
  28 + //边线透明度,取值范围0 - 1。
  29 + strokeOpacity : 0.8,
  30 + //填充的透明度,取值范围0 - 1。
  31 + fillOpacity : 0.6,
  32 + //边线的样式,solid或dashed。
  33 + strokeStyle : 'solid'
  34 + };
  35 + // 创建鼠标绘制管理类
  36 + drawingManager = new BMapLib.DrawingManager(mapB, {
  37 + //是否开启绘制模式
  38 + isOpen : false,
  39 + //是否显示工具栏
  40 + enableDrawingTool : false,
  41 + drawingToolOptions : {
  42 + //位置
  43 + anchor : BMAP_ANCHOR_TOP_RIGHT,
  44 + //偏离值
  45 + offset : new BMap.Size(5, 5),
  46 + //工具栏缩放比例
  47 + scale : 0.8
  48 + },
  49 + //线的样式
  50 + polygonOptions : styleOptions
  51 + });
  52 + // 添加绘画完成事件
  53 + drawingManager.addEventListener('polygoncomplete', function(e) {
  54 + drawingManager.close();
  55 + if (e.getPath().length <= 2) {
  56 + // 弹出提示消息
  57 + layer.msg('坐标点不能小于等于两个...');
  58 + // 清除地图覆盖物
  59 + mapB.clearOverlays();
  60 + drawingManager.open();
  61 + return false;
  62 + }else {
  63 + var pointE = e;
  64 + // 多变行质心点
  65 + var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat;
  66 + var addPolyGonLen_ = pointE.getPath().length;
  67 + for(var k =0;k<addPolyGonLen_;k++) {
  68 + if(k==0) {
  69 + bPloygonGrid = pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;
  70 + }else {
  71 + bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;
  72 + }
  73 + }
  74 + bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[0].lng + ' ' + pointE.getPath()[0].lat;
  75 + PublicFunctions.setFormInputValue(addSttationPoints_,bPloygonGrid,'d','');
  76 + }
  77 + });
  78 + return mapB;
  79 + },
  80 + // 根据地理名称获取百度经纬度坐标
  81 + localSearchFromAdreesToPoint: function(Address,cb) {
  82 + // 创建一个搜索类实例
  83 + var localSearch = new BMap.LocalSearch(mapB);
  84 + // 检索完成后的回调函数。
  85 + localSearch.setSearchCompleteCallback(function (searchResult) {
  86 + var resultPoints = '';
  87 + if(searchResult) {
  88 + // 返回索引指定的结果。索引0表示第1条结果
  89 + var poi = searchResult.getPoi(0);
  90 + if(poi) {
  91 + //获取经度和纬度
  92 + var stationNameChangePoint = new BMap.Point( poi.point.lng, poi.point.lat);
  93 + marker = new BMap.Marker(stationNameChangePoint);
  94 + var PanOptions ={noAnimation :true};
  95 + mapB.panTo(stationNameChangePoint,PanOptions);
  96 + // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)
  97 + mapB.setZoom(18);
  98 + mapB.panBy(0,-80);
  99 + // 将标注添加到地图中
  100 + mapB.addOverlay(marker);
  101 + //跳动的动画
  102 + marker.setAnimation(BMAP_ANIMATION_BOUNCE);
  103 + cb && cb(stationNameChangePoint);
  104 + }else {
  105 + // 弹出添加成功提示消息
  106 + layer.msg('无法获取停车场【'+Address+'】地理位置!');
  107 + cb && cb(false);
  108 + }
  109 + }else {
  110 + // 弹出添加成功提示消息
  111 + layer.msg('无法获取停车场【'+Address+'】地理位置!');
  112 + cb && cb(false);
  113 + }
  114 + });
  115 + // 根据检索词发起检索。
  116 + localSearch.search(Address);
  117 + },
  118 +
  119 + // 画圆
  120 + pointsCircle : function(stationNameChangePoint) {
  121 + //创建圆
  122 + circle = new BMap.Circle(stationNameChangePoint,100,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
  123 + // 百度地图添加覆盖物圆
  124 + mapB.addOverlay(circle);
  125 + // 开启编辑功能
  126 + circle.enableEditing();
  127 + // 编辑圆监听事件
  128 + circle.addEventListener('remove',function() {
  129 + // 清除marker
  130 + mapB.removeOverlay(marker);
  131 + // 返回圆形的半径,单位为米。
  132 + var newRadius = circle.getRadius();
  133 + // 返回圆形的中心点坐标。
  134 + var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;
  135 + var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];
  136 + circle = '';
  137 + PublicFunctions.setFormInputValue(newCenter,'','r',Math.round(newRadius));
  138 + });
  139 + },
  140 + // 打开绘画工具
  141 + drawingManagerOpen : function() {
  142 + // 打开鼠标绘画工具
  143 + drawingManager.open();
  144 + // 设置属性
  145 + drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);
  146 + },
  147 + drawingManagerClose : function() {
  148 + drawingManager.close();
  149 + },
  150 + clearMarkAndOverlays : function() {
  151 + // 清楚地图覆盖物
  152 + mapB.clearOverlays();
  153 + }
  154 + }
  155 + return Bmap;
156 }(); 156 }();
157 \ No newline at end of file 157 \ No newline at end of file
src/main/resources/static/pages/base/carpark/js/carpark-positions-map.js
1 -/**  
2 - * 百度地图  
3 - *  
4 - */  
5 -  
6 -var CarParkPWorldsBMap = function () {  
7 -  
8 - var mapValue='',drawingManager='',marker='',circle='',polygon='';  
9 -  
10 - var Bmap = {  
11 - init : function() {  
12 - // 设置中心点,  
13 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};  
14 - // 百度API Key  
15 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
16 - // 初始化百度地图  
17 - mapValue = new BMap.Map("carParkbmap_basic");  
18 - //中心点和缩放级别  
19 - mapValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);  
20 - //启用地图拖拽事件,默认启用(可不写)  
21 - mapValue.enableDragging();  
22 - //启用地图滚轮放大缩小  
23 - mapValue.enableScrollWheelZoom();  
24 - //禁用鼠标双击放大  
25 - mapValue.disableDoubleClickZoom();  
26 - //启用键盘上下左右键移动地图  
27 - mapValue.enableKeyboard();  
28 - var styleOptions = {  
29 - //边线颜色。  
30 - strokeColor : "blue",  
31 - //填充颜色。当参数为空时,圆形将没有填充效果。  
32 - fillColor : "blue",  
33 - //边线的宽度,以像素为单位。  
34 - strokeWeight : 3,  
35 - //边线透明度,取值范围0 - 1。  
36 - strokeOpacity : 0.8,  
37 - //填充的透明度,取值范围0 - 1。  
38 - fillOpacity : 0.6,  
39 - //边线的样式,solid或dashed。  
40 - strokeStyle : 'solid'  
41 - };  
42 - // 创建鼠标绘制管理类  
43 - drawingManager = new BMapLib.DrawingManager(mapValue, {  
44 - //是否开启绘制模式  
45 - isOpen : false,  
46 - //是否显示工具栏  
47 - enableDrawingTool : false,  
48 - drawingToolOptions : {  
49 - //位置  
50 - anchor : BMAP_ANCHOR_TOP_RIGHT,  
51 - //偏离值  
52 - offset : new BMap.Size(5, 5),  
53 - //工具栏缩放比例  
54 - scale : 0.8  
55 - },  
56 - //线的样式  
57 - polygonOptions : styleOptions  
58 - });  
59 - // 添加绘画完成事件  
60 - drawingManager.addEventListener('polygoncomplete', function(e) {  
61 - drawingManager.close();  
62 - if (e.getPath().length <= 2) {  
63 - // 弹出提示消息  
64 - layer.msg('坐标点不能小于等于两个...');  
65 - // 清除地图覆盖物  
66 - Bmap.clearMarkAndOverlays();  
67 - // 加载该线路下所有站点位置添加到地图上  
68 - return false;  
69 - }else {  
70 - var pointE = e;  
71 - // 多变行质心点  
72 - var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat;  
73 - var addPolyGonLen_ = pointE.getPath().length;  
74 - for(var k =0;k<addPolyGonLen_;k++) {  
75 - if(k==0) {  
76 - bPloygonGrid = pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;  
77 - }else {  
78 - bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;  
79 - }  
80 -  
81 - }  
82 - bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[0].lng + ' ' + pointE.getPath()[0].lat;  
83 - /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */  
84 - EditCarParkObj.setCarParkBcenterPoint(addSttationPoints_);  
85 - /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */  
86 - EditCarParkObj.setCarParkShapesType('d');  
87 - /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */  
88 - EditCarParkObj.setCarParkRadius('');  
89 - /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */  
90 - EditCarParkObj.setCarParkBparkPoint(bPloygonGrid);  
91 - $.get('edit.html', function(m){  
92 - $(pjaxContainer).append(m);  
93 - $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);  
94 - });  
95 - }  
96 - });  
97 - return mapValue;  
98 - },  
99 - openDrawingManager : function() {  
100 - // 清楚地图覆盖物  
101 - // mapValue.clearOverlays();  
102 - // 打开鼠标绘画工具  
103 - drawingManager.open();  
104 - // 设置属性  
105 - drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);  
106 - },  
107 - drawingManagerClose : function() {  
108 - drawingManager.close();  
109 - },  
110 - localSearchFromAdreesToPoint: function(Address) {  
111 - // 创建一个搜索类实例  
112 - var localSearch = new BMap.LocalSearch(mapValue);  
113 - // 检索完成后的回调函数。  
114 - localSearch.setSearchCompleteCallback(function (searchResult) {  
115 - var resultPoints = '';  
116 - if(searchResult) {  
117 - // 返回索引指定的结果。索引0表示第1条结果  
118 - var poi = searchResult.getPoi(0);  
119 - if(poi) {  
120 - //获取经度和纬度  
121 - var Points = poi.point.lng + ' ' + poi.point.lat;  
122 - var BJwpointsArray = Points.split(' ');  
123 - var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);  
124 - var marker_stargt2 = new BMap.Marker(stationNameChangePoint);  
125 - var PanOptions ={noAnimation :true};  
126 - mapValue.panTo(stationNameChangePoint,PanOptions);  
127 - mapValue.panBy(0,-200);  
128 - // 将标注添加到地图中  
129 - mapValue.addOverlay(marker_stargt2);  
130 - //跳动的动画  
131 - marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE);  
132 - }  
133 - }  
134 - });  
135 - // 根据检索词发起检索。  
136 - localSearch.search(Address);  
137 - },  
138 - /** 画圆 @param:<r:停车场信息;point:中心点;htm:信息窗口html文本;pots:信息窗口参数属性> */  
139 - pointsCircle : function(r,point,htm,opts) {  
140 - //创建圆  
141 - circle = new BMap.Circle(point,r[0].carParkRadius,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});  
142 - // 允许覆盖物在map.clearOverlays方法中被清除  
143 - circle.enableMassClear();  
144 - // 百度地图添加覆盖物圆  
145 - mapValue.addOverlay(circle);  
146 - // 创建信息窗口  
147 - infoWindow = new BMap.InfoWindow(htm, opts);  
148 - // 自定义标注物图片  
149 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
150 - // 创建点  
151 - marker = new BMap.Marker(point,{icon : icon_target});  
152 - // 把标注添物加到地图上  
153 - mapValue.addOverlay(marker);  
154 - setTimeout(function(){  
155 - //开启信息窗口  
156 - marker.openInfoWindow(infoWindow,point);  
157 - },100);  
158 - // 是否在平移过程中禁止动画。(自1.2新增)  
159 - var PanOptions_ ={noAnimation :true};  
160 - // 将地图的中心点更改为给定的点。  
161 - mapValue.panTo(point,PanOptions_);  
162 - // 添加标志物监听事件  
163 - marker.addEventListener("click",function() {  
164 - //开启信息窗口  
165 - marker.openInfoWindow(infoWindow,point);  
166 - });  
167 - },  
168 -  
169 - /** 画多边形 @param:<r:停车场信息;point:中心点;htm:信息窗口html文本;pots:信息窗口参数属性> */  
170 - pointsPolygon : function(r,pointPolygon,htm,opts_polygon) {  
171 - // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)  
172 - mapValue.setZoom(17);  
173 - // 获取多边形坐标字符串  
174 - var stationBPolygonGrid = r[0].carParkBparkPoint;  
175 - // 截取多边形坐标字符串  
176 - var stationBPolygonGridStr = stationBPolygonGrid.substring(9,stationBPolygonGrid.length-2);  
177 - // 按逗号切割  
178 - var pointPolygonArray = stationBPolygonGridStr.split(',');  
179 - // 多边形坐标集合  
180 - var polygonP = [];  
181 - for(var v = 0;v<pointPolygonArray.length;v++) {  
182 - polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0],pointPolygonArray[v].split(" ")[1]));  
183 - }  
184 - // 画多边形  
185 - polygon = new BMap.Polygon(polygonP, {  
186 - // 线条显色  
187 - strokeColor : "blue",  
188 - // 边线的宽度,以像素为单位。  
189 - strokeWeight : 2,  
190 - // 边线透明度,取值范围0 - 1。  
191 - strokeOpacity : 0.5  
192 - });  
193 - // 增加地图覆盖物多边形  
194 - mapValue.addOverlay(polygon);  
195 - // 创建信息窗口  
196 - infoWindow = new BMap.InfoWindow(htm, opts_polygon);  
197 - // 自定义标注物图片  
198 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
199 - // 创建点  
200 - marker = new BMap.Marker(pointPolygon,{icon : icon_target});  
201 - // 把标注添物加到地图上  
202 - mapValue.addOverlay(marker);  
203 - // 是否在平移过程中禁止动画。(自1.2新增)  
204 - var PanOptions_ ={noAnimation :true};  
205 - // 将地图的中心点更改为给定的点。  
206 - mapValue.panTo(pointPolygon,PanOptions_);  
207 - // 将地图在水平位置上移动x像素,垂直位置上移动y像素。  
208 - mapValue.panBy(10,-250,PanOptions_);  
209 - //开启信息窗口  
210 - marker.openInfoWindow(infoWindow,pointPolygon);  
211 - },  
212 -  
213 - // 编辑图形  
214 - editShapes : function(stationShapesTypeV,mindex) {  
215 - // 关闭信息窗口  
216 - marker.closeInfoWindow();  
217 - // 清除marker  
218 - mapValue.removeOverlay(marker);  
219 - // 编辑圆  
220 - if(stationShapesTypeV =='r') {  
221 - // 开启编辑功能  
222 - circle.enableEditing();  
223 - // 编辑圆监听事件  
224 - circle.addEventListener('dblclick',function() {  
225 - // 关闭提示弹出层  
226 - layer.close(mindex);  
227 - // 返回圆形的半径,单位为米。  
228 - var newRadius = circle.getRadius();  
229 - // 返回圆形的中心点坐标。  
230 - var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;  
231 - var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];  
232 - /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */  
233 - EditCarParkObj.setCarParkBcenterPoint(newCenter);  
234 - /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */  
235 - EditCarParkObj.setCarParkShapesType('r');  
236 - /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */  
237 - EditCarParkObj.setCarParkRadius(Math.round(newRadius));  
238 - /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */  
239 - EditCarParkObj.setCarParkBparkPoint('');  
240 - // 加载编辑页面  
241 - $.get('edit.html', function(m){  
242 - $(pjaxContainer).append(m);  
243 - $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);  
244 - });  
245 - });  
246 - // 编辑多变行  
247 - }else if(stationShapesTypeV =='d') {  
248 - // 开启编辑功能(自 1.1 新增)  
249 - polygon.enableEditing();  
250 - // 添加多变行编辑事件  
251 - polygon.addEventListener('dblclick',function(e) {  
252 - // 获取编辑的多边形对象  
253 - var edit_pointE = polygon;  
254 - var edit_bPloygonGrid = "";  
255 - var editPolyGonLen_ = edit_pointE.getPath().length;  
256 - for(var k =0;k<editPolyGonLen_;k++) {  
257 - if(k==0) {  
258 - edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;  
259 - }else {  
260 - edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;  
261 - }  
262 - }  
263 - edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;  
264 - // 多边形中心点  
265 - var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;  
266 - /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */  
267 - EditCarParkObj.setCarParkBcenterPoint(centre_points);  
268 - /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */  
269 - EditCarParkObj.setCarParkShapesType('d');  
270 - /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */  
271 - EditCarParkObj.setCarParkRadius('');  
272 - /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */  
273 - EditCarParkObj.setCarParkBparkPoint(edit_bPloygonGrid);  
274 - $.get('edit.html', function(m){  
275 - $(pjaxContainer).append(m);  
276 - $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);  
277 - });  
278 - });  
279 - }  
280 - },  
281 - clearMarkAndOverlays : function() {  
282 - // 清楚地图覆盖物  
283 - mapValue.clearOverlays();  
284 - }  
285 - }  
286 - return Bmap; 1 +/**
  2 + * 百度地图
  3 + *
  4 + */
  5 +
  6 +var CarParkPWorldsBMap = function () {
  7 +
  8 + var mapValue='',drawingManager='',marker='',circle='',polygon='';
  9 +
  10 + var Bmap = {
  11 + init : function() {
  12 + // 设置中心点,
  13 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};
  14 + // 百度API Key
  15 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
  16 + // 初始化百度地图
  17 + mapValue = new BMap.Map("carParkbmap_basic");
  18 + //中心点和缩放级别
  19 + mapValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);
  20 + //启用地图拖拽事件,默认启用(可不写)
  21 + mapValue.enableDragging();
  22 + //启用地图滚轮放大缩小
  23 + mapValue.enableScrollWheelZoom();
  24 + //禁用鼠标双击放大
  25 + mapValue.disableDoubleClickZoom();
  26 + //启用键盘上下左右键移动地图
  27 + mapValue.enableKeyboard();
  28 + var styleOptions = {
  29 + //边线颜色。
  30 + strokeColor : "blue",
  31 + //填充颜色。当参数为空时,圆形将没有填充效果。
  32 + fillColor : "blue",
  33 + //边线的宽度,以像素为单位。
  34 + strokeWeight : 3,
  35 + //边线透明度,取值范围0 - 1。
  36 + strokeOpacity : 0.8,
  37 + //填充的透明度,取值范围0 - 1。
  38 + fillOpacity : 0.6,
  39 + //边线的样式,solid或dashed。
  40 + strokeStyle : 'solid'
  41 + };
  42 + // 创建鼠标绘制管理类
  43 + drawingManager = new BMapLib.DrawingManager(mapValue, {
  44 + //是否开启绘制模式
  45 + isOpen : false,
  46 + //是否显示工具栏
  47 + enableDrawingTool : false,
  48 + drawingToolOptions : {
  49 + //位置
  50 + anchor : BMAP_ANCHOR_TOP_RIGHT,
  51 + //偏离值
  52 + offset : new BMap.Size(5, 5),
  53 + //工具栏缩放比例
  54 + scale : 0.8
  55 + },
  56 + //线的样式
  57 + polygonOptions : styleOptions
  58 + });
  59 + // 添加绘画完成事件
  60 + drawingManager.addEventListener('polygoncomplete', function(e) {
  61 + drawingManager.close();
  62 + if (e.getPath().length <= 2) {
  63 + // 弹出提示消息
  64 + layer.msg('坐标点不能小于等于两个...');
  65 + // 清除地图覆盖物
  66 + Bmap.clearMarkAndOverlays();
  67 + // 加载该线路下所有站点位置添加到地图上
  68 + return false;
  69 + }else {
  70 + var pointE = e;
  71 + // 多变行质心点
  72 + var addSttationPoints_ = pointE.getBounds().getCenter().lng+ ' ' + pointE.getBounds().getCenter().lat;
  73 + var addPolyGonLen_ = pointE.getPath().length;
  74 + for(var k =0;k<addPolyGonLen_;k++) {
  75 + if(k==0) {
  76 + bPloygonGrid = pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;
  77 + }else {
  78 + bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[k].lng + ' ' + pointE.getPath()[k].lat;
  79 + }
  80 +
  81 + }
  82 + bPloygonGrid = bPloygonGrid + ',' + pointE.getPath()[0].lng + ' ' + pointE.getPath()[0].lat;
  83 + /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */
  84 + EditCarParkObj.setCarParkBcenterPoint(addSttationPoints_);
  85 + /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */
  86 + EditCarParkObj.setCarParkShapesType('d');
  87 + /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */
  88 + EditCarParkObj.setCarParkRadius('');
  89 + /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */
  90 + EditCarParkObj.setCarParkBparkPoint(bPloygonGrid);
  91 + $.get('edit.html', function(m){
  92 + $(pjaxContainer).append(m);
  93 + $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);
  94 + });
  95 + }
  96 + });
  97 + return mapValue;
  98 + },
  99 + openDrawingManager : function() {
  100 + // 清楚地图覆盖物
  101 + // mapValue.clearOverlays();
  102 + // 打开鼠标绘画工具
  103 + drawingManager.open();
  104 + // 设置属性
  105 + drawingManager.setDrawingMode(BMAP_DRAWING_POLYGON);
  106 + },
  107 + drawingManagerClose : function() {
  108 + drawingManager.close();
  109 + },
  110 + localSearchFromAdreesToPoint: function(Address) {
  111 + // 创建一个搜索类实例
  112 + var localSearch = new BMap.LocalSearch(mapValue);
  113 + // 检索完成后的回调函数。
  114 + localSearch.setSearchCompleteCallback(function (searchResult) {
  115 + var resultPoints = '';
  116 + if(searchResult) {
  117 + // 返回索引指定的结果。索引0表示第1条结果
  118 + var poi = searchResult.getPoi(0);
  119 + if(poi) {
  120 + //获取经度和纬度
  121 + var Points = poi.point.lng + ' ' + poi.point.lat;
  122 + var BJwpointsArray = Points.split(' ');
  123 + var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);
  124 + var marker_stargt2 = new BMap.Marker(stationNameChangePoint);
  125 + var PanOptions ={noAnimation :true};
  126 + mapValue.panTo(stationNameChangePoint,PanOptions);
  127 + mapValue.panBy(0,-200);
  128 + // 将标注添加到地图中
  129 + mapValue.addOverlay(marker_stargt2);
  130 + //跳动的动画
  131 + marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE);
  132 + }
  133 + }
  134 + });
  135 + // 根据检索词发起检索。
  136 + localSearch.search(Address);
  137 + },
  138 + /** 画圆 @param:<r:停车场信息;point:中心点;htm:信息窗口html文本;pots:信息窗口参数属性> */
  139 + pointsCircle : function(r,point,htm,opts) {
  140 + //创建圆
  141 + circle = new BMap.Circle(point,r[0].carParkRadius,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
  142 + // 允许覆盖物在map.clearOverlays方法中被清除
  143 + circle.enableMassClear();
  144 + // 百度地图添加覆盖物圆
  145 + mapValue.addOverlay(circle);
  146 + // 创建信息窗口
  147 + infoWindow = new BMap.InfoWindow(htm, opts);
  148 + // 自定义标注物图片
  149 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));
  150 + // 创建点
  151 + marker = new BMap.Marker(point,{icon : icon_target});
  152 + // 把标注添物加到地图上
  153 + mapValue.addOverlay(marker);
  154 + setTimeout(function(){
  155 + //开启信息窗口
  156 + marker.openInfoWindow(infoWindow,point);
  157 + },100);
  158 + // 是否在平移过程中禁止动画。(自1.2新增)
  159 + var PanOptions_ ={noAnimation :true};
  160 + // 将地图的中心点更改为给定的点。
  161 + mapValue.panTo(point,PanOptions_);
  162 + // 添加标志物监听事件
  163 + marker.addEventListener("click",function() {
  164 + //开启信息窗口
  165 + marker.openInfoWindow(infoWindow,point);
  166 + });
  167 + },
  168 +
  169 + /** 画多边形 @param:<r:停车场信息;point:中心点;htm:信息窗口html文本;pots:信息窗口参数属性> */
  170 + pointsPolygon : function(r,pointPolygon,htm,opts_polygon) {
  171 + // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)
  172 + mapValue.setZoom(17);
  173 + // 获取多边形坐标字符串
  174 + var stationBPolygonGrid = r[0].carParkBparkPoint;
  175 + // 截取多边形坐标字符串
  176 + var stationBPolygonGridStr = stationBPolygonGrid.substring(9,stationBPolygonGrid.length-2);
  177 + // 按逗号切割
  178 + var pointPolygonArray = stationBPolygonGridStr.split(',');
  179 + // 多边形坐标集合
  180 + var polygonP = [];
  181 + for(var v = 0;v<pointPolygonArray.length;v++) {
  182 + polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0],pointPolygonArray[v].split(" ")[1]));
  183 + }
  184 + // 画多边形
  185 + polygon = new BMap.Polygon(polygonP, {
  186 + // 线条显色
  187 + strokeColor : "blue",
  188 + // 边线的宽度,以像素为单位。
  189 + strokeWeight : 2,
  190 + // 边线透明度,取值范围0 - 1。
  191 + strokeOpacity : 0.5
  192 + });
  193 + // 增加地图覆盖物多边形
  194 + mapValue.addOverlay(polygon);
  195 + // 创建信息窗口
  196 + infoWindow = new BMap.InfoWindow(htm, opts_polygon);
  197 + // 自定义标注物图片
  198 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));
  199 + // 创建点
  200 + marker = new BMap.Marker(pointPolygon,{icon : icon_target});
  201 + // 把标注添物加到地图上
  202 + mapValue.addOverlay(marker);
  203 + // 是否在平移过程中禁止动画。(自1.2新增)
  204 + var PanOptions_ ={noAnimation :true};
  205 + // 将地图的中心点更改为给定的点。
  206 + mapValue.panTo(pointPolygon,PanOptions_);
  207 + // 将地图在水平位置上移动x像素,垂直位置上移动y像素。
  208 + mapValue.panBy(10,-250,PanOptions_);
  209 + //开启信息窗口
  210 + marker.openInfoWindow(infoWindow,pointPolygon);
  211 + },
  212 +
  213 + // 编辑图形
  214 + editShapes : function(stationShapesTypeV,mindex) {
  215 + // 关闭信息窗口
  216 + marker.closeInfoWindow();
  217 + // 清除marker
  218 + mapValue.removeOverlay(marker);
  219 + // 编辑圆
  220 + if(stationShapesTypeV =='r') {
  221 + // 开启编辑功能
  222 + circle.enableEditing();
  223 + // 编辑圆监听事件
  224 + circle.addEventListener('dblclick',function() {
  225 + // 关闭提示弹出层
  226 + layer.close(mindex);
  227 + // 返回圆形的半径,单位为米。
  228 + var newRadius = circle.getRadius();
  229 + // 返回圆形的中心点坐标。
  230 + var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;
  231 + var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];
  232 + /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */
  233 + EditCarParkObj.setCarParkBcenterPoint(newCenter);
  234 + /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */
  235 + EditCarParkObj.setCarParkShapesType('r');
  236 + /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */
  237 + EditCarParkObj.setCarParkRadius(Math.round(newRadius));
  238 + /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */
  239 + EditCarParkObj.setCarParkBparkPoint('');
  240 + // 加载编辑页面
  241 + $.get('edit.html', function(m){
  242 + $(pjaxContainer).append(m);
  243 + $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);
  244 + });
  245 + });
  246 + // 编辑多变行
  247 + }else if(stationShapesTypeV =='d') {
  248 + // 开启编辑功能(自 1.1 新增)
  249 + polygon.enableEditing();
  250 + // 添加多变行编辑事件
  251 + polygon.addEventListener('dblclick',function(e) {
  252 + // 获取编辑的多边形对象
  253 + var edit_pointE = polygon;
  254 + var edit_bPloygonGrid = "";
  255 + var editPolyGonLen_ = edit_pointE.getPath().length;
  256 + for(var k =0;k<editPolyGonLen_;k++) {
  257 + if(k==0) {
  258 + edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
  259 + }else {
  260 + edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
  261 + }
  262 + }
  263 + edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;
  264 + // 多边形中心点
  265 + var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;
  266 + /** 设置修改停车场集合对象图形质心点属性 @param:<addSttationPoints_:多边形质心点> */
  267 + EditCarParkObj.setCarParkBcenterPoint(centre_points);
  268 + /** 设置修改停车场集合对象图形类型属性 @param:<shapeType:图形类型> */
  269 + EditCarParkObj.setCarParkShapesType('d');
  270 + /** 设置修改停车场集合对象圆形半径属性 @param:<radius:圆形半径> */
  271 + EditCarParkObj.setCarParkRadius('');
  272 + /** 设置修改停车场集合对象名称 @param:<bParkPoint:多边形图形坐标集合> */
  273 + EditCarParkObj.setCarParkBparkPoint(edit_bPloygonGrid);
  274 + $.get('edit.html', function(m){
  275 + $(pjaxContainer).append(m);
  276 + $('#editPoitsions_carpark_mobal').trigger('editCarParkMobal_show', [CarParkPWorldsBMap,PublicFunctions,EditCarParkObj,GetAjaxData]);
  277 + });
  278 + });
  279 + }
  280 + },
  281 + clearMarkAndOverlays : function() {
  282 + // 清楚地图覆盖物
  283 + mapValue.clearOverlays();
  284 + }
  285 + }
  286 + return Bmap;
287 }(); 287 }();
288 \ No newline at end of file 288 \ No newline at end of file
src/main/resources/static/pages/base/section/js/add-vmap-world.js
1 -var SectionVmapWorlds = function() {  
2 - var mapB = '', drawingManager = '';  
3 - var Bmap = {  
4 - init : function() {  
5 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};// 设置中心点.  
6 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';// 百度API Key  
7 - mapB = new BMap.Map("sectionBmap_basic");// 初始化百度地图  
8 - mapB.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);//中心点和缩放级别  
9 - mapB.enableDragging(); //启用地图拖拽事件,默认启用(可不写)  
10 - mapB.enableScrollWheelZoom(); //启用地图滚轮放大缩小  
11 - mapB.disableDoubleClickZoom();//禁用鼠标双击放大  
12 - mapB.enableKeyboard();//启用键盘上下左右键移动地图  
13 - var styleOptions = {  
14 - strokeColor : "blue",//边线颜色。  
15 - fillColor : "blue",//填充颜色。当参数为空时,圆形将没有填充效果。  
16 - strokeWeight : 3,//边线的宽度,以像素为单位。  
17 - strokeOpacity : 0.8,//边线的宽度,以像素为单位。  
18 - fillOpacity : 0.6,//填充的透明度,取值范围0 - 1。  
19 - strokeStyle : 'solid' //边线的样式,solid或dashed。  
20 - };  
21 - // 创建鼠标绘制管理类  
22 - drawingManager = new BMapLib.DrawingManager(mapB, {  
23 - isOpen : false,//是否开启绘制模式  
24 - enableDrawingTool : false,//是否显示工具栏  
25 - drawingToolOptions : {  
26 - anchor : BMAP_ANCHOR_TOP_RIGHT,//位置  
27 - offset : new BMap.Size(5, 5),//偏离值  
28 - scale : 0.8//工具栏缩放比例  
29 -  
30 - },  
31 - polylineOptions : styleOptions//线的样式  
32 - });  
33 - // 添加绘画完成事件  
34 - drawingManager.addEventListener('polylinecomplete', function(polyline) {  
35 - drawingManager.close();  
36 - $('#bsectionVectorInput').val(Bmap.points2Wkt(polyline.getPath()));  
37 - });  
38 - return mapB;  
39 - },  
40 - points2Wkt: function (points) {  
41 - var wkt = new Array();  
42 - for (var i = 0;i < points.length;i++) {  
43 - wkt.push(points[i].lng + ' ' + points[i].lat);  
44 - }  
45 -  
46 - return 'LINESTRING(' + wkt.join(',') + ')';  
47 - },  
48 - // 根据地理名称获取百度经纬度坐标进行定位.  
49 - localSearchFromAdreesToPoint: function(Address) {  
50 - // 创建一个搜索类实例  
51 - var localSearch = new BMap.LocalSearch(mapB);  
52 - // 检索完成后的回调函数。  
53 - localSearch.setSearchCompleteCallback(function (searchResult) {  
54 - var resultPoints = '';  
55 - if(searchResult) {  
56 - // 返回索引指定的结果。索引0表示第1条结果  
57 - var poi = searchResult.getPoi(0), point;  
58 - if (poi) {  
59 - point = poi.point;  
60 - marker = new BMap.Marker(point);  
61 - var opt = {noAnimation :true};  
62 - mapB.panTo(point, opt);  
63 - mapB.setZoom(16);  
64 - mapB.panBy(-300,-50);  
65 - // 将标注添加到地图中  
66 - mapB.addOverlay(marker);  
67 - //跳动的动画  
68 - marker.setAnimation(BMAP_ANIMATION_BOUNCE);  
69 - }else {  
70 - // 弹出添加成功提示消息  
71 - layer.msg('无法获取【'+Address+'】地理位置!');  
72 - }  
73 - }else {  
74 - // 弹出添加成功提示消息  
75 - layer.msg('无法获取【'+Address+'】地理位置!');  
76 - }  
77 - });  
78 - // 根据检索词发起检索。  
79 - localSearch.search(Address);  
80 - },  
81 - // 根据名称获取坐标.  
82 - sectionsNameToPoints : function(sectionNames, callback) {  
83 - var args = new Array();  
84 - for (var i = 0;i < sectionNames.length;i++) {  
85 - args.push('searchComplete' + i);  
86 - }  
87 - args.push(function() {  
88 - callback(arguments);  
89 - })  
90 - var proxy = EventProxy.create(args);  
91 - sectionNames.forEach(function(item, idx) {  
92 - var localSearch = new BMap.LocalSearch(mapB);  
93 - localSearch.setSearchCompleteCallback(function (searchResult) {  
94 - var poi = searchResult.getPoi(0), point;  
95 - if (poi) {  
96 - point = poi.point;  
97 - } else {  
98 - layer.msg('未获取到[' + item + ']对应的坐标点!');  
99 - }  
100 - proxy.emit('searchComplete' + idx, point);  
101 - });  
102 - localSearch.search(item);  
103 - })  
104 - },  
105 - // 获取路段几何图形坐标集合.  
106 - getSectionListPlonly : function(points, callback) {  
107 - var transit = new BMap.DrivingRoute(mapB, {  
108 - renderOptions: {  
109 - map: mapB,  
110 - enableDragging: false  
111 - },  
112 - onPolylinesSet: function(routes) {  
113 - if (transit.getStatus() == BMAP_STATUS_SUCCESS) {  
114 - var sections = [];  
115 - for (var i = 0; i < routes.length; i++) {  
116 - mapB.removeOverlay(routes[i].getPolyline());  
117 - sections = sections.concat(routes[i].getPolyline().getPath());  
118 - }  
119 - var polyline = new BMap.Polyline(sections, {  
120 - strokeColor: "red",  
121 - strokeWeight: 6,  
122 - strokeOpacity: 0.7,  
123 - enableEditing: true  
124 - });  
125 - mapB.addOverlay(polyline);  
126 - polyline.addEventListener('rightclick', function(event) {  
127 - callback && callback(Bmap.points2Wkt(event.target().getPath()));  
128 - })  
129 - callback && callback(Bmap.points2Wkt(sections));  
130 - }  
131 - },  
132 - onMarkersSet: function (pois) {  
133 - if (transit.getStatus() == BMAP_STATUS_SUCCESS) {  
134 - for (var i = 0; i < pois.length; i++){  
135 - mapB.removeOverlay(pois[i].marker);  
136 - }  
137 - }  
138 - }  
139 - });  
140 - transit.search(points[0], points[1]);  
141 - },  
142 - // 清楚地图覆盖物  
143 - clearMarkAndOverlays : function() {  
144 - mapB.clearOverlays();  
145 - },  
146 - // 关闭绘画工具.  
147 - drawingManagerClose : function() {  
148 - drawingManager.close();  
149 - },  
150 - // 打开绘画工具.  
151 - drawingManagerOpen : function() {  
152 - drawingManager.open();// 打开鼠标绘画工具.  
153 - drawingManager.setDrawingMode(BMAP_DRAWING_POLYLINE);// 设置属性.  
154 - }  
155 - }  
156 -  
157 - return Bmap;  
158 - 1 +var SectionVmapWorlds = function() {
  2 + var mapB = '', drawingManager = '';
  3 + var Bmap = {
  4 + init : function() {
  5 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};// 设置中心点.
  6 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';// 百度API Key
  7 + mapB = new BMap.Map("sectionBmap_basic");// 初始化百度地图
  8 + mapB.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);//中心点和缩放级别
  9 + mapB.enableDragging(); //启用地图拖拽事件,默认启用(可不写)
  10 + mapB.enableScrollWheelZoom(); //启用地图滚轮放大缩小
  11 + mapB.disableDoubleClickZoom();//禁用鼠标双击放大
  12 + mapB.enableKeyboard();//启用键盘上下左右键移动地图
  13 + var styleOptions = {
  14 + strokeColor : "blue",//边线颜色。
  15 + fillColor : "blue",//填充颜色。当参数为空时,圆形将没有填充效果。
  16 + strokeWeight : 3,//边线的宽度,以像素为单位。
  17 + strokeOpacity : 0.8,//边线的宽度,以像素为单位。
  18 + fillOpacity : 0.6,//填充的透明度,取值范围0 - 1。
  19 + strokeStyle : 'solid' //边线的样式,solid或dashed。
  20 + };
  21 + // 创建鼠标绘制管理类
  22 + drawingManager = new BMapLib.DrawingManager(mapB, {
  23 + isOpen : false,//是否开启绘制模式
  24 + enableDrawingTool : false,//是否显示工具栏
  25 + drawingToolOptions : {
  26 + anchor : BMAP_ANCHOR_TOP_RIGHT,//位置
  27 + offset : new BMap.Size(5, 5),//偏离值
  28 + scale : 0.8//工具栏缩放比例
  29 +
  30 + },
  31 + polylineOptions : styleOptions//线的样式
  32 + });
  33 + // 添加绘画完成事件
  34 + drawingManager.addEventListener('polylinecomplete', function(polyline) {
  35 + drawingManager.close();
  36 + $('#bsectionVectorInput').val(Bmap.points2Wkt(polyline.getPath()));
  37 + });
  38 + return mapB;
  39 + },
  40 + points2Wkt: function (points) {
  41 + var wkt = new Array();
  42 + for (var i = 0;i < points.length;i++) {
  43 + wkt.push(points[i].lng + ' ' + points[i].lat);
  44 + }
  45 +
  46 + return 'LINESTRING(' + wkt.join(',') + ')';
  47 + },
  48 + // 根据地理名称获取百度经纬度坐标进行定位.
  49 + localSearchFromAdreesToPoint: function(Address) {
  50 + // 创建一个搜索类实例
  51 + var localSearch = new BMap.LocalSearch(mapB);
  52 + // 检索完成后的回调函数。
  53 + localSearch.setSearchCompleteCallback(function (searchResult) {
  54 + var resultPoints = '';
  55 + if(searchResult) {
  56 + // 返回索引指定的结果。索引0表示第1条结果
  57 + var poi = searchResult.getPoi(0), point;
  58 + if (poi) {
  59 + point = poi.point;
  60 + marker = new BMap.Marker(point);
  61 + var opt = {noAnimation :true};
  62 + mapB.panTo(point, opt);
  63 + mapB.setZoom(16);
  64 + mapB.panBy(-300,-50);
  65 + // 将标注添加到地图中
  66 + mapB.addOverlay(marker);
  67 + //跳动的动画
  68 + marker.setAnimation(BMAP_ANIMATION_BOUNCE);
  69 + }else {
  70 + // 弹出添加成功提示消息
  71 + layer.msg('无法获取【'+Address+'】地理位置!');
  72 + }
  73 + }else {
  74 + // 弹出添加成功提示消息
  75 + layer.msg('无法获取【'+Address+'】地理位置!');
  76 + }
  77 + });
  78 + // 根据检索词发起检索。
  79 + localSearch.search(Address);
  80 + },
  81 + // 根据名称获取坐标.
  82 + sectionsNameToPoints : function(sectionNames, callback) {
  83 + var args = new Array();
  84 + for (var i = 0;i < sectionNames.length;i++) {
  85 + args.push('searchComplete' + i);
  86 + }
  87 + args.push(function() {
  88 + callback(arguments);
  89 + })
  90 + var proxy = EventProxy.create(args);
  91 + sectionNames.forEach(function(item, idx) {
  92 + var localSearch = new BMap.LocalSearch(mapB);
  93 + localSearch.setSearchCompleteCallback(function (searchResult) {
  94 + var poi = searchResult.getPoi(0), point;
  95 + if (poi) {
  96 + point = poi.point;
  97 + } else {
  98 + layer.msg('未获取到[' + item + ']对应的坐标点!');
  99 + }
  100 + proxy.emit('searchComplete' + idx, point);
  101 + });
  102 + localSearch.search(item);
  103 + })
  104 + },
  105 + // 获取路段几何图形坐标集合.
  106 + getSectionListPlonly : function(points, callback) {
  107 + var transit = new BMap.DrivingRoute(mapB, {
  108 + renderOptions: {
  109 + map: mapB,
  110 + enableDragging: false
  111 + },
  112 + onPolylinesSet: function(routes) {
  113 + if (transit.getStatus() == BMAP_STATUS_SUCCESS) {
  114 + var sections = [];
  115 + for (var i = 0; i < routes.length; i++) {
  116 + mapB.removeOverlay(routes[i].getPolyline());
  117 + sections = sections.concat(routes[i].getPolyline().getPath());
  118 + }
  119 + var polyline = new BMap.Polyline(sections, {
  120 + strokeColor: "red",
  121 + strokeWeight: 6,
  122 + strokeOpacity: 0.7,
  123 + enableEditing: true
  124 + });
  125 + mapB.addOverlay(polyline);
  126 + polyline.addEventListener('rightclick', function(event) {
  127 + callback && callback(Bmap.points2Wkt(event.target().getPath()));
  128 + })
  129 + callback && callback(Bmap.points2Wkt(sections));
  130 + }
  131 + },
  132 + onMarkersSet: function (pois) {
  133 + if (transit.getStatus() == BMAP_STATUS_SUCCESS) {
  134 + for (var i = 0; i < pois.length; i++){
  135 + mapB.removeOverlay(pois[i].marker);
  136 + }
  137 + }
  138 + }
  139 + });
  140 + transit.search(points[0], points[1]);
  141 + },
  142 + // 清楚地图覆盖物
  143 + clearMarkAndOverlays : function() {
  144 + mapB.clearOverlays();
  145 + },
  146 + // 关闭绘画工具.
  147 + drawingManagerClose : function() {
  148 + drawingManager.close();
  149 + },
  150 + // 打开绘画工具.
  151 + drawingManagerOpen : function() {
  152 + drawingManager.open();// 打开鼠标绘画工具.
  153 + drawingManager.setDrawingMode(BMAP_DRAWING_POLYLINE);// 设置属性.
  154 + }
  155 + }
  156 +
  157 + return Bmap;
  158 +
159 }(); 159 }();
160 \ No newline at end of file 160 \ No newline at end of file
src/main/resources/static/pages/base/stationroute/list.html
1 -<link href="/pages/base/stationroute/css/bmap_base.css" rel="stylesheet" type="text/css" />  
2 -<link rel="stylesheet" href="/assets/plugins/layer-v2.4/layer/skin/layer.css">  
3 -<style>  
4 - .region-station-head td {  
5 - height: 42px;  
6 - line-height: 42px;  
7 - font-size: 16px;  
8 - white-space: nowrap;  
9 - overflow: hidden;  
10 - text-overflow: ellipsis;  
11 - font-family: 微软雅黑;  
12 - color: #2765A7;  
13 - text-align: center;  
14 - }  
15 -  
16 - .region-station-body td {  
17 - display: inline-block;  
18 - font-size: 14px;  
19 - white-space: nowrap;  
20 - overflow: hidden;  
21 - text-overflow: ellipsis;  
22 - border-bottom: 1px solid #dddddd;  
23 - text-indent: 5px;  
24 - text-align: center;  
25 - height: 30px;  
26 - line-height: 30px;  
27 - }  
28 -  
29 - .region-station-body::-webkit-scrollbar { /*滚动条整体样式*/  
30 - width: 1px;  
31 - }  
32 - .region-station-body::-webkit-scrollbar-button{  
33 - display: none;  
34 - }  
35 - .region-station-body::-webkit-scrollbar-thumb{  
36 - border-radius: 20px;  
37 - background: rgba(0,0,0,0.3);  
38 - }  
39 - .region-station-body::-webkit-scrollbar-track{  
40 - background: #edca95;  
41 - }  
42 -</style>  
43 -  
44 -<div class="mian-portlet-body">  
45 - <!-- 地图 -->  
46 - <div id="routes_list_map_container" class="bmaps"></div>  
47 - <!-- 搜索框 -->  
48 -  
49 - <div class="search_panel">  
50 - <div class="search_input_panel">  
51 - <input class="search_input" type="text" placeholder="输入位置搜索" id="searchInput">  
52 - <span class="fa fa-close fa-lg clear hide" aria-hidden="true"></span >  
53 - </div>  
54 - <div class="search_button_panel">  
55 - <button class="fa fa-search fa-lg search_button" >  
56 - </button >  
57 - </div>  
58 - </div>  
59 - <div class="esc_edit_div" id="esc_edit_div" style="display: none">  
60 - <button class="esc_edit_btn" >退出编辑模式</button >  
61 - </div>  
62 - <!-- 搜索下拉框-->  
63 - <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;z-index: 199;"></div>  
64 - <!-- 路径规划路段 -->  
65 - <input class="hand" id="routePlanning" />  
66 - <div class="portlet box protlet-box">  
67 - <div class="protlet-box-layer"></div>  
68 - <!-- 左边标题栏 -->  
69 - <div class="portlet-title">  
70 - <div class="caption">  
71 - <!-- 途径站点 -->  
72 - </div>  
73 -  
74 - <div class="versions" style="float:right;">  
75 - <select id="versions" style="height:30px;width:200px;margin-top:5px;"> </select>  
76 - </div>  
77 -  
78 - <!--<div class="tools">  
79 - <a href="javascript:;" class="collapse" data-original-title="" title=""> </a>  
80 - </div>-->  
81 - </div>  
82 - <!-- 左边栏 -->  
83 - <div class="portlet-body" id="scrllmouseEvent" style="border: 1px solid rgb(255, 255, 255); display: block;min-height: 520px;">  
84 - <div class="row">  
85 - <!-- 上下行栏 -->  
86 - <div class="col-md-3 col-sm-3 col-xs-3">  
87 - <ul class="nav nav-tabs tabs-left" id="leftUpOrDown">  
88 - <li class="active">  
89 - <a href="#stationUp" data-toggle="tab" id="upLine" aria-expanded="true"> 上行 </a>  
90 - </li>  
91 - <li class="">  
92 - <a href="#stationDown" data-toggle="tab" id="downLine" aria-expanded="false"> 下行 </a>  
93 - </li>  
94 - <li class="">  
95 - <a href="#inoutCarpark" data-toggle="tab" id="inoutLine" aria-expanded="false"> 进出场路径 </a>  
96 - </li>  
97 - <li class="" style="display: none;">  
98 - <a href="#regionDesignTab" data-toggle="tab" id="regionDesign" aria-expanded="false"> 线路区间规划 </a>  
99 - </li>  
100 - </ul>  
101 - </div>  
102 - <div class="col-md-9 col-sm-9 col-xs-9">  
103 - <div class="tab-content">  
104 - <!-- 左边栏上行 -->  
105 - <div class="tab-pane active in" id="stationUp" data-direction="0">  
106 - <div class="portlet-body" id="uptreeMobal" style="display: none">  
107 - <div class="table-toolbar">  
108 - <div class="row">  
109 -  
110 - <div class="col-md-6" style="float: right;">  
111 - <div class="btn-group" style="float: right;">  
112 - <div class="actions module_tools">  
113 - <div class="btn-group">  
114 - <!-- <a class="btn green-haze btn-outline btn-circle btn-sm" style="background-color:#3B3F51;border-color:#FFFFFF;color:#FFFFFF" href="javascript:;" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="true"> 工具  
115 - <i class="fa fa-angle-down"></i>  
116 - </a> -->  
117 - <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">  
118 - <i class="fa fa-share"></i>  
119 - <span>上行操作</span>  
120 - <i class="fa fa-angle-down"></i>  
121 - </a>  
122 - <ul class="dropdown-menu pull-right" style="min-width:100px">  
123 - <li>  
124 - <a href="javascript:;" id="addUpStation"><i class="fa fa-plus"></i> 添加站点</a>  
125 - </li>  
126 - <li class="divider"> </li>  
127 - <!--<li>  
128 - <a href="javascript:;" id="editUpStation"><i class="fa fa-pencil"></i> 修改站点</a>  
129 - </li>  
130 - <li class="divider"> </li>  
131 - <li>  
132 - <a href="javascript:;" id="deleteUpStation"><i class="fa fa-close"></i> 撤销站点</a>  
133 - </li>  
134 - <li class="divider"> </li>  
135 - <li>  
136 - <a href="javascript:;" id="addUpSection"><i class="fa fa-plus"></i> 添加路段</a>  
137 - </li>  
138 - <li class="divider"> </li>-->  
139 - <li>  
140 - <a href="javascript:;" id="batchUpDelete"><i class="fa fa-trash-o"></i> 批量撤销</a>  
141 - </li>  
142 - <li class="divider"> </li>  
143 - <li>  
144 - <a href="javascript:;" id="upBatchRecover"><i class="fa fa-recycle"></i> 批量恢复</a>  
145 - </li>  
146 - <li class="divider"> </li>  
147 - <li>  
148 - <a href="javascript:;" class="retweet"><i class="fa fa-retweet"></i> 切换上下行</a>  
149 - </li>  
150 - <li class="divider"> </li>  
151 - <li>  
152 - <a href="javascript:;" id="wrenchUpDis"><i class="fa fa-wrench"></i> 设置上行站距</a>  
153 - </li>  
154 - <li class="divider"> </li>  
155 - <li>  
156 - <a href="javascript:;" id="circularRouteHandle"><i class="fa fa-refresh"></i> 环线首末统一</a>  
157 - </li>  
158 - <li class="divider"> </li>  
159 - <li>  
160 - <a href="javascript:;" id="quoteDown"><i class="fa fa-long-arrow-down"></i> 引用下行路段</a>  
161 - </li>  
162 - <!-- <li class="divider"> </li>  
163 - <!-- <li>  
164 - <a href="javascript:;" id="editUplineTrend"><i class="fa fa-edit"></i> 编辑走向</a>  
165 - </li> -->  
166 - <!-- <li>  
167 - <a href="javascript:;" id="createUsingSingle"><i class="fa fa-edit"></i> 生成行单</a>  
168 - </li> -->  
169 - </ul>  
170 - </div>  
171 - </div>  
172 - </div>  
173 - </div>  
174 - </div>  
175 - </div>  
176 - <!-- 树 -->  
177 - <div class="portlet-body" >  
178 - <div id="station_Up_tree" class="defeat-scroll" style="height: auto;max-height: 500px;"></div>  
179 - </div>  
180 - </div>  
181 - <!-- 无上行站点添加方式 -->  
182 - <div id="upToolsMobal" class="portlet-body" style="display:none">  
183 - <div class="row">  
184 - <div class="col-md-6" style="float: right;">  
185 - <div class="btn-group" style="float: right;">  
186 - <div class="actions">  
187 - <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">  
188 - <i class="fa fa-share"></i>  
189 - <span>上行规划选择</span>  
190 - <i class="fa fa-angle-down"></i>  
191 - </a>  
192 - <ul class="dropdown-menu pull-right" style="min-width:100px">  
193 - <li>  
194 - <a class="upManual" href="javascript:;" data-direction="0" data-pjax><i class="fa fa-pencil"></i> 手动添加站点</a>  
195 - </li>  
196 - <li class="divider"> </li>  
197 - <li>  
198 - <a class="upSystem" href="javascript:;" data-direction="0" data-pjax><i class="fa fa-wrench"></i> 系统规划</a>  
199 - </li>  
200 - <li class="divider"> </li>  
201 - <li>  
202 - <a class="gpsRoute" href="javascript:;" data-direction="0" data-pjax><i class="fa fa-wrench"></i> 测点生成</a>  
203 - </li>  
204 - </ul>  
205 - </div>  
206 - </div>  
207 - </div>  
208 - </div>  
209 - <div class="row" style="margin-top: 10px;">  
210 - <div class="col-md-12">  
211 - <!-- 提示 -->  
212 - <div class="alert alert-warning" style="background-color: #3b3f51;border-color: #FFFFFF;color: #ffffff;border-radius: 6px !important;">  
213 - <strong>系统未初始化该线路上行站点!</strong> 请从上方【上行规划选择】里选择任意一种方式规划该线路上行站点.  
214 - </div>  
215 - </div>  
216 - </div>  
217 - </div>  
218 -  
219 - </div>  
220 -  
221 - <!-- 下行 -->  
222 - <div class="tab-pane fade" id="stationDown" data-direction="1">  
223 - <div class="portlet-body" id="DowntreeMobal" style="display: none">  
224 - <div class="table-toolbar">  
225 - <div class="row">  
226 - <div class="col-md-6" style="float: right;">  
227 - <div class="btn-group" style="float: right;">  
228 - <div class="actions module_tools">  
229 - <div class="btn-group">  
230 - <!-- <a class="btn green-haze btn-outline btn-circle btn-sm" style="background-color:#3B3F51;border-color:#FFFFFF;color:#FFFFFF" href="javascript:;" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="true"> 工具  
231 - <i class="fa fa-angle-down"></i>  
232 - </a> -->  
233 - <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">  
234 - <i class="fa fa-share"></i>  
235 - <span>下行操作</span>  
236 - <i class="fa fa-angle-down"></i>  
237 - </a>  
238 - <ul class="dropdown-menu pull-right" style="min-width:100px">  
239 - <li>  
240 - <a href="javascript:;" id="addDownStation"><i class="fa fa-plus"></i> 添加站点</a>  
241 - </li>  
242 - <li class="divider"> </li>  
243 - <!--<li>  
244 - <a href="javascript:;" id="editDownStation"><i class="fa fa-pencil"></i> 修改站点</a>  
245 - </li>  
246 - <li class="divider"> </li>  
247 - <li>  
248 - <a href="javascript:;" id="deleteDownStation"><i class="fa fa-close"></i> 撤销站点</a>  
249 - </li>  
250 - <li class="divider"> </li>  
251 - <li>  
252 - <a href="javascript:;" id="addDownSection"><i class="fa fa-plus"></i> 添加路段</a>  
253 - </li>  
254 - <li class="divider"> </li>-->  
255 - <li>  
256 - <a href="javascript:;" id="batchDownDelete"><i class="fa fa-trash-o"></i> 批量撤销</a>  
257 - </li>  
258 - <li class="divider"> </li>  
259 - <li>  
260 - <a href="javascript:;" id="downBatchRecover"><i class="fa fa-recycle"></i> 批量恢复</a>  
261 - </li>  
262 - <li class="divider"> </li>  
263 - <li>  
264 - <a href="javascript:;" class="retweet"><i class="fa fa-retweet"></i> 切换上下行</a>  
265 - </li>  
266 - <li class="divider"> </li>  
267 - <li>  
268 - <a href="javascript:;" id="wrenchDownDis"><i class="fa fa-wrench"></i> 设置下行站距</a>  
269 - </li>  
270 - <li class="divider"> </li>  
271 - <li>  
272 - <a href="javascript:;" id="quoteUp"><i class="fa fa-long-arrow-up"></i> 引用上行路段</a>  
273 - </li>  
274 - <!-- <li>  
275 - <a href="javascript:;" id="editDownlineTrend"><i class="fa fa-close"></i> 编辑走向</a>  
276 - </li> -->  
277 - </ul>  
278 - </div>  
279 - </div>  
280 - </div>  
281 - </div>  
282 - </div>  
283 - </div>  
284 - <!-- 树 -->  
285 - <div class="portlet-body">  
286 - <div id="station_Down_tree" class="defeat-scroll" style="height: auto;max-height: 500px;"></div>  
287 - </div>  
288 - </div>  
289 - <!-- 无上行站点添加方式 -->  
290 - <div id="downToolsMobal" class="portlet-body" style="display:none">  
291 - <div class="row">  
292 - <div class="col-md-6" style="float: right;">  
293 - <div class="btn-group" style="float: right;">  
294 - <div class="actions">  
295 - <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">  
296 - <i class="fa fa-share"></i>  
297 - <span>下行规划选择</span>  
298 - <i class="fa fa-angle-down"></i>  
299 - </a>  
300 - <ul class="dropdown-menu pull-right" style="min-width:100px">  
301 - <li>  
302 - <a class="downManual" href="javascript:;" data-direction="1" data-pjax><i class="fa fa-pencil"></i> 手动添加站点</a>  
303 - </li>  
304 - <li class="divider"> </li>  
305 - <li>  
306 - <a class="downSystem" href="javascript:;" data-direction="1" data-pjax><i class="fa fa-wrench"></i> 系统规划</a>  
307 - </li>  
308 - <li class="divider"> </li>  
309 - <li>  
310 - <a class="gpsRoute" href="javascript:;" data-direction="1" data-pjax><i class="fa fa-wrench"></i> 测点生成</a>  
311 - </li>  
312 - </ul>  
313 - </div>  
314 - </div>  
315 - </div>  
316 - </div>  
317 - <div class="row" style="margin-top: 10px;">  
318 - <div class="col-md-12">  
319 - <!-- 提示 -->  
320 - <div class="alert alert-warning" style="background-color: #3b3f51;border-color: #FFFFFF;color: #ffffff;border-radius: 6px !important;">  
321 - <strong>系统未初始化该线路下行站点!</strong> 请从上方【下行规划选择】里选择任意一种方式规划该线路下行站点.  
322 - </div>  
323 - </div>  
324 - </div>  
325 - </div>  
326 - </div>  
327 -  
328 - <!-- 进出场路径 -->  
329 - <div class="tab-pane fade" id="inoutCarpark" data-direction="3">  
330 - <div class="portlet-body" id="InoutCarparktreeMobal">  
331 - <div class="table-toolbar">  
332 - <div class="row">  
333 - <div class="col-md-6" style="float: right;">  
334 - <div class="btn-group" style="float: right;">  
335 - <div class="actions module_tools">  
336 - <div class="btn-group">  
337 - <!-- <a class="btn green-haze btn-outline btn-circle btn-sm" style="background-color:#3B3F51;border-color:#FFFFFF;color:#FFFFFF" href="javascript:;" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="true"> 工具  
338 - <i class="fa fa-angle-down"></i>  
339 - </a> -->  
340 - <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">  
341 - <i class="fa fa-share"></i>  
342 - <span>进出场路径规划</span>  
343 - <i class="fa fa-angle-down"></i>  
344 - </a>  
345 - <ul class="dropdown-menu pull-right" style="min-width:100px">  
346 - <li>  
347 - <a href="javascript:;" id="historyGps"><i class="fa fa-wrench"></i> 历史GPS路径规划</a>  
348 - </li>  
349 - </ul>  
350 - </div>  
351 - </div>  
352 - </div>  
353 - </div>  
354 - </div>  
355 - </div>  
356 - <!-- 树 -->  
357 - <div class="portlet-body inout-search"></div>  
358 - <div class="portlet-body">  
359 - <div id="inout_carpark_tree" class="defeat-scroll" style="height: auto;max-height: 500px;"></div>  
360 - </div>  
361 - </div>  
362 - </div>  
363 - <div class="tab-pane fade" id="regionDesignTab" data-direction="4">  
364 - <div class="portlet-body" id="regionDesignTool">  
365 - <!-- 树 -->  
366 - <div class="portlet-body">  
367 - <div class="form-horizontal">  
368 - <div class="form-group">  
369 - <div class="col-md-7 col-sm-6 col-xs-7">  
370 - <select id="regionSelect" style="height:30px;width:150px;">  
371 - <option>无线路区间</option>  
372 - </select>  
373 - </div>  
374 - <div class="col-md-2 col-sm-2 col-xs-2">  
375 - <input type="button" value="编辑" id="regionEditBtn"/>  
376 - </div>  
377 - <div class="col-md-2 col-sm-2 col-xs-2">  
378 - <input type="button" value="新增" id="regionAddBtn"/>  
379 - </div>  
380 - </div>  
381 - </div>  
382 - </div>  
383 - <div class="portlet-body">  
384 - <div id="regionDesignContent" style="height: auto;max-height: 500px;">  
385 - <div>  
386 - <table style="width: 100%;">  
387 - <thead>  
388 - <tr class="region-station-head">  
389 - <td style="width: 10%;">#</td>  
390 - <td style="width: 60%;">站点</td>  
391 - <td style="width: 30%;white-space: nowrap">上下行</td>  
392 - </tr>  
393 - </thead>  
394 - </table>  
395 - </div>  
396 -  
397 - <div class="region-station-body" style="overflow-y: auto; height: 450px;">  
398 - <table id="region-station-body-table" style="width: 100%; border: 1px solid #dddddd;">  
399 - </table>  
400 - </div>  
401 - </div>  
402 - </div>  
403 - </div>  
404 - </div>  
405 - </div>  
406 - </div>  
407 - </div>  
408 - </div>  
409 - </div>  
410 -</div>  
411 -  
412 -<script id="add_draw_polyline-temp" type="text/html">  
413 - <div class="add_road_search_point_wrap ">  
414 - <div class="buffer_edit_body" >  
415 - <div class="_title">绘制路段</div>  
416 - <div class="form-horizontal" id="add_station_form">  
417 - <input type="hidden" value="{{id}}" name="id">  
418 - <input type="hidden" id="bsectionVectorInput"> <!--路段-->  
419 -  
420 - <div class="form-group">  
421 - <div class="col-md-12">  
422 - <input type="text" class="input-medium" name="sectionName" id="sectionNameInput" placeholder="路段名">  
423 - </div>  
424 - </div>  
425 -  
426 - <div class="form-group">  
427 - <div class="col-md-5">  
428 - <span class="draw_polyline_switch"><a>暂停绘制</a></span>  
429 - </div>  
430 - <div class="col-md-6 btns">  
431 - <button class="sbmint-btn btn-sm" id="addSectionSbmintBtn">确定</button>  
432 - <button class="cancel-btn btn-sm" id="addSectionCancelBtn">取消</button>  
433 - </div>  
434 - </div>  
435 - </div>  
436 - </div>  
437 - </div>  
438 -</script>  
439 -  
440 -<script id="inout-carpark-search-form" type="text/html">  
441 - <div class="form-horizontal">  
442 - <div class="form-group">  
443 - <div class="col-md-3 col-sm-3 col-xs-3">  
444 - <label class="uk-form-label">起点</label>  
445 - </div>  
446 - <div class="col-md-9 col-sm-9 col-xs-9">  
447 - <select class="form-control" name="startPoint" id="startPoint"></select>  
448 - </div>  
449 - </div>  
450 - <div class="form-group">  
451 - <div class="col-md-3 col-sm-3 col-xs-3">  
452 - <label class="uk-form-label">终点</label>  
453 - </div>  
454 - <div class="col-md-9 col-sm-9 col-xs-9">  
455 - <select class="form-control" name="endPoint" id="endPoint"></select>  
456 - </div>  
457 - </div>  
458 - <div class="form-group">  
459 - <div class="col-md-6"></div>  
460 - <div class="col-md-6 btns">  
461 - <button class="btn-sm" style="float: right;" id="inoutSearch">搜索</button>  
462 - </div>  
463 - </div>  
464 - </div>  
465 -</script>  
466 -<script id="line-region-station-template" type="text/html">  
467 - {{each list as obj i}}  
468 - <tr data-idx="{{i}}">  
469 - <td style="width: 10%;">  
470 - {{i+1}}  
471 - </td>  
472 - <td style="width: 60%;" title="{{obj.stationName}}">  
473 - {{obj.stationName}}  
474 - </td>  
475 - <td style="width: 30%;">  
476 - {{if obj.directions == 0}}  
477 - 上行  
478 - {{else}}  
479 - 下行  
480 - {{/if}}  
481 - </td>  
482 - </tr>  
483 - {{/each}}  
484 - {{if list.length == 0}}  
485 - <tr>  
486 - <td style="width: 100%;" colspan="3">无站点信息</td>  
487 - </tr>  
488 - {{/if}}  
489 -</script>  
490 -<script type="text/javascript">  
491 - $(document).ready(function () {  
492 - RoutesOperation.initPage();  
493 - RoutesOperation.initMap();  
494 - RoutesOperation.initStationDrawingManager();  
495 -  
496 - // 百度地图API功能  
497 - function G(id) {  
498 - return document.getElementById(id);  
499 - }  
500 - var baiduMap = RoutesOperation.getBaiduMap();  
501 - var ac = new BMap.Autocomplete({"input": "searchInput" ,"location": baiduMap});  
502 -  
503 - ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件  
504 - var str = "";  
505 - var _value = e.fromitem.value;  
506 - var value = "";  
507 - if (e.fromitem.index > -1) {  
508 - value = _value.province + _value.city + _value.district + _value.street + _value.business;  
509 - }  
510 - str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;  
511 -  
512 - value = "";  
513 - if (e.toitem.index > -1) {  
514 - _value = e.toitem.value;  
515 - value = _value.province + _value.city + _value.district + _value.street + _value.business;  
516 - }  
517 - str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;  
518 - G("searchResultPanel").innerHTML = str;  
519 - });  
520 -  
521 - var myValue;  
522 - ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件  
523 - var _value = e.item.value;  
524 - myValue = _value.province + _value.city + _value.district + _value.street + _value.business;  
525 - G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;  
526 -  
527 - setPlace();  
528 - });  
529 -  
530 - function setPlace(){  
531 - // myMap.clearOverlays(); //清除地图上所有覆盖物  
532 - var local = new BMap.LocalSearch(myMap, { //智能搜索  
533 - onSearchComplete: myFun  
534 - });  
535 - function myFun(){  
536 - var pp = local.getResults().getPoi(0) == undefined? null:local.getResults().getPoi(0).point;  
537 - if(pp) {  
538 - myMap.centerAndZoom(pp, 20);  
539 - myMap.addOverlay(new BMap.Marker(pp)); //添加标注  
540 - } else {  
541 - layer.msg('找不到您输入的位置!')  
542 - }  
543 - }  
544 - local.search(myValue);  
545 - }  
546 - $("#searchInput").on('input propertychange change', function () {  
547 - if($("#searchInput").val() != null && $("#searchInput").val() != "")  
548 - $('.search_panel .clear').removeClass('hide');  
549 - else {  
550 - // WorldsBMap.clearOtherOverlay();  
551 - $('.search_panel .clear').addClass('hide');  
552 - }  
553 - });  
554 -  
555 - $('.search_panel .clear').on('click',function () {  
556 - // WorldsBMap.clearOtherOverlay();  
557 - $("#searchInput").val('');  
558 - $("#searchInput").change();  
559 - });  
560 - $('.search_panel .search_button').on('click',function () {  
561 - myValue = $("#searchInput").val();  
562 - setPlace();  
563 - });  
564 -  
565 - $('#historyGps').on('click', function() {  
566 - $.get('/pages/base/stationroute/list_template.html', function (content) {  
567 - window.layerIdx = layer.open({  
568 - type: 1,  
569 - move: false,  
570 - area: ['800px', '600px'],  
571 - content: content,  
572 - title: '选择班次(为前一天班次,请选择GPS自动完成的班次)',  
573 - shift: 5,  
574 - scrollbar: false,  
575 - success: function () {  
576 - }  
577 - });  
578 - });  
579 - });  
580 - }); 1 +<link href="/pages/base/stationroute/css/bmap_base.css" rel="stylesheet" type="text/css" />
  2 +<link rel="stylesheet" href="/assets/plugins/layer-v2.4/layer/skin/layer.css">
  3 +<style>
  4 + .region-station-head td {
  5 + height: 42px;
  6 + line-height: 42px;
  7 + font-size: 16px;
  8 + white-space: nowrap;
  9 + overflow: hidden;
  10 + text-overflow: ellipsis;
  11 + font-family: 微软雅黑;
  12 + color: #2765A7;
  13 + text-align: center;
  14 + }
  15 +
  16 + .region-station-body td {
  17 + display: inline-block;
  18 + font-size: 14px;
  19 + white-space: nowrap;
  20 + overflow: hidden;
  21 + text-overflow: ellipsis;
  22 + border-bottom: 1px solid #dddddd;
  23 + text-indent: 5px;
  24 + text-align: center;
  25 + height: 30px;
  26 + line-height: 30px;
  27 + }
  28 +
  29 + .region-station-body::-webkit-scrollbar { /*滚动条整体样式*/
  30 + width: 1px;
  31 + }
  32 + .region-station-body::-webkit-scrollbar-button{
  33 + display: none;
  34 + }
  35 + .region-station-body::-webkit-scrollbar-thumb{
  36 + border-radius: 20px;
  37 + background: rgba(0,0,0,0.3);
  38 + }
  39 + .region-station-body::-webkit-scrollbar-track{
  40 + background: #edca95;
  41 + }
  42 +</style>
  43 +
  44 +<div class="mian-portlet-body">
  45 + <!-- 地图 -->
  46 + <div id="routes_list_map_container" class="bmaps"></div>
  47 + <!-- 搜索框 -->
  48 +
  49 + <div class="search_panel">
  50 + <div class="search_input_panel">
  51 + <input class="search_input" type="text" placeholder="输入位置搜索" id="searchInput">
  52 + <span class="fa fa-close fa-lg clear hide" aria-hidden="true"></span >
  53 + </div>
  54 + <div class="search_button_panel">
  55 + <button class="fa fa-search fa-lg search_button" >
  56 + </button >
  57 + </div>
  58 + </div>
  59 + <div class="esc_edit_div" id="esc_edit_div" style="display: none">
  60 + <button class="esc_edit_btn" >退出编辑模式</button >
  61 + </div>
  62 + <!-- 搜索下拉框-->
  63 + <div id="searchResultPanel" style="border:1px solid #C0C0C0;width:150px;height:auto; display:none;z-index: 199;"></div>
  64 + <!-- 路径规划路段 -->
  65 + <input class="hand" id="routePlanning" />
  66 + <div class="portlet box protlet-box">
  67 + <div class="protlet-box-layer"></div>
  68 + <!-- 左边标题栏 -->
  69 + <div class="portlet-title">
  70 + <div class="caption">
  71 + <!-- 途径站点 -->
  72 + </div>
  73 +
  74 + <div class="versions" style="float:right;">
  75 + <select id="versions" style="height:30px;width:200px;margin-top:5px;"> </select>
  76 + </div>
  77 +
  78 + <!--<div class="tools">
  79 + <a href="javascript:;" class="collapse" data-original-title="" title=""> </a>
  80 + </div>-->
  81 + </div>
  82 + <!-- 左边栏 -->
  83 + <div class="portlet-body" id="scrllmouseEvent" style="border: 1px solid rgb(255, 255, 255); display: block;min-height: 520px;">
  84 + <div class="row">
  85 + <!-- 上下行栏 -->
  86 + <div class="col-md-3 col-sm-3 col-xs-3">
  87 + <ul class="nav nav-tabs tabs-left" id="leftUpOrDown">
  88 + <li class="active">
  89 + <a href="#stationUp" data-toggle="tab" id="upLine" aria-expanded="true"> 上行 </a>
  90 + </li>
  91 + <li class="">
  92 + <a href="#stationDown" data-toggle="tab" id="downLine" aria-expanded="false"> 下行 </a>
  93 + </li>
  94 + <li class="">
  95 + <a href="#inoutCarpark" data-toggle="tab" id="inoutLine" aria-expanded="false"> 进出场路径 </a>
  96 + </li>
  97 + <li class="">
  98 + <a href="#regionDesignTab" data-toggle="tab" id="regionDesign" aria-expanded="false"> 线路区间规划 </a>
  99 + </li>
  100 + </ul>
  101 + </div>
  102 + <div class="col-md-9 col-sm-9 col-xs-9">
  103 + <div class="tab-content">
  104 + <!-- 左边栏上行 -->
  105 + <div class="tab-pane active in" id="stationUp" data-direction="0">
  106 + <div class="portlet-body" id="uptreeMobal" style="display: none">
  107 + <div class="table-toolbar">
  108 + <div class="row">
  109 +
  110 + <div class="col-md-6" style="float: right;">
  111 + <div class="btn-group" style="float: right;">
  112 + <div class="actions module_tools">
  113 + <div class="btn-group">
  114 + <!-- <a class="btn green-haze btn-outline btn-circle btn-sm" style="background-color:#3B3F51;border-color:#FFFFFF;color:#FFFFFF" href="javascript:;" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="true"> 工具
  115 + <i class="fa fa-angle-down"></i>
  116 + </a> -->
  117 + <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">
  118 + <i class="fa fa-share"></i>
  119 + <span>上行操作</span>
  120 + <i class="fa fa-angle-down"></i>
  121 + </a>
  122 + <ul class="dropdown-menu pull-right" style="min-width:100px">
  123 + <li>
  124 + <a href="javascript:;" id="addUpStation"><i class="fa fa-plus"></i> 添加站点</a>
  125 + </li>
  126 + <li class="divider"> </li>
  127 + <!--<li>
  128 + <a href="javascript:;" id="editUpStation"><i class="fa fa-pencil"></i> 修改站点</a>
  129 + </li>
  130 + <li class="divider"> </li>
  131 + <li>
  132 + <a href="javascript:;" id="deleteUpStation"><i class="fa fa-close"></i> 撤销站点</a>
  133 + </li>
  134 + <li class="divider"> </li>
  135 + <li>
  136 + <a href="javascript:;" id="addUpSection"><i class="fa fa-plus"></i> 添加路段</a>
  137 + </li>
  138 + <li class="divider"> </li>-->
  139 + <li>
  140 + <a href="javascript:;" id="batchUpDelete"><i class="fa fa-trash-o"></i> 批量撤销</a>
  141 + </li>
  142 + <li class="divider"> </li>
  143 + <li>
  144 + <a href="javascript:;" id="upBatchRecover"><i class="fa fa-recycle"></i> 批量恢复</a>
  145 + </li>
  146 + <li class="divider"> </li>
  147 + <li>
  148 + <a href="javascript:;" class="retweet"><i class="fa fa-retweet"></i> 切换上下行</a>
  149 + </li>
  150 + <li class="divider"> </li>
  151 + <li>
  152 + <a href="javascript:;" id="wrenchUpDis"><i class="fa fa-wrench"></i> 设置上行站距</a>
  153 + </li>
  154 + <li class="divider"> </li>
  155 + <li>
  156 + <a href="javascript:;" id="circularRouteHandle"><i class="fa fa-refresh"></i> 环线首末统一</a>
  157 + </li>
  158 + <li class="divider"> </li>
  159 + <li>
  160 + <a href="javascript:;" id="quoteDown"><i class="fa fa-long-arrow-down"></i> 引用下行路段</a>
  161 + </li>
  162 + <!-- <li class="divider"> </li>
  163 + <!-- <li>
  164 + <a href="javascript:;" id="editUplineTrend"><i class="fa fa-edit"></i> 编辑走向</a>
  165 + </li> -->
  166 + <!-- <li>
  167 + <a href="javascript:;" id="createUsingSingle"><i class="fa fa-edit"></i> 生成行单</a>
  168 + </li> -->
  169 + </ul>
  170 + </div>
  171 + </div>
  172 + </div>
  173 + </div>
  174 + </div>
  175 + </div>
  176 + <!-- 树 -->
  177 + <div class="portlet-body" >
  178 + <div id="station_Up_tree" class="defeat-scroll" style="height: auto;max-height: 500px;"></div>
  179 + </div>
  180 + </div>
  181 + <!-- 无上行站点添加方式 -->
  182 + <div id="upToolsMobal" class="portlet-body" style="display:none">
  183 + <div class="row">
  184 + <div class="col-md-6" style="float: right;">
  185 + <div class="btn-group" style="float: right;">
  186 + <div class="actions">
  187 + <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">
  188 + <i class="fa fa-share"></i>
  189 + <span>上行规划选择</span>
  190 + <i class="fa fa-angle-down"></i>
  191 + </a>
  192 + <ul class="dropdown-menu pull-right" style="min-width:100px">
  193 + <li>
  194 + <a class="upManual" href="javascript:;" data-direction="0" data-pjax><i class="fa fa-pencil"></i> 手动添加站点</a>
  195 + </li>
  196 + <li class="divider"> </li>
  197 + <li>
  198 + <a class="upSystem" href="javascript:;" data-direction="0" data-pjax><i class="fa fa-wrench"></i> 系统规划</a>
  199 + </li>
  200 + <li class="divider"> </li>
  201 + <li>
  202 + <a class="gpsRoute" href="javascript:;" data-direction="0" data-pjax><i class="fa fa-wrench"></i> 测点生成</a>
  203 + </li>
  204 + </ul>
  205 + </div>
  206 + </div>
  207 + </div>
  208 + </div>
  209 + <div class="row" style="margin-top: 10px;">
  210 + <div class="col-md-12">
  211 + <!-- 提示 -->
  212 + <div class="alert alert-warning" style="background-color: #3b3f51;border-color: #FFFFFF;color: #ffffff;border-radius: 6px !important;">
  213 + <strong>系统未初始化该线路上行站点!</strong> 请从上方【上行规划选择】里选择任意一种方式规划该线路上行站点.
  214 + </div>
  215 + </div>
  216 + </div>
  217 + </div>
  218 +
  219 + </div>
  220 +
  221 + <!-- 下行 -->
  222 + <div class="tab-pane fade" id="stationDown" data-direction="1">
  223 + <div class="portlet-body" id="DowntreeMobal" style="display: none">
  224 + <div class="table-toolbar">
  225 + <div class="row">
  226 + <div class="col-md-6" style="float: right;">
  227 + <div class="btn-group" style="float: right;">
  228 + <div class="actions module_tools">
  229 + <div class="btn-group">
  230 + <!-- <a class="btn green-haze btn-outline btn-circle btn-sm" style="background-color:#3B3F51;border-color:#FFFFFF;color:#FFFFFF" href="javascript:;" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="true"> 工具
  231 + <i class="fa fa-angle-down"></i>
  232 + </a> -->
  233 + <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">
  234 + <i class="fa fa-share"></i>
  235 + <span>下行操作</span>
  236 + <i class="fa fa-angle-down"></i>
  237 + </a>
  238 + <ul class="dropdown-menu pull-right" style="min-width:100px">
  239 + <li>
  240 + <a href="javascript:;" id="addDownStation"><i class="fa fa-plus"></i> 添加站点</a>
  241 + </li>
  242 + <li class="divider"> </li>
  243 + <!--<li>
  244 + <a href="javascript:;" id="editDownStation"><i class="fa fa-pencil"></i> 修改站点</a>
  245 + </li>
  246 + <li class="divider"> </li>
  247 + <li>
  248 + <a href="javascript:;" id="deleteDownStation"><i class="fa fa-close"></i> 撤销站点</a>
  249 + </li>
  250 + <li class="divider"> </li>
  251 + <li>
  252 + <a href="javascript:;" id="addDownSection"><i class="fa fa-plus"></i> 添加路段</a>
  253 + </li>
  254 + <li class="divider"> </li>-->
  255 + <li>
  256 + <a href="javascript:;" id="batchDownDelete"><i class="fa fa-trash-o"></i> 批量撤销</a>
  257 + </li>
  258 + <li class="divider"> </li>
  259 + <li>
  260 + <a href="javascript:;" id="downBatchRecover"><i class="fa fa-recycle"></i> 批量恢复</a>
  261 + </li>
  262 + <li class="divider"> </li>
  263 + <li>
  264 + <a href="javascript:;" class="retweet"><i class="fa fa-retweet"></i> 切换上下行</a>
  265 + </li>
  266 + <li class="divider"> </li>
  267 + <li>
  268 + <a href="javascript:;" id="wrenchDownDis"><i class="fa fa-wrench"></i> 设置下行站距</a>
  269 + </li>
  270 + <li class="divider"> </li>
  271 + <li>
  272 + <a href="javascript:;" id="quoteUp"><i class="fa fa-long-arrow-up"></i> 引用上行路段</a>
  273 + </li>
  274 + <!-- <li>
  275 + <a href="javascript:;" id="editDownlineTrend"><i class="fa fa-close"></i> 编辑走向</a>
  276 + </li> -->
  277 + </ul>
  278 + </div>
  279 + </div>
  280 + </div>
  281 + </div>
  282 + </div>
  283 + </div>
  284 + <!-- 树 -->
  285 + <div class="portlet-body">
  286 + <div id="station_Down_tree" class="defeat-scroll" style="height: auto;max-height: 500px;"></div>
  287 + </div>
  288 + </div>
  289 + <!-- 无上行站点添加方式 -->
  290 + <div id="downToolsMobal" class="portlet-body" style="display:none">
  291 + <div class="row">
  292 + <div class="col-md-6" style="float: right;">
  293 + <div class="btn-group" style="float: right;">
  294 + <div class="actions">
  295 + <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">
  296 + <i class="fa fa-share"></i>
  297 + <span>下行规划选择</span>
  298 + <i class="fa fa-angle-down"></i>
  299 + </a>
  300 + <ul class="dropdown-menu pull-right" style="min-width:100px">
  301 + <li>
  302 + <a class="downManual" href="javascript:;" data-direction="1" data-pjax><i class="fa fa-pencil"></i> 手动添加站点</a>
  303 + </li>
  304 + <li class="divider"> </li>
  305 + <li>
  306 + <a class="downSystem" href="javascript:;" data-direction="1" data-pjax><i class="fa fa-wrench"></i> 系统规划</a>
  307 + </li>
  308 + <li class="divider"> </li>
  309 + <li>
  310 + <a class="gpsRoute" href="javascript:;" data-direction="1" data-pjax><i class="fa fa-wrench"></i> 测点生成</a>
  311 + </li>
  312 + </ul>
  313 + </div>
  314 + </div>
  315 + </div>
  316 + </div>
  317 + <div class="row" style="margin-top: 10px;">
  318 + <div class="col-md-12">
  319 + <!-- 提示 -->
  320 + <div class="alert alert-warning" style="background-color: #3b3f51;border-color: #FFFFFF;color: #ffffff;border-radius: 6px !important;">
  321 + <strong>系统未初始化该线路下行站点!</strong> 请从上方【下行规划选择】里选择任意一种方式规划该线路下行站点.
  322 + </div>
  323 + </div>
  324 + </div>
  325 + </div>
  326 + </div>
  327 +
  328 + <!-- 进出场路径 -->
  329 + <div class="tab-pane fade" id="inoutCarpark" data-direction="3">
  330 + <div class="portlet-body" id="InoutCarparktreeMobal">
  331 + <div class="table-toolbar">
  332 + <div class="row">
  333 + <div class="col-md-6" style="float: right;">
  334 + <div class="btn-group" style="float: right;">
  335 + <div class="actions module_tools">
  336 + <div class="btn-group">
  337 + <!-- <a class="btn green-haze btn-outline btn-circle btn-sm" style="background-color:#3B3F51;border-color:#FFFFFF;color:#FFFFFF" href="javascript:;" data-toggle="dropdown" data-hover="dropdown" data-close-others="true" aria-expanded="true"> 工具
  338 + <i class="fa fa-angle-down"></i>
  339 + </a> -->
  340 + <a href="javascript:" class="btn white btn-outline btn-circle" style="border-color: #3B3F51;color: #3B3F51;" data-toggle="dropdown" aria-expanded="false">
  341 + <i class="fa fa-share"></i>
  342 + <span>进出场路径规划</span>
  343 + <i class="fa fa-angle-down"></i>
  344 + </a>
  345 + <ul class="dropdown-menu pull-right" style="min-width:100px">
  346 + <li>
  347 + <a href="javascript:;" id="historyGps"><i class="fa fa-wrench"></i> 历史GPS路径规划</a>
  348 + </li>
  349 + </ul>
  350 + </div>
  351 + </div>
  352 + </div>
  353 + </div>
  354 + </div>
  355 + </div>
  356 + <!-- 树 -->
  357 + <div class="portlet-body inout-search"></div>
  358 + <div class="portlet-body">
  359 + <div id="inout_carpark_tree" class="defeat-scroll" style="height: auto;max-height: 500px;"></div>
  360 + </div>
  361 + </div>
  362 + </div>
  363 + <div class="tab-pane fade" id="regionDesignTab" data-direction="4">
  364 + <div class="portlet-body" id="regionDesignTool">
  365 + <!-- 树 -->
  366 + <div class="portlet-body">
  367 + <div class="form-horizontal">
  368 + <div class="form-group">
  369 + <div class="col-md-7 col-sm-6 col-xs-7">
  370 + <select id="regionSelect" style="height:30px;width:150px;">
  371 + <option>无线路区间</option>
  372 + </select>
  373 + </div>
  374 + <div class="col-md-2 col-sm-2 col-xs-2">
  375 + <input type="button" value="编辑" id="regionEditBtn"/>
  376 + </div>
  377 + <div class="col-md-2 col-sm-2 col-xs-2">
  378 + <input type="button" value="新增" id="regionAddBtn"/>
  379 + </div>
  380 + </div>
  381 + </div>
  382 + </div>
  383 + <div class="portlet-body">
  384 + <div id="regionDesignContent" style="height: auto;max-height: 500px;">
  385 + <div>
  386 + <table style="width: 100%;">
  387 + <thead>
  388 + <tr class="region-station-head">
  389 + <td style="width: 10%;">#</td>
  390 + <td style="width: 60%;">站点</td>
  391 + <td style="width: 30%;white-space: nowrap">上下行</td>
  392 + </tr>
  393 + </thead>
  394 + </table>
  395 + </div>
  396 +
  397 + <div class="region-station-body" style="overflow-y: auto; height: 450px;">
  398 + <table id="region-station-body-table" style="width: 100%; border: 1px solid #dddddd;">
  399 + </table>
  400 + </div>
  401 + </div>
  402 + </div>
  403 + </div>
  404 + </div>
  405 + </div>
  406 + </div>
  407 + </div>
  408 + </div>
  409 + </div>
  410 +</div>
  411 +
  412 +<script id="add_draw_polyline-temp" type="text/html">
  413 + <div class="add_road_search_point_wrap ">
  414 + <div class="buffer_edit_body" >
  415 + <div class="_title">绘制路段</div>
  416 + <div class="form-horizontal" id="add_station_form">
  417 + <input type="hidden" value="{{id}}" name="id">
  418 + <input type="hidden" id="bsectionVectorInput"> <!--路段-->
  419 +
  420 + <div class="form-group">
  421 + <div class="col-md-12">
  422 + <input type="text" class="input-medium" name="sectionName" id="sectionNameInput" placeholder="路段名">
  423 + </div>
  424 + </div>
  425 +
  426 + <div class="form-group">
  427 + <div class="col-md-5">
  428 + <span class="draw_polyline_switch"><a>暂停绘制</a></span>
  429 + </div>
  430 + <div class="col-md-6 btns">
  431 + <button class="sbmint-btn btn-sm" id="addSectionSbmintBtn">确定</button>
  432 + <button class="cancel-btn btn-sm" id="addSectionCancelBtn">取消</button>
  433 + </div>
  434 + </div>
  435 + </div>
  436 + </div>
  437 + </div>
  438 +</script>
  439 +
  440 +<script id="inout-carpark-search-form" type="text/html">
  441 + <div class="form-horizontal">
  442 + <div class="form-group">
  443 + <div class="col-md-3 col-sm-3 col-xs-3">
  444 + <label class="uk-form-label">起点</label>
  445 + </div>
  446 + <div class="col-md-9 col-sm-9 col-xs-9">
  447 + <select class="form-control" name="startPoint" id="startPoint"></select>
  448 + </div>
  449 + </div>
  450 + <div class="form-group">
  451 + <div class="col-md-3 col-sm-3 col-xs-3">
  452 + <label class="uk-form-label">终点</label>
  453 + </div>
  454 + <div class="col-md-9 col-sm-9 col-xs-9">
  455 + <select class="form-control" name="endPoint" id="endPoint"></select>
  456 + </div>
  457 + </div>
  458 + <div class="form-group">
  459 + <div class="col-md-6"></div>
  460 + <div class="col-md-6 btns">
  461 + <button class="btn-sm" style="float: right;" id="inoutSearch">搜索</button>
  462 + </div>
  463 + </div>
  464 + </div>
  465 +</script>
  466 +<script id="line-region-station-template" type="text/html">
  467 + {{each list as obj i}}
  468 + <tr data-idx="{{i}}">
  469 + <td style="width: 10%;">
  470 + {{i+1}}
  471 + </td>
  472 + <td style="width: 60%;" title="{{obj.stationName}}">
  473 + {{obj.stationName}}
  474 + </td>
  475 + <td style="width: 30%;">
  476 + {{if obj.directions == 0}}
  477 + 上行
  478 + {{else}}
  479 + 下行
  480 + {{/if}}
  481 + </td>
  482 + </tr>
  483 + {{/each}}
  484 + {{if list.length == 0}}
  485 + <tr>
  486 + <td style="width: 100%;" colspan="3">无站点信息</td>
  487 + </tr>
  488 + {{/if}}
  489 +</script>
  490 +<script type="text/javascript">
  491 + $(document).ready(function () {
  492 + RoutesOperation.initPage();
  493 + RoutesOperation.initMap();
  494 + RoutesOperation.initStationDrawingManager();
  495 +
  496 + // 百度地图API功能
  497 + function G(id) {
  498 + return document.getElementById(id);
  499 + }
  500 + var baiduMap = RoutesOperation.getBaiduMap();
  501 + var ac = new BMap.Autocomplete({"input": "searchInput" ,"location": baiduMap});
  502 +
  503 + ac.addEventListener("onhighlight", function(e) { //鼠标放在下拉列表上的事件
  504 + var str = "";
  505 + var _value = e.fromitem.value;
  506 + var value = "";
  507 + if (e.fromitem.index > -1) {
  508 + value = _value.province + _value.city + _value.district + _value.street + _value.business;
  509 + }
  510 + str = "FromItem<br />index = " + e.fromitem.index + "<br />value = " + value;
  511 +
  512 + value = "";
  513 + if (e.toitem.index > -1) {
  514 + _value = e.toitem.value;
  515 + value = _value.province + _value.city + _value.district + _value.street + _value.business;
  516 + }
  517 + str += "<br />ToItem<br />index = " + e.toitem.index + "<br />value = " + value;
  518 + G("searchResultPanel").innerHTML = str;
  519 + });
  520 +
  521 + var myValue;
  522 + ac.addEventListener("onconfirm", function(e) { //鼠标点击下拉列表后的事件
  523 + var _value = e.item.value;
  524 + myValue = _value.province + _value.city + _value.district + _value.street + _value.business;
  525 + G("searchResultPanel").innerHTML ="onconfirm<br />index = " + e.item.index + "<br />myValue = " + myValue;
  526 +
  527 + setPlace();
  528 + });
  529 +
  530 + function setPlace(){
  531 + // myMap.clearOverlays(); //清除地图上所有覆盖物
  532 + var local = new BMap.LocalSearch(myMap, { //智能搜索
  533 + onSearchComplete: myFun
  534 + });
  535 + function myFun(){
  536 + var pp = local.getResults().getPoi(0) == undefined? null:local.getResults().getPoi(0).point;
  537 + if(pp) {
  538 + myMap.centerAndZoom(pp, 20);
  539 + myMap.addOverlay(new BMap.Marker(pp)); //添加标注
  540 + } else {
  541 + layer.msg('找不到您输入的位置!')
  542 + }
  543 + }
  544 + local.search(myValue);
  545 + }
  546 + $("#searchInput").on('input propertychange change', function () {
  547 + if($("#searchInput").val() != null && $("#searchInput").val() != "")
  548 + $('.search_panel .clear').removeClass('hide');
  549 + else {
  550 + // WorldsBMap.clearOtherOverlay();
  551 + $('.search_panel .clear').addClass('hide');
  552 + }
  553 + });
  554 +
  555 + $('.search_panel .clear').on('click',function () {
  556 + // WorldsBMap.clearOtherOverlay();
  557 + $("#searchInput").val('');
  558 + $("#searchInput").change();
  559 + });
  560 + $('.search_panel .search_button').on('click',function () {
  561 + myValue = $("#searchInput").val();
  562 + setPlace();
  563 + });
  564 +
  565 + $('#historyGps').on('click', function() {
  566 + $.get('/pages/base/stationroute/list_template.html', function (content) {
  567 + window.layerIdx = layer.open({
  568 + type: 1,
  569 + move: false,
  570 + area: ['800px', '600px'],
  571 + content: content,
  572 + title: '选择班次(为前一天班次,请选择GPS自动完成的班次)',
  573 + shift: 5,
  574 + scrollbar: false,
  575 + success: function () {
  576 + }
  577 + });
  578 + });
  579 + });
  580 + });
581 </script> 581 </script>
582 \ No newline at end of file 582 \ No newline at end of file
src/main/resources/static/pages/excep/js/map.js
1 -/**  
2 - * 百度地图  
3 - *  
4 - * - - - - - -》init:地图初始化  
5 - *  
6 - * - - - - - -》getDistanceAndDuration:获取距离与时间  
7 - *  
8 - * - - - - - -》drawingUpline:在地图上画出上行线路走向  
9 - *  
10 - * - - - - - -》stationsPointsToLibraryPoint:根据站点坐标匹配库中的公交站点(手动规划)  
11 - */  
12 -  
13 -var BasicMap = function () {  
14 -  
15 - /** BasicMap 全局变量定义 mapBValue:地图对象;polyUpline:走向折线;sectionList:截取过的路段 ;pointIndex:计算路段被切的次数;  
16 - * firstPoint:截取路段的第一个点;iseditStatus:路段是否在编辑状态;isCutSection : 获取路段是否在截取状态*/  
17 - var mapBValue = '', polyUpline='', sectionList = [], pointIndex = 0, iseditStatus = false, firstPoint = {}, isCutSection = false;  
18 -  
19 - var Bmap = {  
20 -  
21 - init : function() {  
22 -  
23 - // 设置中心点,  
24 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};  
25 -  
26 - // 百度API Key  
27 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
28 -  
29 - // 初始化百度地图  
30 - mapBValue = new BMap.Map("BasicMap");  
31 -  
32 - //中心点和缩放级别  
33 - mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat),15);  
34 -  
35 - //启用地图拖拽事件,默认启用(可不写)  
36 - mapBValue.enableDragging();  
37 -  
38 - //启用地图滚轮放大缩小  
39 - mapBValue.enableScrollWheelZoom();  
40 -  
41 - //禁用鼠标双击放大  
42 - mapBValue.disableDoubleClickZoom();  
43 -  
44 - //启用键盘上下左右键移动地图  
45 - mapBValue.enableKeyboard();  
46 -  
47 - return mapBValue;  
48 - },  
49 - /** 获取第一个切路段的点 @return Point*/  
50 - getFirstPoint : function() {  
51 - return firstPoint;  
52 - },  
53 - /** 获取地图对象 @return 地图对象map */  
54 - getmapBValue : function() {  
55 -  
56 - return mapBValue;  
57 -  
58 - },  
59 -  
60 - getPolyUpline : function() {  
61 -  
62 - return polyUpline;  
63 - },  
64 -  
65 - /** 获取截取过的路段 @return 路段对象List */  
66 - getSectionList : function() {  
67 -  
68 - return sectionList;  
69 -  
70 - },  
71 - setSectionList : function(list) {  
72 -  
73 - sectionList = list;  
74 - },  
75 - initCutSectionPoint : function() {  
76 - sectionList = [];  
77 - var tbodyHtml = template('section_list',{list : sectionList});  
78 - $('#section_table tbody').html(tbodyHtml);  
79 - },  
80 - /** 获取切路段的点下标 @return int*/  
81 - setPointIndex : function(index) {  
82 - pointIndex = index;  
83 - },  
84 - getPointIndex : function() {  
85 -  
86 - return pointIndex;  
87 -  
88 - },  
89 - /** 获取路段是否在编辑状态 @return boolean*/  
90 - getIsEditStatus : function() {  
91 - return iseditStatus;  
92 - },  
93 - setIsEditStatus : function(v) {  
94 - iseditStatus = v ;  
95 - },  
96 -  
97 - /** 获取路段是否在截取状态 @return boolean*/  
98 - getIsCutSection : function() {  
99 - return isCutSection;  
100 - },  
101 - setIsCutSection : function(v) {  
102 - isCutSection = v ;  
103 - },  
104 -  
105 - /** 获取距离与时间 @param <points:坐标点集合> */  
106 - getDistanceAndDuration : function(points,callback){  
107 -  
108 - // 获取长度  
109 - var len = points.length;  
110 - (function(){  
111 -  
112 - if (!arguments.callee.count) {  
113 -  
114 - arguments.callee.count = 0;  
115 -  
116 - }  
117 -  
118 - arguments.callee.count++;  
119 -  
120 - var index = parseInt(arguments.callee.count) - 1;  
121 -  
122 - if (index >= len-1) {  
123 -  
124 - callback && callback(points);  
125 -  
126 - return;  
127 - }  
128 -  
129 - // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)  
130 - var f = arguments.callee;  
131 - // 起点坐标 <坐标格式:40.056878,116.30815>  
132 - var origin = points[index].potion.lat + ',' + points[index].potion.lng;  
133 -  
134 - // 终点坐标 <坐标格式:40.056878,116.30815>  
135 - var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;  
136 - var region = '上海';  
137 -  
138 - var origin_region = '上海';  
139 -  
140 - var destination_region = '上海';  
141 -  
142 - var output = 'json';  
143 -  
144 - var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';  
145 -  
146 - /**  
147 - * origin:起点名称或经纬度;  
148 - *  
149 - * destination:终点名称或经纬度;  
150 - *  
151 - * origin_region:起始点所在城市,驾车导航时必填。  
152 - *  
153 - * destination_region:终点所在城市,驾车导航时必填。  
154 - *  
155 - * output :表示输出类型,可设置为xml或json,默认为xml。  
156 - *  
157 - **/  
158 - var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};  
159 -  
160 - /** @description :未认证开发者默认配额为:2000次/天。 */  
161 - $.ajax({  
162 -  
163 - // 百度地图根据坐标获取两点之间的时间与距离  
164 - url: '//api.map.baidu.com/direction/v1?mode=transit',  
165 -  
166 - data: paramsB,  
167 -  
168 - dataType: 'jsonp',  
169 -  
170 - success: function(r){  
171 -  
172 - if(r) {  
173 -  
174 - if(r.message=='ok') {  
175 -  
176 - if(r.result.taxi==null) {  
177 -  
178 - // 获取距离(单位:米)  
179 - points[index+1].distance = 0;  
180 -  
181 - // 获取时间(单位:秒)  
182 - points[index+1].duration = 0;  
183 -  
184 - }else {  
185 -  
186 - // 获取距离(单位:米)  
187 - points[index+1].distance = r.result.taxi.distance;  
188 -  
189 - // 获取时间(单位:秒)  
190 - points[index+1].duration = r.result.taxi.duration;  
191 -  
192 - }  
193 -  
194 -  
195 - }  
196 -  
197 - }  
198 -  
199 - f();  
200 - }  
201 - });  
202 -  
203 - })();  
204 -  
205 - },  
206 - // 在地图上画出上行线路走向  
207 - drawingUpline01 : function (polylineArray,polyline_center,data) {  
208 - var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;  
209 - // 创建线路走向  
210 - polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});  
211 - polyUpline01.data = data;  
212 - // 把折线添加到地图上  
213 - mapBValue.addOverlay(polyUpline01);  
214 - var sectionPoint = [];  
215 - // 线路单击事件  
216 - polyUpline01.addEventListener('click',function(e) {  
217 - if(BasicMap.getIsEditStatus()) {  
218 - layer.msg('请先保存正在编辑的路段信息...');  
219 - return false;  
220 - }  
221 - if(BasicMap.getIsCutSection()) {  
222 - layer.msg('请先撤销所有切路段的点...');  
223 - return false;  
224 - }  
225 - polyUpline01.enableEditing();  
226 - BasicMap.setIsEditStatus(true);  
227 - });  
228 -  
229 - // 添加路段双击事件  
230 - polyUpline01.addEventListener("dblclick",function(e){  
231 - if(BasicMap.getIsCutSection()) {  
232 - layer.msg('请先撤销所有切路段的点...');  
233 - return false;  
234 - }  
235 - BasicMap.setIsEditStatus(false);  
236 - // 关闭  
237 - layer.closeAll();  
238 - polyUpline01.disableEditing();  
239 - EditSectionObj.setEitdSection(polyUpline01.data);  
240 - // 获取折线坐标集合  
241 - var editPloyLineArray = polyUpline01.getPath();  
242 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
243 - sectionList = [];  
244 - var tbodyHtml = template('section_list',{list : sectionList});  
245 - // 截取路段  
246 - $('#section_table tbody').html(tbodyHtml);  
247 - // 加载修改路段弹出层mobal页面  
248 - $.get('editsection.html', function(m){  
249 - $(pjaxContainer).append(m);  
250 - $('#edit_section_mobal_cache').trigger('editSectionMobalCache_show', [BasicMap,GetAjaxData,EditSectionObj,PublicFunctions]);  
251 - });  
252 - });  
253 -  
254 - // 路段右击事件  
255 - var editSection = function(e,ee,marker){  
256 - if(BasicMap.getIsEditStatus()) {  
257 - layer.msg('请先保存正在编辑的路段信息...');  
258 - return false;  
259 - }  
260 - var lng = e.lng;  
261 - var lat = e.lat;  
262 - var sectionName = null;  
263 - var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建点  
264 - marker.isFlag = true;  
265 - if(pointIndex == 0) {  
266 - sectionPoint[pointIndex] = {lng:lng , lat:lat};  
267 - layer.msg('进入切路段状态,请选择本路段的终点!');  
268 - mapBValue.addOverlay(marker);// 添加覆盖物  
269 - firstPoint = {lng:lng, lat:lat};  
270 - pointIndex++;  
271 - EditSectionObj.setEitdSection(polyUpline01.data);  
272 - // 获取折线坐标集合  
273 - var editPloyLineArray = polyUpline01.getPath();  
274 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
275 - } else if (pointIndex > 0) {  
276 - layer.prompt({title: '请输入路段名!'}, function(sectionName, index){  
277 - pointList = [];  
278 - sectionPoint[pointIndex] = {lng:lng , lat:lat};  
279 - pointList[0] = sectionPoint[pointIndex-1];  
280 - pointList[1] = sectionPoint[pointIndex];  
281 - sectionList.push({name:sectionName, section:pointList});  
282 - layer.close(index);  
283 - layer.msg('路段截取成功,请选择下一个路段的终点');  
284 - mapBValue.addOverlay(marker);// 添加覆盖物  
285 - var tbodyHtml = template('section_list',{list : sectionList});  
286 - // 截取路段  
287 - $('#section_table tbody').html(tbodyHtml);  
288 - pointIndex++;  
289 - });  
290 - }  
291 - BasicMap.setIsCutSection(true);  
292 - }  
293 - var markerMenu=new BMap.ContextMenu();  
294 - markerMenu.addItem(new BMap.MenuItem('切路段',editSection.bind(polyUpline01)));  
295 - polyUpline01.addContextMenu(markerMenu);  
296 -  
297 -  
298 - var PanOptions_ ={noAnimation :true};  
299 - mapBValue.reset();  
300 - mapBValue.panTo(polyline_center,PanOptions_);  
301 - mapBValue.panBy(500,-510,PanOptions_);  
302 - mapBValue.setZoom(14);  
303 - },  
304 - // 删除点刷新cutSectionTable  
305 - refreshCutSectionTable : function() {  
306 - var tbodyHtml = template('section_list',{list : sectionList});  
307 - $('#section_table tbody').html(tbodyHtml);  
308 - },  
309 - // 删除点刷新覆盖物  
310 - deleteCutSectionPoint : function(point) {  
311 - var lng = point.lng;  
312 - var lat = point.lat;  
313 - var allOverlay = mapBValue.getOverlays();  
314 - // 删除最后一个点  
315 - for (var i = 0; i < allOverlay.length -1; i++){  
316 - if(allOverlay[i].isFlag) {  
317 - if(allOverlay[i].point.lng == lng && allOverlay[i].point.lat == lat){  
318 - mapBValue.removeOverlay(allOverlay[i]);  
319 - break;  
320 - }  
321 - }  
322 - }  
323 - },  
324 - /** 在地图上画点 @param:<point_center:中心坐标点> */  
325 - drawingUpStationPoint : function(point_center,stationName,s) {  
326 -  
327 - // 自定义标注物图片  
328 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));  
329 -  
330 - var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'  
331 - + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'  
332 - + '</div>'  
333 - + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';  
334 -  
335 -  
336 - var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{  
337 - "anchor" : new BMap.Size(-10,8),  
338 - "enableDragging" : true});  
339 -  
340 -  
341 - myRichMarker1.disableDragging();  
342 - mapBValue.addOverlay(myRichMarker1);  
343 -  
344 -  
345 - // 创建标注物  
346 - marker = new BMap.Marker(point_center,{icon : icon_target});  
347 -  
348 - // 允许覆盖物在map.clearOverlays方法中被清除。  
349 - marker.enableMassClear();  
350 -  
351 - mapBValue.addOverlay(marker);  
352 - },  
353 -  
354 - // 根据站点坐标匹配库中的公交站点(手动规划)  
355 - stationsPointsToLibraryPoint : function(arra,callback) {  
356 - // 获取长度  
357 - var len = arra.length;  
358 - var station = {};  
359 - var stationList = [];  
360 - (function(){  
361 - if (!arguments.callee.count) {  
362 - arguments.callee.count = 0;  
363 - }  
364 - arguments.callee.count++;  
365 - var index = parseInt(arguments.callee.count) - 1;  
366 - if (index >= len) {  
367 - callback && callback(stationList);  
368 - return ;  
369 - }  
370 - var f = arguments.callee;  
371 - station = arra[index];  
372 - if(arra[index].name!=''){  
373 - $.get('/station/matchStation',station,function(result) {  
374 - var centerPointWkt = result.centerPointWkt, idx = centerPointWkt.indexOf('POINT(');  
375 - centerPointWkt = idx > -1 ? centerPointWkt.substring(6, centerPointWkt.length - 1) : centerPointWkt;  
376 - var coordinates = centerPointWkt.split(' ');  
377 - stationList.push({name: result.name ,wgs: arra[index].wgs, potion: {lng: coordinates[0], lat: coordinates[1]}, isHave: result.isHave, id: result.id});  
378 - f();  
379 - });  
380 - }else {  
381 - f();  
382 - }  
383 - })()  
384 - },  
385 - clearMarkAndOverlays : function() {  
386 -  
387 - // 清楚地图覆盖物  
388 - mapBValue.clearOverlays();  
389 -  
390 - mapBValue.removeOverlay();  
391 -  
392 - }  
393 -  
394 - }  
395 -  
396 - return Bmap;  
397 - 1 +/**
  2 + * 百度地图
  3 + *
  4 + * - - - - - -》init:地图初始化
  5 + *
  6 + * - - - - - -》getDistanceAndDuration:获取距离与时间
  7 + *
  8 + * - - - - - -》drawingUpline:在地图上画出上行线路走向
  9 + *
  10 + * - - - - - -》stationsPointsToLibraryPoint:根据站点坐标匹配库中的公交站点(手动规划)
  11 + */
  12 +
  13 +var BasicMap = function () {
  14 +
  15 + /** BasicMap 全局变量定义 mapBValue:地图对象;polyUpline:走向折线;sectionList:截取过的路段 ;pointIndex:计算路段被切的次数;
  16 + * firstPoint:截取路段的第一个点;iseditStatus:路段是否在编辑状态;isCutSection : 获取路段是否在截取状态*/
  17 + var mapBValue = '', polyUpline='', sectionList = [], pointIndex = 0, iseditStatus = false, firstPoint = {}, isCutSection = false;
  18 +
  19 + var Bmap = {
  20 +
  21 + init : function() {
  22 +
  23 + // 设置中心点,
  24 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};
  25 +
  26 + // 百度API Key
  27 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
  28 +
  29 + // 初始化百度地图
  30 + mapBValue = new BMap.Map("BasicMap");
  31 +
  32 + //中心点和缩放级别
  33 + mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat),15);
  34 +
  35 + //启用地图拖拽事件,默认启用(可不写)
  36 + mapBValue.enableDragging();
  37 +
  38 + //启用地图滚轮放大缩小
  39 + mapBValue.enableScrollWheelZoom();
  40 +
  41 + //禁用鼠标双击放大
  42 + mapBValue.disableDoubleClickZoom();
  43 +
  44 + //启用键盘上下左右键移动地图
  45 + mapBValue.enableKeyboard();
  46 +
  47 + return mapBValue;
  48 + },
  49 + /** 获取第一个切路段的点 @return Point*/
  50 + getFirstPoint : function() {
  51 + return firstPoint;
  52 + },
  53 + /** 获取地图对象 @return 地图对象map */
  54 + getmapBValue : function() {
  55 +
  56 + return mapBValue;
  57 +
  58 + },
  59 +
  60 + getPolyUpline : function() {
  61 +
  62 + return polyUpline;
  63 + },
  64 +
  65 + /** 获取截取过的路段 @return 路段对象List */
  66 + getSectionList : function() {
  67 +
  68 + return sectionList;
  69 +
  70 + },
  71 + setSectionList : function(list) {
  72 +
  73 + sectionList = list;
  74 + },
  75 + initCutSectionPoint : function() {
  76 + sectionList = [];
  77 + var tbodyHtml = template('section_list',{list : sectionList});
  78 + $('#section_table tbody').html(tbodyHtml);
  79 + },
  80 + /** 获取切路段的点下标 @return int*/
  81 + setPointIndex : function(index) {
  82 + pointIndex = index;
  83 + },
  84 + getPointIndex : function() {
  85 +
  86 + return pointIndex;
  87 +
  88 + },
  89 + /** 获取路段是否在编辑状态 @return boolean*/
  90 + getIsEditStatus : function() {
  91 + return iseditStatus;
  92 + },
  93 + setIsEditStatus : function(v) {
  94 + iseditStatus = v ;
  95 + },
  96 +
  97 + /** 获取路段是否在截取状态 @return boolean*/
  98 + getIsCutSection : function() {
  99 + return isCutSection;
  100 + },
  101 + setIsCutSection : function(v) {
  102 + isCutSection = v ;
  103 + },
  104 +
  105 + /** 获取距离与时间 @param <points:坐标点集合> */
  106 + getDistanceAndDuration : function(points,callback){
  107 +
  108 + // 获取长度
  109 + var len = points.length;
  110 + (function(){
  111 +
  112 + if (!arguments.callee.count) {
  113 +
  114 + arguments.callee.count = 0;
  115 +
  116 + }
  117 +
  118 + arguments.callee.count++;
  119 +
  120 + var index = parseInt(arguments.callee.count) - 1;
  121 +
  122 + if (index >= len-1) {
  123 +
  124 + callback && callback(points);
  125 +
  126 + return;
  127 + }
  128 +
  129 + // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)
  130 + var f = arguments.callee;
  131 + // 起点坐标 <坐标格式:40.056878,116.30815>
  132 + var origin = points[index].potion.lat + ',' + points[index].potion.lng;
  133 +
  134 + // 终点坐标 <坐标格式:40.056878,116.30815>
  135 + var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;
  136 + var region = '上海';
  137 +
  138 + var origin_region = '上海';
  139 +
  140 + var destination_region = '上海';
  141 +
  142 + var output = 'json';
  143 +
  144 + var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';
  145 +
  146 + /**
  147 + * origin:起点名称或经纬度;
  148 + *
  149 + * destination:终点名称或经纬度;
  150 + *
  151 + * origin_region:起始点所在城市,驾车导航时必填。
  152 + *
  153 + * destination_region:终点所在城市,驾车导航时必填。
  154 + *
  155 + * output :表示输出类型,可设置为xml或json,默认为xml。
  156 + *
  157 + **/
  158 + var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};
  159 +
  160 + /** @description :未认证开发者默认配额为:2000次/天。 */
  161 + $.ajax({
  162 +
  163 + // 百度地图根据坐标获取两点之间的时间与距离
  164 + url: '//api.map.baidu.com/direction/v1?mode=transit',
  165 +
  166 + data: paramsB,
  167 +
  168 + dataType: 'jsonp',
  169 +
  170 + success: function(r){
  171 +
  172 + if(r) {
  173 +
  174 + if(r.message=='ok') {
  175 +
  176 + if(r.result.taxi==null) {
  177 +
  178 + // 获取距离(单位:米)
  179 + points[index+1].distance = 0;
  180 +
  181 + // 获取时间(单位:秒)
  182 + points[index+1].duration = 0;
  183 +
  184 + }else {
  185 +
  186 + // 获取距离(单位:米)
  187 + points[index+1].distance = r.result.taxi.distance;
  188 +
  189 + // 获取时间(单位:秒)
  190 + points[index+1].duration = r.result.taxi.duration;
  191 +
  192 + }
  193 +
  194 +
  195 + }
  196 +
  197 + }
  198 +
  199 + f();
  200 + }
  201 + });
  202 +
  203 + })();
  204 +
  205 + },
  206 + // 在地图上画出上行线路走向
  207 + drawingUpline01 : function (polylineArray,polyline_center,data) {
  208 + var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;
  209 + // 创建线路走向
  210 + polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});
  211 + polyUpline01.data = data;
  212 + // 把折线添加到地图上
  213 + mapBValue.addOverlay(polyUpline01);
  214 + var sectionPoint = [];
  215 + // 线路单击事件
  216 + polyUpline01.addEventListener('click',function(e) {
  217 + if(BasicMap.getIsEditStatus()) {
  218 + layer.msg('请先保存正在编辑的路段信息...');
  219 + return false;
  220 + }
  221 + if(BasicMap.getIsCutSection()) {
  222 + layer.msg('请先撤销所有切路段的点...');
  223 + return false;
  224 + }
  225 + polyUpline01.enableEditing();
  226 + BasicMap.setIsEditStatus(true);
  227 + });
  228 +
  229 + // 添加路段双击事件
  230 + polyUpline01.addEventListener("dblclick",function(e){
  231 + if(BasicMap.getIsCutSection()) {
  232 + layer.msg('请先撤销所有切路段的点...');
  233 + return false;
  234 + }
  235 + BasicMap.setIsEditStatus(false);
  236 + // 关闭
  237 + layer.closeAll();
  238 + polyUpline01.disableEditing();
  239 + EditSectionObj.setEitdSection(polyUpline01.data);
  240 + // 获取折线坐标集合
  241 + var editPloyLineArray = polyUpline01.getPath();
  242 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  243 + sectionList = [];
  244 + var tbodyHtml = template('section_list',{list : sectionList});
  245 + // 截取路段
  246 + $('#section_table tbody').html(tbodyHtml);
  247 + // 加载修改路段弹出层mobal页面
  248 + $.get('editsection.html', function(m){
  249 + $(pjaxContainer).append(m);
  250 + $('#edit_section_mobal_cache').trigger('editSectionMobalCache_show', [BasicMap,GetAjaxData,EditSectionObj,PublicFunctions]);
  251 + });
  252 + });
  253 +
  254 + // 路段右击事件
  255 + var editSection = function(e,ee,marker){
  256 + if(BasicMap.getIsEditStatus()) {
  257 + layer.msg('请先保存正在编辑的路段信息...');
  258 + return false;
  259 + }
  260 + var lng = e.lng;
  261 + var lat = e.lat;
  262 + var sectionName = null;
  263 + var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建点
  264 + marker.isFlag = true;
  265 + if(pointIndex == 0) {
  266 + sectionPoint[pointIndex] = {lng:lng , lat:lat};
  267 + layer.msg('进入切路段状态,请选择本路段的终点!');
  268 + mapBValue.addOverlay(marker);// 添加覆盖物
  269 + firstPoint = {lng:lng, lat:lat};
  270 + pointIndex++;
  271 + EditSectionObj.setEitdSection(polyUpline01.data);
  272 + // 获取折线坐标集合
  273 + var editPloyLineArray = polyUpline01.getPath();
  274 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  275 + } else if (pointIndex > 0) {
  276 + layer.prompt({title: '请输入路段名!'}, function(sectionName, index){
  277 + pointList = [];
  278 + sectionPoint[pointIndex] = {lng:lng , lat:lat};
  279 + pointList[0] = sectionPoint[pointIndex-1];
  280 + pointList[1] = sectionPoint[pointIndex];
  281 + sectionList.push({name:sectionName, section:pointList});
  282 + layer.close(index);
  283 + layer.msg('路段截取成功,请选择下一个路段的终点');
  284 + mapBValue.addOverlay(marker);// 添加覆盖物
  285 + var tbodyHtml = template('section_list',{list : sectionList});
  286 + // 截取路段
  287 + $('#section_table tbody').html(tbodyHtml);
  288 + pointIndex++;
  289 + });
  290 + }
  291 + BasicMap.setIsCutSection(true);
  292 + }
  293 + var markerMenu=new BMap.ContextMenu();
  294 + markerMenu.addItem(new BMap.MenuItem('切路段',editSection.bind(polyUpline01)));
  295 + polyUpline01.addContextMenu(markerMenu);
  296 +
  297 +
  298 + var PanOptions_ ={noAnimation :true};
  299 + mapBValue.reset();
  300 + mapBValue.panTo(polyline_center,PanOptions_);
  301 + mapBValue.panBy(500,-510,PanOptions_);
  302 + mapBValue.setZoom(14);
  303 + },
  304 + // 删除点刷新cutSectionTable
  305 + refreshCutSectionTable : function() {
  306 + var tbodyHtml = template('section_list',{list : sectionList});
  307 + $('#section_table tbody').html(tbodyHtml);
  308 + },
  309 + // 删除点刷新覆盖物
  310 + deleteCutSectionPoint : function(point) {
  311 + var lng = point.lng;
  312 + var lat = point.lat;
  313 + var allOverlay = mapBValue.getOverlays();
  314 + // 删除最后一个点
  315 + for (var i = 0; i < allOverlay.length -1; i++){
  316 + if(allOverlay[i].isFlag) {
  317 + if(allOverlay[i].point.lng == lng && allOverlay[i].point.lat == lat){
  318 + mapBValue.removeOverlay(allOverlay[i]);
  319 + break;
  320 + }
  321 + }
  322 + }
  323 + },
  324 + /** 在地图上画点 @param:<point_center:中心坐标点> */
  325 + drawingUpStationPoint : function(point_center,stationName,s) {
  326 +
  327 + // 自定义标注物图片
  328 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));
  329 +
  330 + var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'
  331 + + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'
  332 + + '</div>'
  333 + + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';
  334 +
  335 +
  336 + var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{
  337 + "anchor" : new BMap.Size(-10,8),
  338 + "enableDragging" : true});
  339 +
  340 +
  341 + myRichMarker1.disableDragging();
  342 + mapBValue.addOverlay(myRichMarker1);
  343 +
  344 +
  345 + // 创建标注物
  346 + marker = new BMap.Marker(point_center,{icon : icon_target});
  347 +
  348 + // 允许覆盖物在map.clearOverlays方法中被清除。
  349 + marker.enableMassClear();
  350 +
  351 + mapBValue.addOverlay(marker);
  352 + },
  353 +
  354 + // 根据站点坐标匹配库中的公交站点(手动规划)
  355 + stationsPointsToLibraryPoint : function(arra,callback) {
  356 + // 获取长度
  357 + var len = arra.length;
  358 + var station = {};
  359 + var stationList = [];
  360 + (function(){
  361 + if (!arguments.callee.count) {
  362 + arguments.callee.count = 0;
  363 + }
  364 + arguments.callee.count++;
  365 + var index = parseInt(arguments.callee.count) - 1;
  366 + if (index >= len) {
  367 + callback && callback(stationList);
  368 + return ;
  369 + }
  370 + var f = arguments.callee;
  371 + station = arra[index];
  372 + if(arra[index].name!=''){
  373 + $.get('/station/matchStation',station,function(result) {
  374 + var centerPointWkt = result.centerPointWkt, idx = centerPointWkt.indexOf('POINT(');
  375 + centerPointWkt = idx > -1 ? centerPointWkt.substring(6, centerPointWkt.length - 1) : centerPointWkt;
  376 + var coordinates = centerPointWkt.split(' ');
  377 + stationList.push({name: result.name ,wgs: arra[index].wgs, potion: {lng: coordinates[0], lat: coordinates[1]}, isHave: result.isHave, id: result.id});
  378 + f();
  379 + });
  380 + }else {
  381 + f();
  382 + }
  383 + })()
  384 + },
  385 + clearMarkAndOverlays : function() {
  386 +
  387 + // 清楚地图覆盖物
  388 + mapBValue.clearOverlays();
  389 +
  390 + mapBValue.removeOverlay();
  391 +
  392 + }
  393 +
  394 + }
  395 +
  396 + return Bmap;
  397 +
398 }(); 398 }();
399 \ No newline at end of file 399 \ No newline at end of file
src/main/resources/static/pages/excep/js/outbound-map.js
1 -/**  
2 - * 百度地图  
3 - *  
4 - * - - - - - -》init:地图初始化  
5 - *  
6 - * - - - - - -》lineInfoPanl:从百度地图抓去站点与路段数据  
7 - *  
8 - * - - - - - -》getDistanceAndDuration:获取距离与时间  
9 - *  
10 - * - - - - - -》pointsPolygon:地图画多边行  
11 - *  
12 - * - - - - - -》pointsCircle:画圆  
13 - *  
14 - * - - - - - -》localSearchFromAdreesToPoint:根据地理名称获取百度经纬度坐标  
15 - *  
16 - * - - - - - -》drawingUpline:在地图上画出上行线路走向  
17 - *  
18 - * - - - - - -》stationsNameToPoints:站点名称获取百度坐标(手动规划)  
19 - *  
20 - * - - - - - -》getDistanceAndTotime:根据坐标点获取两点之间的时间与距离(手动规划)  
21 - *  
22 - * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划)  
23 - */  
24 -  
25 -var WorldsBMap = function () {  
26 -  
27 - /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆 */  
28 - var mapBValue = '';polygon='',polyUpline='',circle='',iseditStatus = false;  
29 -  
30 - var Bmap = {  
31 -  
32 - init : function() {  
33 -  
34 - // 设置中心点,  
35 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};  
36 -  
37 - // 百度API Key  
38 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
39 -  
40 - // 初始化百度地图  
41 - mapBValue = new BMap.Map("bmap_basic");  
42 -  
43 - //中心点和缩放级别  
44 - mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);  
45 -  
46 - //启用地图拖拽事件,默认启用(可不写)  
47 - mapBValue.enableDragging();  
48 -  
49 - //启用地图滚轮放大缩小  
50 - mapBValue.enableScrollWheelZoom();  
51 -  
52 - //禁用鼠标双击放大  
53 - mapBValue.disableDoubleClickZoom();  
54 -  
55 - //启用键盘上下左右键移动地图  
56 - mapBValue.enableKeyboard();  
57 -  
58 - return mapBValue;  
59 - },  
60 -  
61 - /** 获取地图对象 @return 地图对象map */  
62 - getmapBValue : function() {  
63 -  
64 - return mapBValue;  
65 -  
66 - },  
67 -  
68 - getPolygon : function(){  
69 -  
70 - return polygon;  
71 - },  
72 -  
73 - getPolyUpline : function() {  
74 -  
75 - return polyUpline;  
76 - },  
77 -  
78 - getCircle : function() {  
79 -  
80 - return circle;  
81 - },  
82 -  
83 - getIsEditStatus : function() {  
84 - return iseditStatus;  
85 - },  
86 -  
87 - setIsEditStatus : function(v) {  
88 - iseditStatus = v ;  
89 - },  
90 -  
91 - initDrawingManager: function(map,styleOptions) {  
92 -  
93 - },  
94 -  
95 - getDrawingManagerObj : function() {  
96 -  
97 - return drawingManagerInitV;  
98 - },  
99 -  
100 - // 从百度地图抓去站点与路段数据  
101 - lineInfoPanl : function(lineNameValue,i,cb) {  
102 -  
103 - /** 根据线路名称与方向从百度地图获取站点与路段 @param lineNameValue:线路名称;i:方向<0:上行;1:下行> */  
104 - WorldsBMap.getBmapStationNames(lineNameValue,i,function(BusLine){  
105 -  
106 - return cb && cb(BusLine);  
107 -  
108 - });  
109 -  
110 - },  
111 -  
112 - /** 获取距离与时间 @param <points:坐标点集合> */  
113 - getDistanceAndDuration : function(points,callback){  
114 -  
115 - // 获取长度  
116 - var len = points.length;  
117 -  
118 - (function(){  
119 -  
120 - if (!arguments.callee.count) {  
121 -  
122 - arguments.callee.count = 0;  
123 -  
124 - }  
125 -  
126 - arguments.callee.count++;  
127 -  
128 - var index = parseInt(arguments.callee.count) - 1;  
129 -  
130 - if (index >= len-1) {  
131 -  
132 - callback && callback(points);  
133 -  
134 - return;  
135 - }  
136 -  
137 - // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)  
138 - var f = arguments.callee;  
139 -  
140 - // 起点坐标 <坐标格式:40.056878,116.30815>  
141 - var origin = points[index].potion.lat + ',' + points[index].potion.lng;  
142 -  
143 - // 终点坐标 <坐标格式:40.056878,116.30815>  
144 - var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;  
145 -  
146 - var region = '上海';  
147 -  
148 - var origin_region = '上海';  
149 -  
150 - var destination_region = '上海';  
151 -  
152 - var output = 'json';  
153 -  
154 - var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';  
155 -  
156 - /**  
157 - * origin:起点名称或经纬度;  
158 - *  
159 - * destination:终点名称或经纬度;  
160 - *  
161 - * origin_region:起始点所在城市,驾车导航时必填。  
162 - *  
163 - * destination_region:终点所在城市,驾车导航时必填。  
164 - *  
165 - * output :表示输出类型,可设置为xml或json,默认为xml。  
166 - *  
167 - **/  
168 - var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};  
169 -  
170 - /** @description :未认证开发者默认配额为:2000次/天。 */  
171 - $.ajax({  
172 -  
173 - // 百度地图根据坐标获取两点之间的时间与距离  
174 - url: '//api.map.baidu.com/direction/v1?mode=transit',  
175 -  
176 - data: paramsB,  
177 -  
178 - dataType: 'jsonp',  
179 -  
180 - success: function(r){  
181 -  
182 - if(r) {  
183 -  
184 - if(r.message=='ok') {  
185 -  
186 - if(r.result.taxi==null) {  
187 -  
188 - // 获取距离(单位:米)  
189 - points[index+1].distance = 0;  
190 -  
191 - // 获取时间(单位:秒)  
192 - points[index+1].duration = 0;  
193 -  
194 - }else {  
195 -  
196 - // 获取距离(单位:米)  
197 - points[index+1].distance = r.result.taxi.distance;  
198 -  
199 - // 获取时间(单位:秒)  
200 - points[index+1].duration = r.result.taxi.duration;  
201 -  
202 - }  
203 -  
204 -  
205 - }  
206 -  
207 - }  
208 -  
209 - f();  
210 - }  
211 - });  
212 -  
213 - })();  
214 -  
215 - },  
216 -  
217 - // 地图画多边形  
218 - pointsPolygon : function(objStation) {  
219 -  
220 - // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)  
221 - mapBValue.setZoom(15);  
222 -  
223 - // 如果不为空  
224 - if(objStation) {  
225 -  
226 - // 获取中心点坐标字符串  
227 - var testpointStr = objStation.stationBJwpoints;  
228 -  
229 - // 按空格切割中心点坐标字符串  
230 - var BJwpointsPolygon = testpointStr.split(' ');  
231 -  
232 - // 中心点坐标  
233 - var pointPolygon = new BMap.Point(BJwpointsPolygon[0], BJwpointsPolygon[1]);  
234 -  
235 - // 获取多边形坐标字符串  
236 - var stationBPolygonGrid = objStation.stationBPolygonGrid;  
237 -  
238 - // 截取多边形坐标字符串  
239 - var stationBPolygonGridStr = stationBPolygonGrid.substring(9,stationBPolygonGrid.length-2);  
240 -  
241 - // 按逗号切割  
242 - var pointPolygonArray = stationBPolygonGridStr.split(',');  
243 -  
244 - // 多边形坐标集合  
245 - var polygonP = [];  
246 -  
247 - for(var v = 0;v<pointPolygonArray.length;v++) {  
248 -  
249 - polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0],pointPolygonArray[v].split(" ")[1]));  
250 -  
251 - }  
252 -  
253 - // 画多边形  
254 - polygon = new BMap.Polygon(polygonP, {  
255 -  
256 - // 线条显色  
257 - strokeColor : "blue",  
258 -  
259 - // 边线的宽度,以像素为单位。  
260 - strokeWeight : 2,  
261 -  
262 - // 边线透明度,取值范围0 - 1。  
263 - strokeOpacity : 0.5  
264 - });  
265 -  
266 - // 增加地图覆盖物多边形  
267 - mapBValue.addOverlay(polygon);  
268 -  
269 - // 信息窗口属性  
270 - var opts_polygon = {  
271 -  
272 - // 信息窗口宽度  
273 - width : 200,  
274 -  
275 - // 信息窗口高度  
276 - height : 400,  
277 -  
278 - // 信息窗位置偏移值。  
279 - offset: new BMap.Size(500,20),  
280 -  
281 - //标题  
282 - title : '<h4 style="color:#FFFFFF">'+objStation.stationStationName+'站详情</h4>',  
283 -  
284 - //设置不允许信窗发送短息  
285 - enableMessage : false,  
286 -  
287 - //是否开启点击地图关闭信息窗口  
288 - enableCloseOnClick : false  
289 - };  
290 -  
291 - var markTypeStr = '';  
292 -  
293 - if(objStation.stationRouteStationMark=='B') {  
294 -  
295 - markTypeStr='起点站';  
296 -  
297 - }else if(objStation.stationRouteStationMark=='Z') {  
298 -  
299 - markTypeStr ='中途站';  
300 -  
301 -  
302 - }else if(objStation.stationRouteStationMark=='E') {  
303 -  
304 - markTypeStr='终点站';  
305 -  
306 - }  
307 -  
308 - var htm = '<HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1>'+  
309 - '<span style="color:#DDD;font-size: 15px;">站点名称:' + objStation.stationStationName + '</span>' +  
310 - '<span class="help-block" style="color:#DDD;font-size: 15px;">站点编码:' + objStation.stationStationCod + '</span>' +  
311 - '<span class="help-block" style="color:#DDD;font-size: 15px;">站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +  
312 - '<span class="help-block" style="color:#DDD;font-size: 15px;">站点类型:' + markTypeStr + '</span>' +  
313 - '<span class="help-block" style="color:#DDD;font-size: 15px;">纬度坐标:' + objStation.stationBJwpoints + '</span>' +  
314 - '<span class="help-block" style="color:#DDD;font-size: 15px;">到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +  
315 - '<span class="help-block" style="color:#DDD;font-size: 15px;">到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +  
316 - '<span class="help-block" style="color:#DDD;font-size: 15px;">范围半径:' + objStation.stationRadius + '</span>' +  
317 - '<span class="help-block" style="color:#DDD;font-size: 15px;">版本 号:' + objStation.stationRouteVersions + '</span>' +  
318 - '<span class="help-block" style="width: 100%;font-size: 15px;;color:#DDD;'+  
319 - 'overflow: hidden; white-space: nowrap; text-overflow: ellipsis; " title="'+  
320 - objStation.stationRouteDescriptions +'" >说明/描述:' + objStation.stationRouteDescriptions + '</span>' ;  
321 -  
322 - // 创建信息窗口  
323 - var infoWindow_target = new BMap.InfoWindow(htm, opts_polygon);  
324 - // 自定义标注物图片  
325 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
326 -  
327 - // 创建点  
328 - marker = new BMap.Marker(pointPolygon,{icon : icon_target});  
329 -  
330 - // 把标注添物加到地图上  
331 - mapBValue.addOverlay(marker);  
332 -  
333 - // 是否在平移过程中禁止动画。(自1.2新增)  
334 - var PanOptions_ ={noAnimation :true};  
335 -  
336 - // 将地图的中心点更改为给定的点。  
337 - mapBValue.panTo(pointPolygon,PanOptions_);  
338 -  
339 - // 将地图在水平位置上移动x像素,垂直位置上移动y像素。  
340 - mapBValue.panBy(10,-150,PanOptions_);  
341 -  
342 - //开启信息窗口  
343 - mapBValue.openInfoWindow(infoWindow_target,pointPolygon);  
344 -  
345 - }  
346 -  
347 - },  
348 -  
349 - editPolyUpline : function() {  
350 - // 禁止覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)  
351 - polyUpline.disableMassClear();  
352 - WorldsBMap.clearMarkAndOverlays();  
353 - // 允许覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)  
354 - polyUpline.enableMassClear();  
355 - // 开启线路编辑  
356 - polyUpline.enableEditing();  
357 - // 添加双击折线保存事件  
358 - polyUpline.addEventListener('dblclick',function(e) {  
359 - // 关闭  
360 - layer.closeAll();  
361 - polyUpline.disableEditing();  
362 - // 获取折线坐标集合  
363 - var editPloyLineArray = polyUpline.getPath();  
364 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
365 - polyUpline= '';  
366 - // 加载修改路段弹出层mobal页面  
367 - $.get('editsection.html', function(m){  
368 - $(pjaxContainer).append(m);  
369 - $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,EditSectionObj,PublicFunctions]);  
370 - });  
371 - });  
372 - },  
373 -  
374 - // 画圆  
375 - pointsCircle : function(objStation) {  
376 -  
377 - // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)  
378 - mapBValue.setZoom(16);  
379 -  
380 - if(objStation) {  
381 -  
382 - // 清除地图覆盖物  
383 - mapBValue.clearOverlays();  
384 -  
385 - // 获取中心坐标点字符串分割  
386 - var BJwpoints = objStation.stationBJwpoints.split(' ');  
387 -  
388 - // 中心坐标点  
389 - var point = new BMap.Point(BJwpoints[0], BJwpoints[1]);  
390 -  
391 - //创建圆  
392 - circle = new BMap.Circle(point,objStation.stationRadius,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});  
393 -  
394 - // 允许覆盖物在map.clearOverlays方法中被清除  
395 - circle.enableMassClear();  
396 -  
397 - // 百度地图添加覆盖物圆  
398 - mapBValue.addOverlay(circle);  
399 -  
400 - // 信息窗口参数属性  
401 - var opts = {  
402 -  
403 - // 信息窗口宽度  
404 - width : 200,  
405 -  
406 - // 信息窗口高度  
407 - height : 450,  
408 -  
409 - // 信息窗位置偏移值。  
410 - offset: new BMap.Size(500,120),  
411 -  
412 - //标题  
413 - title : '<h4 style="color:#FFFFFF">'+objStation.stationStationName+'站详情</h4>',  
414 -  
415 - //设置不允许信窗发送短息  
416 - enableMessage : false,  
417 -  
418 - //是否开启点击地图关闭信息窗口  
419 - enableCloseOnClick : false,  
420 -  
421 - // 是否开启信息窗口打开时地图自动移动(默认开启)。(自 1.1 新增)  
422 - enableAutoPan:false  
423 - };  
424 -  
425 - var markTypeStr = '';  
426 -  
427 - if(objStation.stationRouteStationMark=='B') {  
428 -  
429 - markTypeStr='起点站';  
430 -  
431 - }else if(objStation.stationRouteStationMark=='Z') {  
432 -  
433 - markTypeStr ='中途站';  
434 -  
435 -  
436 - }else if(objStation.stationRouteStationMark=='E') {  
437 -  
438 - markTypeStr='终点站';  
439 -  
440 - }  
441 -  
442 - var htm = '<HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1>'+  
443 - '<span style="color:#DDD;font-size: 15px;">站点名称:' + objStation.stationStationName + '</span>' +  
444 - '<span class="help-block" style="color:#DDD;font-size: 15px;">站点编码:' + objStation.stationStationCod + '</span>' +  
445 - '<span class="help-block" style="color:#DDD;font-size: 15px;">站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +  
446 - '<span class="help-block" style="color:#DDD;font-size: 15px;">站点类型:' + markTypeStr + '</span>' +  
447 - '<span class="help-block" style="color:#DDD;font-size: 15px;">纬度坐标:' + objStation.stationBJwpoints + '</span>' +  
448 - '<span class="help-block" style="color:#DDD;font-size: 15px;">到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +  
449 - '<span class="help-block" style="color:#DDD;font-size: 15px;">到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +  
450 - '<span class="help-block" style="color:#DDD;font-size: 15px;">范围半径:' + objStation.stationRadius + '</span>' +  
451 - '<span class="help-block" style="color:#DDD;font-size: 15px;">版本 号:' + objStation.stationRouteVersions + '</span>' +  
452 - '<span class="help-block" style="width: 100%;font-size: 15px;;color:#DDD;'+  
453 - 'overflow: hidden; white-space: nowrap; text-overflow: ellipsis; " title="'+  
454 - objStation.stationRouteDescriptions +'" >说明/描述:' + objStation.stationRouteDescriptions + '</span>' ;  
455 -  
456 - // 创建信息窗口  
457 - var infoWindow_target = new BMap.InfoWindow(htm, opts);  
458 - // 自定义标注物图片  
459 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));  
460 -  
461 - // 创建点  
462 - marker = new BMap.Marker(point,{icon : icon_target});  
463 -  
464 - // 把标注添物加到地图上  
465 - mapBValue.addOverlay(marker);  
466 -  
467 - setTimeout(function(){  
468 - //开启信息窗口  
469 - marker.openInfoWindow(infoWindow_target,point);  
470 -  
471 - },100);  
472 -  
473 - // 是否在平移过程中禁止动画。(自1.2新增)  
474 - var PanOptions_ ={noAnimation :true};  
475 -  
476 - // 将地图的中心点更改为给定的点。  
477 - mapBValue.panTo(point,PanOptions_);  
478 -  
479 - mapBValue.panBy(10,-200,PanOptions_);  
480 -  
481 - // 添加标志物监听事件  
482 - marker.addEventListener("click",function() {  
483 -  
484 - //开启信息窗口  
485 - marker.openInfoWindow(infoWindow_target,point);  
486 -  
487 - });  
488 -  
489 - }  
490 -  
491 - },  
492 -  
493 - // 根据地理名称获取百度经纬度坐标  
494 - localSearchFromAdreesToPoint: function(Address,callback) {  
495 -  
496 - // 创建一个搜索类实例  
497 - var localSearch = new BMap.LocalSearch(mapBValue);  
498 -  
499 - // 检索完成后的回调函数。  
500 - localSearch.setSearchCompleteCallback(function (searchResult) {  
501 -  
502 - var resultPoints = '';  
503 -  
504 - if(searchResult) {  
505 -  
506 - // 返回索引指定的结果。索引0表示第1条结果  
507 - var poi = searchResult.getPoi(0);  
508 -  
509 - if(poi) {  
510 -  
511 - //获取经度和纬度  
512 - resultPoints = poi.point.lng + ' ' + poi.point.lat;  
513 -  
514 - callback && callback(resultPoints);  
515 -  
516 - }else {  
517 -  
518 - callback && callback(false);  
519 -  
520 - }  
521 -  
522 - }else {  
523 -  
524 - callback && callback(false);  
525 - }  
526 -  
527 - });  
528 -  
529 - // 根据检索词发起检索。  
530 - localSearch.search(Address);  
531 -  
532 - },  
533 -  
534 - // 编辑图形  
535 - editShapes : function(editStationName,stationShapesTypeV,mindex) {  
536 -  
537 - // 关闭信息窗口  
538 - marker.closeInfoWindow();  
539 -  
540 - // 清除marker  
541 - mapBValue.removeOverlay(marker);  
542 -  
543 - // 编辑圆  
544 - if(stationShapesTypeV =='r') {  
545 -  
546 - // 开启编辑功能  
547 - circle.enableEditing();  
548 -  
549 - // 编辑圆监听事件  
550 - circle.addEventListener('dblclick',function() {  
551 -  
552 - // 关闭提示弹出层  
553 - layer.close(mindex);  
554 -  
555 - // 返回圆形的半径,单位为米。  
556 - var newRadius = circle.getRadius();  
557 -  
558 - // 返回圆形的中心点坐标。  
559 - var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;  
560 -  
561 - var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];  
562 -  
563 - /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */  
564 - EditStationObj.setEitdStationBJwpoints(newCenter);  
565 -  
566 - /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */  
567 - EditStationObj.setEitdStationShapesType('r');  
568 -  
569 - /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */  
570 - EditStationObj.setEitdStationRadius(Math.round(newRadius));  
571 -  
572 - /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */  
573 - EditStationObj.setEitdBPolygonGrid('');  
574 -  
575 - // 加载编辑页面  
576 - $.get('edit.html', function(m){  
577 -  
578 - $(pjaxContainer).append(m);  
579 -  
580 - $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap,GetAjaxData,EditStationObj,LineObj,PublicFunctions]);  
581 -  
582 - });  
583 -  
584 - });  
585 -  
586 - // 编辑多变行  
587 - }else if(stationShapesTypeV =='d') {  
588 -  
589 - // 开启编辑功能(自 1.1 新增)  
590 - polygon.enableEditing();  
591 -  
592 - // 添加多变行编辑事件  
593 - polygon.addEventListener('dblclick',function(e) {  
594 -  
595 - // 获取编辑的多边形对象  
596 - var edit_pointE = polygon;  
597 -  
598 - var edit_bPloygonGrid = "";  
599 -  
600 - var editPolyGonLen_ = edit_pointE.getPath().length;  
601 -  
602 - for(var k =0;k<editPolyGonLen_;k++) {  
603 -  
604 - if(k==0) {  
605 -  
606 - edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;  
607 -  
608 - }else {  
609 -  
610 - edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;  
611 -  
612 - }  
613 -  
614 - }  
615 -  
616 - edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;  
617 -  
618 - // 多边形中心点  
619 - var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;  
620 -  
621 - /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */  
622 - EditStationObj.setEitdStationBJwpoints(centre_points);  
623 -  
624 - /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */  
625 - EditStationObj.setEitdStationShapesType('d');  
626 -  
627 - /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */  
628 - EditStationObj.setEitdStationRadius('');  
629 -  
630 - /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */  
631 - EditStationObj.setEitdBPolygonGrid(edit_bPloygonGrid);  
632 -  
633 - $.get('edit.html', function(m){  
634 -  
635 - $(pjaxContainer).append(m);  
636 -  
637 - $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap,GetAjaxData,EditStationObj,LineObj,PublicFunctions]);  
638 -  
639 - });  
640 -  
641 - });  
642 -  
643 - }  
644 -  
645 - },  
646 -  
647 - // 在地图上画出上行线路走向  
648 - drawingUpline : function (polylineArray,polyline_center,data) {  
649 - /*WorldsBMap.clearMarkAndOverlays();*/  
650 - polyUpline = '';  
651 - // 创建线路走向  
652 - polyUpline = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});  
653 - // polyUpline.data = data;  
654 - // 把折线添加到地图上  
655 - mapBValue.addOverlay(polyUpline);  
656 - /*var ceter_index = Math.round(resultdata.length / 2);  
657 -  
658 - var ceterPointsStr = resultdata[ceter_index].bJwpoints;  
659 -  
660 - var ceterPointsArray = ceterPointsStr.split(' ');  
661 -  
662 - var polyline_center = new BMap.Point(ceterPointsArray[0],ceterPointsArray[1]);*/  
663 - var PanOptions_ ={noAnimation :true};  
664 - mapBValue.reset();  
665 - mapBValue.panTo(polyline_center,PanOptions_);  
666 - mapBValue.panBy(500,-510,PanOptions_);  
667 - mapBValue.setZoom(14);  
668 - },  
669 -  
670 - //在地图上画出公交位置。  
671 - drawingBus :function(lon,lat){  
672 - var point = new BMap.Point(lon,lat);  
673 - var myIcon = new BMap.Icon("/pages/excep/img/bus.png", new BMap.Size(300,157));  
674 - var marker = new BMap.Marker(point,{icon:myIcon}); // 创建标注  
675 - mapBValue.addOverlay(marker);  
676 - marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画  
677 - },  
678 -  
679 - // 在地图上画出上行线路走向  
680 - drawingUpline01 : function (polylineArray,polyline_center,data) {  
681 - var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;  
682 - // 创建线路走向  
683 - polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});  
684 - polyUpline01.data = data;  
685 - // 把折线添加到地图上  
686 - mapBValue.addOverlay(polyUpline01);  
687 - polyUpline01.addEventListener('click',function(e) {  
688 - if(WorldsBMap.getIsEditStatus()) {  
689 - layer.msg('请先保存正在编辑的路段信息...');  
690 - return false;  
691 - }  
692 - polyUpline01.enableEditing();  
693 - WorldsBMap.setIsEditStatus(true);  
694 - });  
695 - // 添加双击折线保存事件  
696 - polyUpline01.addEventListener('dblclick',function(e) {  
697 - WorldsBMap.setIsEditStatus(false);  
698 - // 关闭  
699 - layer.closeAll();  
700 - polyUpline01.disableEditing();  
701 - EditSectionObj.setEitdSection(polyUpline01.data);  
702 - // 获取折线坐标集合  
703 - var editPloyLineArray = polyUpline01.getPath();  
704 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
705 - // polyUpline= '';  
706 - // 加载修改路段弹出层mobal页面  
707 - $.get('editsection.html', function(m){  
708 - $(pjaxContainer).append(m);  
709 - $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,EditSectionObj,PublicFunctions]);  
710 - });  
711 - });  
712 - var PanOptions_ ={noAnimation :true};  
713 - mapBValue.reset();  
714 - mapBValue.panTo(polyline_center,PanOptions_);  
715 - mapBValue.panBy(500,-510,PanOptions_);  
716 - mapBValue.setZoom(14);  
717 - },  
718 -  
719 - /** 在地图上画点 @param:<point_center:中心坐标点> */  
720 - drawingUpStationPoint : function(point_center,stationName,s) {  
721 -  
722 - // 自定义标注物图片  
723 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));  
724 -  
725 - var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'  
726 - + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'  
727 - + '</div>'  
728 - + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';  
729 -  
730 -  
731 - var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{  
732 - "anchor" : new BMap.Size(-10,8),  
733 - "enableDragging" : true});  
734 -  
735 -  
736 - myRichMarker1.disableDragging();  
737 - mapBValue.addOverlay(myRichMarker1);  
738 -  
739 -  
740 - // 创建标注物  
741 - marker = new BMap.Marker(point_center,{icon : icon_target});  
742 -  
743 - // 允许覆盖物在map.clearOverlays方法中被清除。  
744 - marker.enableMassClear();  
745 -  
746 - mapBValue.addOverlay(marker);  
747 - },  
748 -  
749 - // 站点名称获取百度坐标(手动规划)  
750 - stationsNameToPoints : function(arra,callback) {  
751 - // 获取长度  
752 - var len = arra.length;  
753 - var stationList = [];  
754 - (function(){  
755 - if (!arguments.callee.count) {  
756 - arguments.callee.count = 0;  
757 - }  
758 - arguments.callee.count++;  
759 - var index = parseInt(arguments.callee.count) - 1;  
760 - if (index >= len) {  
761 - callback && callback(stationList);  
762 - return ;  
763 - }  
764 - var f = arguments.callee;  
765 - if(arra[index].name!=''){  
766 - var localSearch = new BMap.LocalSearch(mapBValue);  
767 - localSearch.search(arra[index].name);  
768 - localSearch.setSearchCompleteCallback(function (searchResult) {  
769 - var poi = searchResult.getPoi(0);  
770 - if(poi) {  
771 - stationList.push({name:arra[index].name.replace('公交车站',''),wgs:arra[index].wgs,potion:{lng:poi.point.lng,lat:poi.point.lat}});  
772 - }else {  
773 - stationList.push({name:arra[index].name.replace('公交车站',''),wgs:arra[index].wgs,potion:{lng:arra[index].wgs.x,lat:arra[index].wgs.y}});  
774 - }  
775 - f();  
776 - });  
777 - }else {  
778 - f();  
779 - }  
780 - })();  
781 - },  
782 -  
783 - // 根据坐标点获取两点之间的时间与距离(手动规划)  
784 - getDistanceAndTotime : function(stationList,cb) {  
785 -  
786 - stationList[0].distance = '';  
787 -  
788 - stationList[0].duration = '';  
789 -  
790 - // var sectionList = [];  
791 -  
792 - // 获取长度  
793 - var len = stationList.length;  
794 -  
795 - (function(){  
796 -  
797 - if (!arguments.callee.count) {  
798 -  
799 - arguments.callee.count = 0;  
800 -  
801 - }  
802 -  
803 - arguments.callee.count++;  
804 -  
805 - var index = parseInt(arguments.callee.count) - 1;  
806 -  
807 - if (index >= len-1) {  
808 -  
809 - // cb && cb(stationList,sectionList);  
810 - cb && cb(stationList);  
811 - return;  
812 - }  
813 -  
814 - var f = arguments.callee;  
815 -  
816 - var poiOne = new BMap.Point(stationList[index].potion.lng,stationList[index].potion.lat);  
817 -  
818 - var poiTwo = new BMap.Point(stationList[index+1].potion.lng,stationList[index+1].potion.lat);  
819 -  
820 - var transit = new BMap.TransitRoute(mapBValue, {renderOptions: {map: mapBValue},onSearchComplete: searchComplete});  
821 -  
822 - transit.search(poiOne,poiTwo);  
823 -  
824 - function searchComplete(results){  
825 -  
826 - var plan = results.getPlan(0);  
827 -  
828 - if (transit.getStatus() != BMAP_STATUS_SUCCESS){  
829 -  
830 - stationList[index+1].distance = '';  
831 -  
832 - stationList[index+1].duration = '';  
833 -  
834 - // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:''});  
835 -  
836 - }else {  
837 -  
838 - stationList[index+1].distance = plan.getDistance(true);  
839 -  
840 - stationList[index+1].duration = plan.getDuration(true);  
841 -  
842 - // var line = plan.getRoute(0);  
843 -  
844 - // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:line.getPath()});  
845 -  
846 - }  
847 -  
848 - f();  
849 - }  
850 -  
851 - })();  
852 -  
853 - },  
854 -  
855 - // 根据坐标点获取两点之间的折线路段(手动规划)  
856 - getSectionListPlonly : function(stationsPoint,cb) {  
857 -  
858 - var len = stationsPoint.length;  
859 -  
860 - var sectionList = [];  
861 -  
862 - (function(){  
863 -  
864 - if (!arguments.callee.count) {  
865 -  
866 - arguments.callee.count = 0;  
867 -  
868 - }  
869 -  
870 - arguments.callee.count++;  
871 -  
872 - var index = parseInt(arguments.callee.count) - 1;  
873 -  
874 - if (index >= len-1 ) {  
875 -  
876 - cb && cb(sectionList);  
877 - return;  
878 - }  
879 -  
880 - var f = arguments.callee;  
881 -  
882 - var poiOne = new BMap.Point(stationsPoint[index].potion.lng,stationsPoint[index].potion.lat);  
883 -  
884 - var poiTwo = new BMap.Point(stationsPoint[index+1].potion.lng,stationsPoint[index+1].potion.lat);  
885 -  
886 - /* var transit = new BMap.TransitRoute(mapB, {renderOptions: {map: mapB},onPolylinesSet: searchPolylinesSet});*/  
887 -  
888 - var transit = new BMap.DrivingRoute(mapBValue, {renderOptions: {map: mapBValue},onPolylinesSet: searchPolylinesSet});  
889 -  
890 - function searchPolylinesSet(results){  
891 -  
892 - if (transit.getStatus() != BMAP_STATUS_SUCCESS){  
893 -  
894 -  
895 - }else {  
896 -  
897 - var sectionArrayList = [];  
898 - for (i = 0; i < results.length; i++){  
899 -  
900 - // console.log(results[i].getPolyline().getPath());  
901 - sectionArrayList = sectionArrayList.concat(results[i].getPolyline().getPath());  
902 -  
903 - }  
904 -  
905 - var sectionName = stationsPoint[index].name + '至' + stationsPoint[index+1].name;  
906 -  
907 - sectionList.push({sectionName:sectionName,points:sectionArrayList});  
908 -  
909 - }  
910 -  
911 - f();  
912 - }  
913 -  
914 - transit.search(poiOne,poiTwo);  
915 -  
916 - })();  
917 -  
918 - },  
919 -  
920 - localtionPoint : function(stationNameV) {  
921 -  
922 - WorldsBMap.localSearchFromAdreesToPoint(stationNameV,function(Points) {  
923 -  
924 - if(Points) {  
925 -  
926 - var BJwpointsArray = Points.split(' ');  
927 -  
928 - var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);  
929 -  
930 - var marker_stargt2 = new BMap.Marker(stationNameChangePoint);  
931 -  
932 - var PanOptions ={noAnimation :true};  
933 -  
934 - mapBValue.panTo(stationNameChangePoint,PanOptions);  
935 -  
936 - mapBValue.panBy(0,-100);  
937 -  
938 - // 将标注添加到地图中  
939 - mapBValue.addOverlay(marker_stargt2);  
940 -  
941 - //跳动的动画  
942 - marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE);  
943 -  
944 - }  
945 -  
946 - });  
947 -  
948 - },  
949 -  
950 - /** 系统规划抓去数据 @param lineNameValue:线路名称;i:方向*/  
951 - getBmapStationNames : function(lineNameValue,i,callback) {  
952 -  
953 - var busline = new BMap.BusLineSearch(mapBValue,{  
954 -  
955 - // 设置公交列表查询后的回调函数。参数:rs: BusListResult类型  
956 - onGetBusListComplete:function(BusListResult) {  
957 -  
958 - // 如果不为空  
959 - if(BusListResult){  
960 -  
961 - //获取第一个公交列表显示到map上  
962 - var fstLine = BusListResult.getBusListItem(i);  
963 -  
964 - /*if(fstLine==undefined){  
965 -  
966 - layer.confirm('系统无法生成该线路【'+lineNameValue+'】的站点与路段!请点击返回选择其它方式规划', {btn : [ '返回' ],icon: 3, title:'提示' }, function(index){  
967 -  
968 - layer.closeAll();  
969 -  
970 - if(i==0){  
971 -  
972 - $('#upToolsMobal').show();  
973 -  
974 - }else if(i==1){  
975 -  
976 - $('#downToolsMobal').show();  
977 -  
978 - }  
979 -  
980 - return;  
981 - });  
982 -  
983 - }*/  
984 -  
985 - if(fstLine==undefined){  
986 -  
987 -  
988 - callback && callback(null);  
989 -  
990 - }  
991 -  
992 - busline.getBusLine(fstLine);  
993 -  
994 - }  
995 -  
996 - },  
997 -  
998 - //设置公交线路查询后的回调函数.参数:rs: BusLine类型  
999 - onGetBusLineComplete: function(BusLine){  
1000 -  
1001 - // 如果不为空  
1002 - if(BusLine){  
1003 -  
1004 - callback && callback(BusLine);  
1005 -  
1006 - }  
1007 -  
1008 - }  
1009 -  
1010 - });  
1011 -  
1012 - busline.getBusList(lineNameValue);  
1013 -  
1014 - },  
1015 -  
1016 - clearMarkAndOverlays : function() {  
1017 -  
1018 - // 清楚地图覆盖物  
1019 - mapBValue.clearOverlays();  
1020 -  
1021 - mapBValue.removeOverlay();  
1022 -  
1023 - }  
1024 -  
1025 - }  
1026 -  
1027 - return Bmap;  
1028 - 1 +/**
  2 + * 百度地图
  3 + *
  4 + * - - - - - -》init:地图初始化
  5 + *
  6 + * - - - - - -》lineInfoPanl:从百度地图抓去站点与路段数据
  7 + *
  8 + * - - - - - -》getDistanceAndDuration:获取距离与时间
  9 + *
  10 + * - - - - - -》pointsPolygon:地图画多边行
  11 + *
  12 + * - - - - - -》pointsCircle:画圆
  13 + *
  14 + * - - - - - -》localSearchFromAdreesToPoint:根据地理名称获取百度经纬度坐标
  15 + *
  16 + * - - - - - -》drawingUpline:在地图上画出上行线路走向
  17 + *
  18 + * - - - - - -》stationsNameToPoints:站点名称获取百度坐标(手动规划)
  19 + *
  20 + * - - - - - -》getDistanceAndTotime:根据坐标点获取两点之间的时间与距离(手动规划)
  21 + *
  22 + * - - - - - -》getSectionListPlonly:根据坐标点获取两点之间的折线路段(手动规划)
  23 + */
  24 +
  25 +var WorldsBMap = function () {
  26 +
  27 + /** WorldsBMap 全局变量定义 mapBValue:地图对象;polygon:多边形;polyUpline:走向折线;circle:圆 */
  28 + var mapBValue = '';polygon='',polyUpline='',circle='',iseditStatus = false;
  29 +
  30 + var Bmap = {
  31 +
  32 + init : function() {
  33 +
  34 + // 设置中心点,
  35 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};
  36 +
  37 + // 百度API Key
  38 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
  39 +
  40 + // 初始化百度地图
  41 + mapBValue = new BMap.Map("bmap_basic");
  42 +
  43 + //中心点和缩放级别
  44 + mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);
  45 +
  46 + //启用地图拖拽事件,默认启用(可不写)
  47 + mapBValue.enableDragging();
  48 +
  49 + //启用地图滚轮放大缩小
  50 + mapBValue.enableScrollWheelZoom();
  51 +
  52 + //禁用鼠标双击放大
  53 + mapBValue.disableDoubleClickZoom();
  54 +
  55 + //启用键盘上下左右键移动地图
  56 + mapBValue.enableKeyboard();
  57 +
  58 + return mapBValue;
  59 + },
  60 +
  61 + /** 获取地图对象 @return 地图对象map */
  62 + getmapBValue : function() {
  63 +
  64 + return mapBValue;
  65 +
  66 + },
  67 +
  68 + getPolygon : function(){
  69 +
  70 + return polygon;
  71 + },
  72 +
  73 + getPolyUpline : function() {
  74 +
  75 + return polyUpline;
  76 + },
  77 +
  78 + getCircle : function() {
  79 +
  80 + return circle;
  81 + },
  82 +
  83 + getIsEditStatus : function() {
  84 + return iseditStatus;
  85 + },
  86 +
  87 + setIsEditStatus : function(v) {
  88 + iseditStatus = v ;
  89 + },
  90 +
  91 + initDrawingManager: function(map,styleOptions) {
  92 +
  93 + },
  94 +
  95 + getDrawingManagerObj : function() {
  96 +
  97 + return drawingManagerInitV;
  98 + },
  99 +
  100 + // 从百度地图抓去站点与路段数据
  101 + lineInfoPanl : function(lineNameValue,i,cb) {
  102 +
  103 + /** 根据线路名称与方向从百度地图获取站点与路段 @param lineNameValue:线路名称;i:方向<0:上行;1:下行> */
  104 + WorldsBMap.getBmapStationNames(lineNameValue,i,function(BusLine){
  105 +
  106 + return cb && cb(BusLine);
  107 +
  108 + });
  109 +
  110 + },
  111 +
  112 + /** 获取距离与时间 @param <points:坐标点集合> */
  113 + getDistanceAndDuration : function(points,callback){
  114 +
  115 + // 获取长度
  116 + var len = points.length;
  117 +
  118 + (function(){
  119 +
  120 + if (!arguments.callee.count) {
  121 +
  122 + arguments.callee.count = 0;
  123 +
  124 + }
  125 +
  126 + arguments.callee.count++;
  127 +
  128 + var index = parseInt(arguments.callee.count) - 1;
  129 +
  130 + if (index >= len-1) {
  131 +
  132 + callback && callback(points);
  133 +
  134 + return;
  135 + }
  136 +
  137 + // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)
  138 + var f = arguments.callee;
  139 +
  140 + // 起点坐标 <坐标格式:40.056878,116.30815>
  141 + var origin = points[index].potion.lat + ',' + points[index].potion.lng;
  142 +
  143 + // 终点坐标 <坐标格式:40.056878,116.30815>
  144 + var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;
  145 +
  146 + var region = '上海';
  147 +
  148 + var origin_region = '上海';
  149 +
  150 + var destination_region = '上海';
  151 +
  152 + var output = 'json';
  153 +
  154 + var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';
  155 +
  156 + /**
  157 + * origin:起点名称或经纬度;
  158 + *
  159 + * destination:终点名称或经纬度;
  160 + *
  161 + * origin_region:起始点所在城市,驾车导航时必填。
  162 + *
  163 + * destination_region:终点所在城市,驾车导航时必填。
  164 + *
  165 + * output :表示输出类型,可设置为xml或json,默认为xml。
  166 + *
  167 + **/
  168 + var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};
  169 +
  170 + /** @description :未认证开发者默认配额为:2000次/天。 */
  171 + $.ajax({
  172 +
  173 + // 百度地图根据坐标获取两点之间的时间与距离
  174 + url: '//api.map.baidu.com/direction/v1?mode=transit',
  175 +
  176 + data: paramsB,
  177 +
  178 + dataType: 'jsonp',
  179 +
  180 + success: function(r){
  181 +
  182 + if(r) {
  183 +
  184 + if(r.message=='ok') {
  185 +
  186 + if(r.result.taxi==null) {
  187 +
  188 + // 获取距离(单位:米)
  189 + points[index+1].distance = 0;
  190 +
  191 + // 获取时间(单位:秒)
  192 + points[index+1].duration = 0;
  193 +
  194 + }else {
  195 +
  196 + // 获取距离(单位:米)
  197 + points[index+1].distance = r.result.taxi.distance;
  198 +
  199 + // 获取时间(单位:秒)
  200 + points[index+1].duration = r.result.taxi.duration;
  201 +
  202 + }
  203 +
  204 +
  205 + }
  206 +
  207 + }
  208 +
  209 + f();
  210 + }
  211 + });
  212 +
  213 + })();
  214 +
  215 + },
  216 +
  217 + // 地图画多边形
  218 + pointsPolygon : function(objStation) {
  219 +
  220 + // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)
  221 + mapBValue.setZoom(15);
  222 +
  223 + // 如果不为空
  224 + if(objStation) {
  225 +
  226 + // 获取中心点坐标字符串
  227 + var testpointStr = objStation.stationBJwpoints;
  228 +
  229 + // 按空格切割中心点坐标字符串
  230 + var BJwpointsPolygon = testpointStr.split(' ');
  231 +
  232 + // 中心点坐标
  233 + var pointPolygon = new BMap.Point(BJwpointsPolygon[0], BJwpointsPolygon[1]);
  234 +
  235 + // 获取多边形坐标字符串
  236 + var stationBPolygonGrid = objStation.stationBPolygonGrid;
  237 +
  238 + // 截取多边形坐标字符串
  239 + var stationBPolygonGridStr = stationBPolygonGrid.substring(9,stationBPolygonGrid.length-2);
  240 +
  241 + // 按逗号切割
  242 + var pointPolygonArray = stationBPolygonGridStr.split(',');
  243 +
  244 + // 多边形坐标集合
  245 + var polygonP = [];
  246 +
  247 + for(var v = 0;v<pointPolygonArray.length;v++) {
  248 +
  249 + polygonP.push(new BMap.Point(pointPolygonArray[v].split(" ")[0],pointPolygonArray[v].split(" ")[1]));
  250 +
  251 + }
  252 +
  253 + // 画多边形
  254 + polygon = new BMap.Polygon(polygonP, {
  255 +
  256 + // 线条显色
  257 + strokeColor : "blue",
  258 +
  259 + // 边线的宽度,以像素为单位。
  260 + strokeWeight : 2,
  261 +
  262 + // 边线透明度,取值范围0 - 1。
  263 + strokeOpacity : 0.5
  264 + });
  265 +
  266 + // 增加地图覆盖物多边形
  267 + mapBValue.addOverlay(polygon);
  268 +
  269 + // 信息窗口属性
  270 + var opts_polygon = {
  271 +
  272 + // 信息窗口宽度
  273 + width : 200,
  274 +
  275 + // 信息窗口高度
  276 + height : 400,
  277 +
  278 + // 信息窗位置偏移值。
  279 + offset: new BMap.Size(500,20),
  280 +
  281 + //标题
  282 + title : '<h4 style="color:#FFFFFF">'+objStation.stationStationName+'站详情</h4>',
  283 +
  284 + //设置不允许信窗发送短息
  285 + enableMessage : false,
  286 +
  287 + //是否开启点击地图关闭信息窗口
  288 + enableCloseOnClick : false
  289 + };
  290 +
  291 + var markTypeStr = '';
  292 +
  293 + if(objStation.stationRouteStationMark=='B') {
  294 +
  295 + markTypeStr='起点站';
  296 +
  297 + }else if(objStation.stationRouteStationMark=='Z') {
  298 +
  299 + markTypeStr ='中途站';
  300 +
  301 +
  302 + }else if(objStation.stationRouteStationMark=='E') {
  303 +
  304 + markTypeStr='终点站';
  305 +
  306 + }
  307 +
  308 + var htm = '<HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1>'+
  309 + '<span style="color:#DDD;font-size: 15px;">站点名称:' + objStation.stationStationName + '</span>' +
  310 + '<span class="help-block" style="color:#DDD;font-size: 15px;">站点编码:' + objStation.stationStationCod + '</span>' +
  311 + '<span class="help-block" style="color:#DDD;font-size: 15px;">站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +
  312 + '<span class="help-block" style="color:#DDD;font-size: 15px;">站点类型:' + markTypeStr + '</span>' +
  313 + '<span class="help-block" style="color:#DDD;font-size: 15px;">纬度坐标:' + objStation.stationBJwpoints + '</span>' +
  314 + '<span class="help-block" style="color:#DDD;font-size: 15px;">到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +
  315 + '<span class="help-block" style="color:#DDD;font-size: 15px;">到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +
  316 + '<span class="help-block" style="color:#DDD;font-size: 15px;">范围半径:' + objStation.stationRadius + '</span>' +
  317 + '<span class="help-block" style="color:#DDD;font-size: 15px;">版本 号:' + objStation.stationRouteVersions + '</span>' +
  318 + '<span class="help-block" style="width: 100%;font-size: 15px;;color:#DDD;'+
  319 + 'overflow: hidden; white-space: nowrap; text-overflow: ellipsis; " title="'+
  320 + objStation.stationRouteDescriptions +'" >说明/描述:' + objStation.stationRouteDescriptions + '</span>' ;
  321 +
  322 + // 创建信息窗口
  323 + var infoWindow_target = new BMap.InfoWindow(htm, opts_polygon);
  324 + // 自定义标注物图片
  325 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));
  326 +
  327 + // 创建点
  328 + marker = new BMap.Marker(pointPolygon,{icon : icon_target});
  329 +
  330 + // 把标注添物加到地图上
  331 + mapBValue.addOverlay(marker);
  332 +
  333 + // 是否在平移过程中禁止动画。(自1.2新增)
  334 + var PanOptions_ ={noAnimation :true};
  335 +
  336 + // 将地图的中心点更改为给定的点。
  337 + mapBValue.panTo(pointPolygon,PanOptions_);
  338 +
  339 + // 将地图在水平位置上移动x像素,垂直位置上移动y像素。
  340 + mapBValue.panBy(10,-150,PanOptions_);
  341 +
  342 + //开启信息窗口
  343 + mapBValue.openInfoWindow(infoWindow_target,pointPolygon);
  344 +
  345 + }
  346 +
  347 + },
  348 +
  349 + editPolyUpline : function() {
  350 + // 禁止覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)
  351 + polyUpline.disableMassClear();
  352 + WorldsBMap.clearMarkAndOverlays();
  353 + // 允许覆盖物在map.clearOverlays方法中被清除。(自 1.1 新增)
  354 + polyUpline.enableMassClear();
  355 + // 开启线路编辑
  356 + polyUpline.enableEditing();
  357 + // 添加双击折线保存事件
  358 + polyUpline.addEventListener('dblclick',function(e) {
  359 + // 关闭
  360 + layer.closeAll();
  361 + polyUpline.disableEditing();
  362 + // 获取折线坐标集合
  363 + var editPloyLineArray = polyUpline.getPath();
  364 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  365 + polyUpline= '';
  366 + // 加载修改路段弹出层mobal页面
  367 + $.get('editsection.html', function(m){
  368 + $(pjaxContainer).append(m);
  369 + $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,EditSectionObj,PublicFunctions]);
  370 + });
  371 + });
  372 + },
  373 +
  374 + // 画圆
  375 + pointsCircle : function(objStation) {
  376 +
  377 + // 将视图切换到指定的缩放等级,中心点坐标不变。注意:当有信息窗口在地图上打开时,地图缩放将保证信息窗口所在的坐标位置不动。(自1.2新增)
  378 + mapBValue.setZoom(16);
  379 +
  380 + if(objStation) {
  381 +
  382 + // 清除地图覆盖物
  383 + mapBValue.clearOverlays();
  384 +
  385 + // 获取中心坐标点字符串分割
  386 + var BJwpoints = objStation.stationBJwpoints.split(' ');
  387 +
  388 + // 中心坐标点
  389 + var point = new BMap.Point(BJwpoints[0], BJwpoints[1]);
  390 +
  391 + //创建圆
  392 + circle = new BMap.Circle(point,objStation.stationRadius,{strokeColor:"blue", strokeWeight:2, strokeOpacity:0.5});
  393 +
  394 + // 允许覆盖物在map.clearOverlays方法中被清除
  395 + circle.enableMassClear();
  396 +
  397 + // 百度地图添加覆盖物圆
  398 + mapBValue.addOverlay(circle);
  399 +
  400 + // 信息窗口参数属性
  401 + var opts = {
  402 +
  403 + // 信息窗口宽度
  404 + width : 200,
  405 +
  406 + // 信息窗口高度
  407 + height : 450,
  408 +
  409 + // 信息窗位置偏移值。
  410 + offset: new BMap.Size(500,120),
  411 +
  412 + //标题
  413 + title : '<h4 style="color:#FFFFFF">'+objStation.stationStationName+'站详情</h4>',
  414 +
  415 + //设置不允许信窗发送短息
  416 + enableMessage : false,
  417 +
  418 + //是否开启点击地图关闭信息窗口
  419 + enableCloseOnClick : false,
  420 +
  421 + // 是否开启信息窗口打开时地图自动移动(默认开启)。(自 1.1 新增)
  422 + enableAutoPan:false
  423 + };
  424 +
  425 + var markTypeStr = '';
  426 +
  427 + if(objStation.stationRouteStationMark=='B') {
  428 +
  429 + markTypeStr='起点站';
  430 +
  431 + }else if(objStation.stationRouteStationMark=='Z') {
  432 +
  433 + markTypeStr ='中途站';
  434 +
  435 +
  436 + }else if(objStation.stationRouteStationMark=='E') {
  437 +
  438 + markTypeStr='终点站';
  439 +
  440 + }
  441 +
  442 + var htm = '<HR style="border:1 dashed #987cb9" width="100%" color=#987cb9 SIZE=1>'+
  443 + '<span style="color:#DDD;font-size: 15px;">站点名称:' + objStation.stationStationName + '</span>' +
  444 + '<span class="help-block" style="color:#DDD;font-size: 15px;">站点编码:' + objStation.stationStationCod + '</span>' +
  445 + '<span class="help-block" style="color:#DDD;font-size: 15px;">站点序号:' + objStation.stationRouteStationRouteCode + '</span>' +
  446 + '<span class="help-block" style="color:#DDD;font-size: 15px;">站点类型:' + markTypeStr + '</span>' +
  447 + '<span class="help-block" style="color:#DDD;font-size: 15px;">纬度坐标:' + objStation.stationBJwpoints + '</span>' +
  448 + '<span class="help-block" style="color:#DDD;font-size: 15px;">到站时间:' + objStation.stationRouteToTime + '&nbsp;分钟</span>' +
  449 + '<span class="help-block" style="color:#DDD;font-size: 15px;">到站距离:' + objStation.stationRouteDistances + '&nbsp;公里</span>' +
  450 + '<span class="help-block" style="color:#DDD;font-size: 15px;">范围半径:' + objStation.stationRadius + '</span>' +
  451 + '<span class="help-block" style="color:#DDD;font-size: 15px;">版本 号:' + objStation.stationRouteVersions + '</span>' +
  452 + '<span class="help-block" style="width: 100%;font-size: 15px;;color:#DDD;'+
  453 + 'overflow: hidden; white-space: nowrap; text-overflow: ellipsis; " title="'+
  454 + objStation.stationRouteDescriptions +'" >说明/描述:' + objStation.stationRouteDescriptions + '</span>' ;
  455 +
  456 + // 创建信息窗口
  457 + var infoWindow_target = new BMap.InfoWindow(htm, opts);
  458 + // 自定义标注物图片
  459 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/cz.png',new BMap.Size(20, 20));
  460 +
  461 + // 创建点
  462 + marker = new BMap.Marker(point,{icon : icon_target});
  463 +
  464 + // 把标注添物加到地图上
  465 + mapBValue.addOverlay(marker);
  466 +
  467 + setTimeout(function(){
  468 + //开启信息窗口
  469 + marker.openInfoWindow(infoWindow_target,point);
  470 +
  471 + },100);
  472 +
  473 + // 是否在平移过程中禁止动画。(自1.2新增)
  474 + var PanOptions_ ={noAnimation :true};
  475 +
  476 + // 将地图的中心点更改为给定的点。
  477 + mapBValue.panTo(point,PanOptions_);
  478 +
  479 + mapBValue.panBy(10,-200,PanOptions_);
  480 +
  481 + // 添加标志物监听事件
  482 + marker.addEventListener("click",function() {
  483 +
  484 + //开启信息窗口
  485 + marker.openInfoWindow(infoWindow_target,point);
  486 +
  487 + });
  488 +
  489 + }
  490 +
  491 + },
  492 +
  493 + // 根据地理名称获取百度经纬度坐标
  494 + localSearchFromAdreesToPoint: function(Address,callback) {
  495 +
  496 + // 创建一个搜索类实例
  497 + var localSearch = new BMap.LocalSearch(mapBValue);
  498 +
  499 + // 检索完成后的回调函数。
  500 + localSearch.setSearchCompleteCallback(function (searchResult) {
  501 +
  502 + var resultPoints = '';
  503 +
  504 + if(searchResult) {
  505 +
  506 + // 返回索引指定的结果。索引0表示第1条结果
  507 + var poi = searchResult.getPoi(0);
  508 +
  509 + if(poi) {
  510 +
  511 + //获取经度和纬度
  512 + resultPoints = poi.point.lng + ' ' + poi.point.lat;
  513 +
  514 + callback && callback(resultPoints);
  515 +
  516 + }else {
  517 +
  518 + callback && callback(false);
  519 +
  520 + }
  521 +
  522 + }else {
  523 +
  524 + callback && callback(false);
  525 + }
  526 +
  527 + });
  528 +
  529 + // 根据检索词发起检索。
  530 + localSearch.search(Address);
  531 +
  532 + },
  533 +
  534 + // 编辑图形
  535 + editShapes : function(editStationName,stationShapesTypeV,mindex) {
  536 +
  537 + // 关闭信息窗口
  538 + marker.closeInfoWindow();
  539 +
  540 + // 清除marker
  541 + mapBValue.removeOverlay(marker);
  542 +
  543 + // 编辑圆
  544 + if(stationShapesTypeV =='r') {
  545 +
  546 + // 开启编辑功能
  547 + circle.enableEditing();
  548 +
  549 + // 编辑圆监听事件
  550 + circle.addEventListener('dblclick',function() {
  551 +
  552 + // 关闭提示弹出层
  553 + layer.close(mindex);
  554 +
  555 + // 返回圆形的半径,单位为米。
  556 + var newRadius = circle.getRadius();
  557 +
  558 + // 返回圆形的中心点坐标。
  559 + var newCenter = circle.getCenter().lng + ' ' + circle.getCenter().lat;
  560 +
  561 + var centre_New = [{potion:{lng:circle.getCenter().lng,lat:circle.getCenter().lat}}];
  562 +
  563 + /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
  564 + EditStationObj.setEitdStationBJwpoints(newCenter);
  565 +
  566 + /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
  567 + EditStationObj.setEitdStationShapesType('r');
  568 +
  569 + /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */
  570 + EditStationObj.setEitdStationRadius(Math.round(newRadius));
  571 +
  572 + /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */
  573 + EditStationObj.setEitdBPolygonGrid('');
  574 +
  575 + // 加载编辑页面
  576 + $.get('edit.html', function(m){
  577 +
  578 + $(pjaxContainer).append(m);
  579 +
  580 + $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap,GetAjaxData,EditStationObj,LineObj,PublicFunctions]);
  581 +
  582 + });
  583 +
  584 + });
  585 +
  586 + // 编辑多变行
  587 + }else if(stationShapesTypeV =='d') {
  588 +
  589 + // 开启编辑功能(自 1.1 新增)
  590 + polygon.enableEditing();
  591 +
  592 + // 添加多变行编辑事件
  593 + polygon.addEventListener('dblclick',function(e) {
  594 +
  595 + // 获取编辑的多边形对象
  596 + var edit_pointE = polygon;
  597 +
  598 + var edit_bPloygonGrid = "";
  599 +
  600 + var editPolyGonLen_ = edit_pointE.getPath().length;
  601 +
  602 + for(var k =0;k<editPolyGonLen_;k++) {
  603 +
  604 + if(k==0) {
  605 +
  606 + edit_bPloygonGrid = edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
  607 +
  608 + }else {
  609 +
  610 + edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[k].lng + ' ' + edit_pointE.getPath()[k].lat;
  611 +
  612 + }
  613 +
  614 + }
  615 +
  616 + edit_bPloygonGrid = edit_bPloygonGrid + ',' + edit_pointE.getPath()[0].lng + ' ' + edit_pointE.getPath()[0].lat;
  617 +
  618 + // 多边形中心点
  619 + var centre_points = edit_pointE.getBounds().getCenter().lng + ' ' + edit_pointE.getBounds().getCenter().lat;
  620 +
  621 + /** 设置修改站点集合对象站点中心点百度坐标属性值 @param:<bJwpoints:中心点百度坐标) */
  622 + EditStationObj.setEitdStationBJwpoints(centre_points);
  623 +
  624 + /** 设置修改站点集合对象范围图形类型属性值 @param:<shapesType:范围图形类型) */
  625 + EditStationObj.setEitdStationShapesType('d');
  626 +
  627 + /** 设置修改站点集合对象圆形半径属性值 @param:<radius:圆形半径) */
  628 + EditStationObj.setEitdStationRadius('');
  629 +
  630 + /** 设置修改站点集合对象图形百度坐标集合属性值 @param:<bPolygonGrid:图形百度坐标集合) */
  631 + EditStationObj.setEitdBPolygonGrid(edit_bPloygonGrid);
  632 +
  633 + $.get('edit.html', function(m){
  634 +
  635 + $(pjaxContainer).append(m);
  636 +
  637 + $('#edit_station_mobal').trigger('editSelectMobal_show', [WorldsBMap,GetAjaxData,EditStationObj,LineObj,PublicFunctions]);
  638 +
  639 + });
  640 +
  641 + });
  642 +
  643 + }
  644 +
  645 + },
  646 +
  647 + // 在地图上画出上行线路走向
  648 + drawingUpline : function (polylineArray,polyline_center,data) {
  649 + /*WorldsBMap.clearMarkAndOverlays();*/
  650 + polyUpline = '';
  651 + // 创建线路走向
  652 + polyUpline = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});
  653 + // polyUpline.data = data;
  654 + // 把折线添加到地图上
  655 + mapBValue.addOverlay(polyUpline);
  656 + /*var ceter_index = Math.round(resultdata.length / 2);
  657 +
  658 + var ceterPointsStr = resultdata[ceter_index].bJwpoints;
  659 +
  660 + var ceterPointsArray = ceterPointsStr.split(' ');
  661 +
  662 + var polyline_center = new BMap.Point(ceterPointsArray[0],ceterPointsArray[1]);*/
  663 + var PanOptions_ ={noAnimation :true};
  664 + mapBValue.reset();
  665 + mapBValue.panTo(polyline_center,PanOptions_);
  666 + mapBValue.panBy(500,-510,PanOptions_);
  667 + mapBValue.setZoom(14);
  668 + },
  669 +
  670 + //在地图上画出公交位置。
  671 + drawingBus :function(lon,lat){
  672 + var point = new BMap.Point(lon,lat);
  673 + var myIcon = new BMap.Icon("/pages/excep/img/bus.png", new BMap.Size(300,157));
  674 + var marker = new BMap.Marker(point,{icon:myIcon}); // 创建标注
  675 + mapBValue.addOverlay(marker);
  676 + marker.setAnimation(BMAP_ANIMATION_BOUNCE); //跳动的动画
  677 + },
  678 +
  679 + // 在地图上画出上行线路走向
  680 + drawingUpline01 : function (polylineArray,polyline_center,data) {
  681 + var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;
  682 + // 创建线路走向
  683 + polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});
  684 + polyUpline01.data = data;
  685 + // 把折线添加到地图上
  686 + mapBValue.addOverlay(polyUpline01);
  687 + polyUpline01.addEventListener('click',function(e) {
  688 + if(WorldsBMap.getIsEditStatus()) {
  689 + layer.msg('请先保存正在编辑的路段信息...');
  690 + return false;
  691 + }
  692 + polyUpline01.enableEditing();
  693 + WorldsBMap.setIsEditStatus(true);
  694 + });
  695 + // 添加双击折线保存事件
  696 + polyUpline01.addEventListener('dblclick',function(e) {
  697 + WorldsBMap.setIsEditStatus(false);
  698 + // 关闭
  699 + layer.closeAll();
  700 + polyUpline01.disableEditing();
  701 + EditSectionObj.setEitdSection(polyUpline01.data);
  702 + // 获取折线坐标集合
  703 + var editPloyLineArray = polyUpline01.getPath();
  704 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  705 + // polyUpline= '';
  706 + // 加载修改路段弹出层mobal页面
  707 + $.get('editsection.html', function(m){
  708 + $(pjaxContainer).append(m);
  709 + $('#edit_section_mobal').trigger('editSectionMobal_show', [WorldsBMap,GetAjaxData,EditSectionObj,PublicFunctions]);
  710 + });
  711 + });
  712 + var PanOptions_ ={noAnimation :true};
  713 + mapBValue.reset();
  714 + mapBValue.panTo(polyline_center,PanOptions_);
  715 + mapBValue.panBy(500,-510,PanOptions_);
  716 + mapBValue.setZoom(14);
  717 + },
  718 +
  719 + /** 在地图上画点 @param:<point_center:中心坐标点> */
  720 + drawingUpStationPoint : function(point_center,stationName,s) {
  721 +
  722 + // 自定义标注物图片
  723 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));
  724 +
  725 + var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'
  726 + + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'
  727 + + '</div>'
  728 + + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';
  729 +
  730 +
  731 + var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{
  732 + "anchor" : new BMap.Size(-10,8),
  733 + "enableDragging" : true});
  734 +
  735 +
  736 + myRichMarker1.disableDragging();
  737 + mapBValue.addOverlay(myRichMarker1);
  738 +
  739 +
  740 + // 创建标注物
  741 + marker = new BMap.Marker(point_center,{icon : icon_target});
  742 +
  743 + // 允许覆盖物在map.clearOverlays方法中被清除。
  744 + marker.enableMassClear();
  745 +
  746 + mapBValue.addOverlay(marker);
  747 + },
  748 +
  749 + // 站点名称获取百度坐标(手动规划)
  750 + stationsNameToPoints : function(arra,callback) {
  751 + // 获取长度
  752 + var len = arra.length;
  753 + var stationList = [];
  754 + (function(){
  755 + if (!arguments.callee.count) {
  756 + arguments.callee.count = 0;
  757 + }
  758 + arguments.callee.count++;
  759 + var index = parseInt(arguments.callee.count) - 1;
  760 + if (index >= len) {
  761 + callback && callback(stationList);
  762 + return ;
  763 + }
  764 + var f = arguments.callee;
  765 + if(arra[index].name!=''){
  766 + var localSearch = new BMap.LocalSearch(mapBValue);
  767 + localSearch.search(arra[index].name);
  768 + localSearch.setSearchCompleteCallback(function (searchResult) {
  769 + var poi = searchResult.getPoi(0);
  770 + if(poi) {
  771 + stationList.push({name:arra[index].name.replace('公交车站',''),wgs:arra[index].wgs,potion:{lng:poi.point.lng,lat:poi.point.lat}});
  772 + }else {
  773 + stationList.push({name:arra[index].name.replace('公交车站',''),wgs:arra[index].wgs,potion:{lng:arra[index].wgs.x,lat:arra[index].wgs.y}});
  774 + }
  775 + f();
  776 + });
  777 + }else {
  778 + f();
  779 + }
  780 + })();
  781 + },
  782 +
  783 + // 根据坐标点获取两点之间的时间与距离(手动规划)
  784 + getDistanceAndTotime : function(stationList,cb) {
  785 +
  786 + stationList[0].distance = '';
  787 +
  788 + stationList[0].duration = '';
  789 +
  790 + // var sectionList = [];
  791 +
  792 + // 获取长度
  793 + var len = stationList.length;
  794 +
  795 + (function(){
  796 +
  797 + if (!arguments.callee.count) {
  798 +
  799 + arguments.callee.count = 0;
  800 +
  801 + }
  802 +
  803 + arguments.callee.count++;
  804 +
  805 + var index = parseInt(arguments.callee.count) - 1;
  806 +
  807 + if (index >= len-1) {
  808 +
  809 + // cb && cb(stationList,sectionList);
  810 + cb && cb(stationList);
  811 + return;
  812 + }
  813 +
  814 + var f = arguments.callee;
  815 +
  816 + var poiOne = new BMap.Point(stationList[index].potion.lng,stationList[index].potion.lat);
  817 +
  818 + var poiTwo = new BMap.Point(stationList[index+1].potion.lng,stationList[index+1].potion.lat);
  819 +
  820 + var transit = new BMap.TransitRoute(mapBValue, {renderOptions: {map: mapBValue},onSearchComplete: searchComplete});
  821 +
  822 + transit.search(poiOne,poiTwo);
  823 +
  824 + function searchComplete(results){
  825 +
  826 + var plan = results.getPlan(0);
  827 +
  828 + if (transit.getStatus() != BMAP_STATUS_SUCCESS){
  829 +
  830 + stationList[index+1].distance = '';
  831 +
  832 + stationList[index+1].duration = '';
  833 +
  834 + // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:''});
  835 +
  836 + }else {
  837 +
  838 + stationList[index+1].distance = plan.getDistance(true);
  839 +
  840 + stationList[index+1].duration = plan.getDuration(true);
  841 +
  842 + // var line = plan.getRoute(0);
  843 +
  844 + // sectionList.push({sectionName:stationList[index].name+stationList[index+1].name,points:line.getPath()});
  845 +
  846 + }
  847 +
  848 + f();
  849 + }
  850 +
  851 + })();
  852 +
  853 + },
  854 +
  855 + // 根据坐标点获取两点之间的折线路段(手动规划)
  856 + getSectionListPlonly : function(stationsPoint,cb) {
  857 +
  858 + var len = stationsPoint.length;
  859 +
  860 + var sectionList = [];
  861 +
  862 + (function(){
  863 +
  864 + if (!arguments.callee.count) {
  865 +
  866 + arguments.callee.count = 0;
  867 +
  868 + }
  869 +
  870 + arguments.callee.count++;
  871 +
  872 + var index = parseInt(arguments.callee.count) - 1;
  873 +
  874 + if (index >= len-1 ) {
  875 +
  876 + cb && cb(sectionList);
  877 + return;
  878 + }
  879 +
  880 + var f = arguments.callee;
  881 +
  882 + var poiOne = new BMap.Point(stationsPoint[index].potion.lng,stationsPoint[index].potion.lat);
  883 +
  884 + var poiTwo = new BMap.Point(stationsPoint[index+1].potion.lng,stationsPoint[index+1].potion.lat);
  885 +
  886 + /* var transit = new BMap.TransitRoute(mapB, {renderOptions: {map: mapB},onPolylinesSet: searchPolylinesSet});*/
  887 +
  888 + var transit = new BMap.DrivingRoute(mapBValue, {renderOptions: {map: mapBValue},onPolylinesSet: searchPolylinesSet});
  889 +
  890 + function searchPolylinesSet(results){
  891 +
  892 + if (transit.getStatus() != BMAP_STATUS_SUCCESS){
  893 +
  894 +
  895 + }else {
  896 +
  897 + var sectionArrayList = [];
  898 + for (i = 0; i < results.length; i++){
  899 +
  900 + // console.log(results[i].getPolyline().getPath());
  901 + sectionArrayList = sectionArrayList.concat(results[i].getPolyline().getPath());
  902 +
  903 + }
  904 +
  905 + var sectionName = stationsPoint[index].name + '至' + stationsPoint[index+1].name;
  906 +
  907 + sectionList.push({sectionName:sectionName,points:sectionArrayList});
  908 +
  909 + }
  910 +
  911 + f();
  912 + }
  913 +
  914 + transit.search(poiOne,poiTwo);
  915 +
  916 + })();
  917 +
  918 + },
  919 +
  920 + localtionPoint : function(stationNameV) {
  921 +
  922 + WorldsBMap.localSearchFromAdreesToPoint(stationNameV,function(Points) {
  923 +
  924 + if(Points) {
  925 +
  926 + var BJwpointsArray = Points.split(' ');
  927 +
  928 + var stationNameChangePoint = new BMap.Point(BJwpointsArray[0], BJwpointsArray[1]);
  929 +
  930 + var marker_stargt2 = new BMap.Marker(stationNameChangePoint);
  931 +
  932 + var PanOptions ={noAnimation :true};
  933 +
  934 + mapBValue.panTo(stationNameChangePoint,PanOptions);
  935 +
  936 + mapBValue.panBy(0,-100);
  937 +
  938 + // 将标注添加到地图中
  939 + mapBValue.addOverlay(marker_stargt2);
  940 +
  941 + //跳动的动画
  942 + marker_stargt2.setAnimation(BMAP_ANIMATION_BOUNCE);
  943 +
  944 + }
  945 +
  946 + });
  947 +
  948 + },
  949 +
  950 + /** 系统规划抓去数据 @param lineNameValue:线路名称;i:方向*/
  951 + getBmapStationNames : function(lineNameValue,i,callback) {
  952 +
  953 + var busline = new BMap.BusLineSearch(mapBValue,{
  954 +
  955 + // 设置公交列表查询后的回调函数。参数:rs: BusListResult类型
  956 + onGetBusListComplete:function(BusListResult) {
  957 +
  958 + // 如果不为空
  959 + if(BusListResult){
  960 +
  961 + //获取第一个公交列表显示到map上
  962 + var fstLine = BusListResult.getBusListItem(i);
  963 +
  964 + /*if(fstLine==undefined){
  965 +
  966 + layer.confirm('系统无法生成该线路【'+lineNameValue+'】的站点与路段!请点击返回选择其它方式规划', {btn : [ '返回' ],icon: 3, title:'提示' }, function(index){
  967 +
  968 + layer.closeAll();
  969 +
  970 + if(i==0){
  971 +
  972 + $('#upToolsMobal').show();
  973 +
  974 + }else if(i==1){
  975 +
  976 + $('#downToolsMobal').show();
  977 +
  978 + }
  979 +
  980 + return;
  981 + });
  982 +
  983 + }*/
  984 +
  985 + if(fstLine==undefined){
  986 +
  987 +
  988 + callback && callback(null);
  989 +
  990 + }
  991 +
  992 + busline.getBusLine(fstLine);
  993 +
  994 + }
  995 +
  996 + },
  997 +
  998 + //设置公交线路查询后的回调函数.参数:rs: BusLine类型
  999 + onGetBusLineComplete: function(BusLine){
  1000 +
  1001 + // 如果不为空
  1002 + if(BusLine){
  1003 +
  1004 + callback && callback(BusLine);
  1005 +
  1006 + }
  1007 +
  1008 + }
  1009 +
  1010 + });
  1011 +
  1012 + busline.getBusList(lineNameValue);
  1013 +
  1014 + },
  1015 +
  1016 + clearMarkAndOverlays : function() {
  1017 +
  1018 + // 清楚地图覆盖物
  1019 + mapBValue.clearOverlays();
  1020 +
  1021 + mapBValue.removeOverlay();
  1022 +
  1023 + }
  1024 +
  1025 + }
  1026 +
  1027 + return Bmap;
  1028 +
1029 }(); 1029 }();
1030 \ No newline at end of file 1030 \ No newline at end of file
src/main/resources/static/pages/excep/js/speeding-map.js
1 -/**  
2 - * 百度地图  
3 - *  
4 - * - - - - - -》init:地图初始化  
5 - *  
6 - * - - - - - -》getDistanceAndDuration:获取距离与时间  
7 - *  
8 - * - - - - - -》drawingUpline:在地图上画出上行线路走向  
9 - *  
10 - * - - - - - -》stationsPointsToLibraryPoint:根据站点坐标匹配库中的公交站点(手动规划)  
11 - */  
12 -  
13 -var SpeedingMap = function () {  
14 -  
15 - /** SpeedingMap 全局变量定义 mapBValue:地图对象;polyUpline:走向折线;sectionList:截取过的路段 ;pointIndex:计算路段被切的次数;  
16 - * firstPoint:截取路段的第一个点;iseditStatus:路段是否在编辑状态;isCutSection : 获取路段是否在截取状态*/  
17 - var mapBValue = '', polyUpline='', sectionList = [], pointIndex = 0, iseditStatus = false, firstPoint = {}, isCutSection = false;  
18 -  
19 - var Bmap = {  
20 -  
21 - init : function() {  
22 -  
23 - // 设置中心点,  
24 - var CENTER_POINT = {lng : 121.528733,lat : 31.237425};  
25 -  
26 - // 百度API Key  
27 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
28 -  
29 - // 初始化百度地图  
30 - mapBValue = new BMap.Map("speedingMap");  
31 -  
32 - //中心点和缩放级别  
33 - mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat),15);  
34 -  
35 - //启用地图拖拽事件,默认启用(可不写)  
36 - mapBValue.enableDragging();  
37 -  
38 - //启用地图滚轮放大缩小  
39 - mapBValue.enableScrollWheelZoom();  
40 -  
41 - //禁用鼠标双击放大  
42 - mapBValue.disableDoubleClickZoom();  
43 -  
44 - //启用键盘上下左右键移动地图  
45 - mapBValue.enableKeyboard();  
46 -  
47 - return mapBValue;  
48 - },  
49 - /** 获取第一个切路段的点 @return Point*/  
50 - getFirstPoint : function() {  
51 - return firstPoint;  
52 - },  
53 - /** 获取地图对象 @return 地图对象map */  
54 - getmapBValue : function() {  
55 -  
56 - return mapBValue;  
57 -  
58 - },  
59 -  
60 - getPolyUpline : function() {  
61 -  
62 - return polyUpline;  
63 - },  
64 -  
65 - /** 获取截取过的路段 @return 路段对象List */  
66 - getSectionList : function() {  
67 -  
68 - return sectionList;  
69 -  
70 - },  
71 - setSectionList : function(list) {  
72 -  
73 - sectionList = list;  
74 - },  
75 - initCutSectionPoint : function() {  
76 - sectionList = [];  
77 - var tbodyHtml = template('section_list',{list : sectionList});  
78 - $('#section_table tbody').html(tbodyHtml);  
79 - },  
80 - /** 获取切路段的点下标 @return int*/  
81 - setPointIndex : function(index) {  
82 - pointIndex = index;  
83 - },  
84 - getPointIndex : function() {  
85 -  
86 - return pointIndex;  
87 -  
88 - },  
89 - /** 获取路段是否在编辑状态 @return boolean*/  
90 - getIsEditStatus : function() {  
91 - return iseditStatus;  
92 - },  
93 - setIsEditStatus : function(v) {  
94 - iseditStatus = v ;  
95 - },  
96 -  
97 - /** 获取路段是否在截取状态 @return boolean*/  
98 - getIsCutSection : function() {  
99 - return isCutSection;  
100 - },  
101 - setIsCutSection : function(v) {  
102 - isCutSection = v ;  
103 - },  
104 -  
105 - /** 获取距离与时间 @param <points:坐标点集合> */  
106 - getDistanceAndDuration : function(points,callback){  
107 -  
108 - // 获取长度  
109 - var len = points.length;  
110 - (function(){  
111 -  
112 - if (!arguments.callee.count) {  
113 -  
114 - arguments.callee.count = 0;  
115 -  
116 - }  
117 -  
118 - arguments.callee.count++;  
119 -  
120 - var index = parseInt(arguments.callee.count) - 1;  
121 -  
122 - if (index >= len-1) {  
123 -  
124 - callback && callback(points);  
125 -  
126 - return;  
127 - }  
128 -  
129 - // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)  
130 - var f = arguments.callee;  
131 - // 起点坐标 <坐标格式:40.056878,116.30815>  
132 - var origin = points[index].potion.lat + ',' + points[index].potion.lng;  
133 -  
134 - // 终点坐标 <坐标格式:40.056878,116.30815>  
135 - var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;  
136 - var region = '上海';  
137 -  
138 - var origin_region = '上海';  
139 -  
140 - var destination_region = '上海';  
141 -  
142 - var output = 'json';  
143 -  
144 - var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';  
145 -  
146 - /**  
147 - * origin:起点名称或经纬度;  
148 - *  
149 - * destination:终点名称或经纬度;  
150 - *  
151 - * origin_region:起始点所在城市,驾车导航时必填。  
152 - *  
153 - * destination_region:终点所在城市,驾车导航时必填。  
154 - *  
155 - * output :表示输出类型,可设置为xml或json,默认为xml。  
156 - *  
157 - **/  
158 - var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};  
159 -  
160 - /** @description :未认证开发者默认配额为:2000次/天。 */  
161 - $.ajax({  
162 -  
163 - // 百度地图根据坐标获取两点之间的时间与距离  
164 - url: '//api.map.baidu.com/direction/v1?mode=transit',  
165 -  
166 - data: paramsB,  
167 -  
168 - dataType: 'jsonp',  
169 -  
170 - success: function(r){  
171 -  
172 - if(r) {  
173 -  
174 - if(r.message=='ok') {  
175 -  
176 - if(r.result.taxi==null) {  
177 -  
178 - // 获取距离(单位:米)  
179 - points[index+1].distance = 0;  
180 -  
181 - // 获取时间(单位:秒)  
182 - points[index+1].duration = 0;  
183 -  
184 - }else {  
185 -  
186 - // 获取距离(单位:米)  
187 - points[index+1].distance = r.result.taxi.distance;  
188 -  
189 - // 获取时间(单位:秒)  
190 - points[index+1].duration = r.result.taxi.duration;  
191 -  
192 - }  
193 -  
194 -  
195 - }  
196 -  
197 - }  
198 -  
199 - f();  
200 - }  
201 - });  
202 -  
203 - })();  
204 -  
205 - },  
206 - // 在地图上画出上行线路走向  
207 - drawingUpline01 : function (polylineArray,polyline_center,data) {  
208 - var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;  
209 - // 创建线路走向  
210 - polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});  
211 - polyUpline01.data = data;  
212 - // 把折线添加到地图上  
213 - mapBValue.addOverlay(polyUpline01);  
214 - var sectionPoint = [];  
215 - // 线路单击事件  
216 - polyUpline01.addEventListener('click',function(e) {  
217 - if(SpeedingMap.getIsEditStatus()) {  
218 - layer.msg('请先保存正在编辑的路段信息...');  
219 - return false;  
220 - }  
221 - if(SpeedingMap.getIsCutSection()) {  
222 - layer.msg('请先撤销所有切路段的点...');  
223 - return false;  
224 - }  
225 - polyUpline01.enableEditing();  
226 - SpeedingMap.setIsEditStatus(true);  
227 - });  
228 -  
229 - // 添加路段双击事件  
230 - polyUpline01.addEventListener("dblclick",function(e){  
231 - if(SpeedingMap.getIsCutSection()) {  
232 - layer.msg('请先撤销所有切路段的点...');  
233 - return false;  
234 - }  
235 - SpeedingMap.setIsEditStatus(false);  
236 - // 关闭  
237 - layer.closeAll();  
238 - polyUpline01.disableEditing();  
239 - EditSectionObj.setEitdSection(polyUpline01.data);  
240 - // 获取折线坐标集合  
241 - var editPloyLineArray = polyUpline01.getPath();  
242 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
243 - sectionList = [];  
244 - var tbodyHtml = template('section_list',{list : sectionList});  
245 - // 截取路段  
246 - $('#section_table tbody').html(tbodyHtml);  
247 - // 加载修改路段弹出层mobal页面  
248 - $.get('editsection.html', function(m){  
249 - $(pjaxContainer).append(m);  
250 - $('#edit_section_mobal_cache').trigger('editSectionMobalCache_show', [SpeedingMap,GetAjaxData,EditSectionObj,PublicFunctions]);  
251 - });  
252 - });  
253 -  
254 - // 路段右击事件  
255 - var editSection = function(e,ee,marker){  
256 - if(SpeedingMap.getIsEditStatus()) {  
257 - layer.msg('请先保存正在编辑的路段信息...');  
258 - return false;  
259 - }  
260 - var lng = e.lng;  
261 - var lat = e.lat;  
262 - var sectionName = null;  
263 - var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建点  
264 - marker.isFlag = true;  
265 - if(pointIndex == 0) {  
266 - sectionPoint[pointIndex] = {lng:lng , lat:lat};  
267 - layer.msg('进入切路段状态,请选择本路段的终点!');  
268 - mapBValue.addOverlay(marker);// 添加覆盖物  
269 - firstPoint = {lng:lng, lat:lat};  
270 - pointIndex++;  
271 - EditSectionObj.setEitdSection(polyUpline01.data);  
272 - // 获取折线坐标集合  
273 - var editPloyLineArray = polyUpline01.getPath();  
274 - EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));  
275 - } else if (pointIndex > 0) {  
276 - layer.prompt({title: '请输入路段名!'}, function(sectionName, index){  
277 - pointList = [];  
278 - sectionPoint[pointIndex] = {lng:lng , lat:lat};  
279 - pointList[0] = sectionPoint[pointIndex-1];  
280 - pointList[1] = sectionPoint[pointIndex];  
281 - sectionList.push({name:sectionName, section:pointList});  
282 - layer.close(index);  
283 - layer.msg('路段截取成功,请选择下一个路段的终点');  
284 - mapBValue.addOverlay(marker);// 添加覆盖物  
285 - var tbodyHtml = template('section_list',{list : sectionList});  
286 - // 截取路段  
287 - $('#section_table tbody').html(tbodyHtml);  
288 - pointIndex++;  
289 - });  
290 - }  
291 - SpeedingMap.setIsCutSection(true);  
292 - }  
293 - var markerMenu=new BMap.ContextMenu();  
294 - markerMenu.addItem(new BMap.MenuItem('切路段',editSection.bind(polyUpline01)));  
295 - polyUpline01.addContextMenu(markerMenu);  
296 -  
297 -  
298 - var PanOptions_ ={noAnimation :true};  
299 - mapBValue.reset();  
300 - mapBValue.panTo(polyline_center,PanOptions_);  
301 - mapBValue.panBy(500,-510,PanOptions_);  
302 - mapBValue.setZoom(14);  
303 - },  
304 - // 删除点刷新cutSectionTable  
305 - refreshCutSectionTable : function() {  
306 - var tbodyHtml = template('section_list',{list : sectionList});  
307 - $('#section_table tbody').html(tbodyHtml);  
308 - },  
309 - // 删除点刷新覆盖物  
310 - deleteCutSectionPoint : function(point) {  
311 - var lng = point.lng;  
312 - var lat = point.lat;  
313 - var allOverlay = mapBValue.getOverlays();  
314 - // 删除最后一个点  
315 - for (var i = 0; i < allOverlay.length -1; i++){  
316 - if(allOverlay[i].isFlag) {  
317 - if(allOverlay[i].point.lng == lng && allOverlay[i].point.lat == lat){  
318 - mapBValue.removeOverlay(allOverlay[i]);  
319 - break;  
320 - }  
321 - }  
322 - }  
323 - },  
324 - /** 在地图上画点 @param:<point_center:中心坐标点> */  
325 - drawingUpStationPoint : function(point_center,stationName,s) {  
326 -  
327 - // 自定义标注物图片  
328 - var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));  
329 -  
330 - var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'  
331 - + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'  
332 - + '</div>'  
333 - + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';  
334 -  
335 -  
336 - var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{  
337 - "anchor" : new BMap.Size(-10,8),  
338 - "enableDragging" : true});  
339 -  
340 -  
341 - myRichMarker1.disableDragging();  
342 - mapBValue.addOverlay(myRichMarker1);  
343 -  
344 -  
345 - // 创建标注物  
346 - marker = new BMap.Marker(point_center,{icon : icon_target});  
347 -  
348 - // 允许覆盖物在map.clearOverlays方法中被清除。  
349 - marker.enableMassClear();  
350 -  
351 - mapBValue.addOverlay(marker);  
352 - },  
353 -  
354 - // 根据站点坐标匹配库中的公交站点(手动规划)  
355 - stationsPointsToLibraryPoint : function(arra,callback) {  
356 - // 获取长度  
357 - var len = arra.length;  
358 - var station = {};  
359 - var stationList = [];  
360 - (function(){  
361 - if (!arguments.callee.count) {  
362 - arguments.callee.count = 0;  
363 - }  
364 - arguments.callee.count++;  
365 - var index = parseInt(arguments.callee.count) - 1;  
366 - if (index >= len) {  
367 - callback && callback(stationList);  
368 - return ;  
369 - }  
370 - var f = arguments.callee;  
371 - station = arra[index];  
372 - if(arra[index].name!=''){  
373 - $.get('/station/matchStation',station,function(result) {  
374 - var centerPointWkt = result.centerPointWkt, idx = centerPointWkt.indexOf('POINT(');  
375 - centerPointWkt = idx > -1 ? centerPointWkt.substring(6, centerPointWkt.length - 1) : centerPointWkt;  
376 - var coordinates = centerPointWkt.split(' ');  
377 - stationList.push({name: result.name ,wgs: arra[index].wgs, potion: {lng: coordinates[0], lat: coordinates[1]}, isHave: result.isHave, id: result.id});  
378 - f();  
379 - });  
380 - }else {  
381 - f();  
382 - }  
383 - })()  
384 - },  
385 - clearMarkAndOverlays : function() {  
386 -  
387 - // 清楚地图覆盖物  
388 - mapBValue.clearOverlays();  
389 -  
390 - mapBValue.removeOverlay();  
391 -  
392 - }  
393 -  
394 - }  
395 -  
396 - return Bmap;  
397 - 1 +/**
  2 + * 百度地图
  3 + *
  4 + * - - - - - -》init:地图初始化
  5 + *
  6 + * - - - - - -》getDistanceAndDuration:获取距离与时间
  7 + *
  8 + * - - - - - -》drawingUpline:在地图上画出上行线路走向
  9 + *
  10 + * - - - - - -》stationsPointsToLibraryPoint:根据站点坐标匹配库中的公交站点(手动规划)
  11 + */
  12 +
  13 +var SpeedingMap = function () {
  14 +
  15 + /** SpeedingMap 全局变量定义 mapBValue:地图对象;polyUpline:走向折线;sectionList:截取过的路段 ;pointIndex:计算路段被切的次数;
  16 + * firstPoint:截取路段的第一个点;iseditStatus:路段是否在编辑状态;isCutSection : 获取路段是否在截取状态*/
  17 + var mapBValue = '', polyUpline='', sectionList = [], pointIndex = 0, iseditStatus = false, firstPoint = {}, isCutSection = false;
  18 +
  19 + var Bmap = {
  20 +
  21 + init : function() {
  22 +
  23 + // 设置中心点,
  24 + var CENTER_POINT = {lng : 121.528733,lat : 31.237425};
  25 +
  26 + // 百度API Key
  27 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
  28 +
  29 + // 初始化百度地图
  30 + mapBValue = new BMap.Map("speedingMap");
  31 +
  32 + //中心点和缩放级别
  33 + mapBValue.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat),15);
  34 +
  35 + //启用地图拖拽事件,默认启用(可不写)
  36 + mapBValue.enableDragging();
  37 +
  38 + //启用地图滚轮放大缩小
  39 + mapBValue.enableScrollWheelZoom();
  40 +
  41 + //禁用鼠标双击放大
  42 + mapBValue.disableDoubleClickZoom();
  43 +
  44 + //启用键盘上下左右键移动地图
  45 + mapBValue.enableKeyboard();
  46 +
  47 + return mapBValue;
  48 + },
  49 + /** 获取第一个切路段的点 @return Point*/
  50 + getFirstPoint : function() {
  51 + return firstPoint;
  52 + },
  53 + /** 获取地图对象 @return 地图对象map */
  54 + getmapBValue : function() {
  55 +
  56 + return mapBValue;
  57 +
  58 + },
  59 +
  60 + getPolyUpline : function() {
  61 +
  62 + return polyUpline;
  63 + },
  64 +
  65 + /** 获取截取过的路段 @return 路段对象List */
  66 + getSectionList : function() {
  67 +
  68 + return sectionList;
  69 +
  70 + },
  71 + setSectionList : function(list) {
  72 +
  73 + sectionList = list;
  74 + },
  75 + initCutSectionPoint : function() {
  76 + sectionList = [];
  77 + var tbodyHtml = template('section_list',{list : sectionList});
  78 + $('#section_table tbody').html(tbodyHtml);
  79 + },
  80 + /** 获取切路段的点下标 @return int*/
  81 + setPointIndex : function(index) {
  82 + pointIndex = index;
  83 + },
  84 + getPointIndex : function() {
  85 +
  86 + return pointIndex;
  87 +
  88 + },
  89 + /** 获取路段是否在编辑状态 @return boolean*/
  90 + getIsEditStatus : function() {
  91 + return iseditStatus;
  92 + },
  93 + setIsEditStatus : function(v) {
  94 + iseditStatus = v ;
  95 + },
  96 +
  97 + /** 获取路段是否在截取状态 @return boolean*/
  98 + getIsCutSection : function() {
  99 + return isCutSection;
  100 + },
  101 + setIsCutSection : function(v) {
  102 + isCutSection = v ;
  103 + },
  104 +
  105 + /** 获取距离与时间 @param <points:坐标点集合> */
  106 + getDistanceAndDuration : function(points,callback){
  107 +
  108 + // 获取长度
  109 + var len = points.length;
  110 + (function(){
  111 +
  112 + if (!arguments.callee.count) {
  113 +
  114 + arguments.callee.count = 0;
  115 +
  116 + }
  117 +
  118 + arguments.callee.count++;
  119 +
  120 + var index = parseInt(arguments.callee.count) - 1;
  121 +
  122 + if (index >= len-1) {
  123 +
  124 + callback && callback(points);
  125 +
  126 + return;
  127 + }
  128 +
  129 + // 当函数被调用时,它的arguments.callee对象就会指向自身,也就是一个对自己的引用。(当前正在执行的函数。)
  130 + var f = arguments.callee;
  131 + // 起点坐标 <坐标格式:40.056878,116.30815>
  132 + var origin = points[index].potion.lat + ',' + points[index].potion.lng;
  133 +
  134 + // 终点坐标 <坐标格式:40.056878,116.30815>
  135 + var destination = points[index+1].potion.lat + ',' + points[index+1].potion.lng;
  136 + var region = '上海';
  137 +
  138 + var origin_region = '上海';
  139 +
  140 + var destination_region = '上海';
  141 +
  142 + var output = 'json';
  143 +
  144 + var ak_My = 'wjlITmXeCek5MxyU3ZUBkTeU8B0o0npk';
  145 +
  146 + /**
  147 + * origin:起点名称或经纬度;
  148 + *
  149 + * destination:终点名称或经纬度;
  150 + *
  151 + * origin_region:起始点所在城市,驾车导航时必填。
  152 + *
  153 + * destination_region:终点所在城市,驾车导航时必填。
  154 + *
  155 + * output :表示输出类型,可设置为xml或json,默认为xml。
  156 + *
  157 + **/
  158 + var paramsB = {origin:origin,destination:destination,region:region,origin_region:origin_region,destination_region:destination_region,output:output,ak:ak_My};
  159 +
  160 + /** @description :未认证开发者默认配额为:2000次/天。 */
  161 + $.ajax({
  162 +
  163 + // 百度地图根据坐标获取两点之间的时间与距离
  164 + url: '//api.map.baidu.com/direction/v1?mode=transit',
  165 +
  166 + data: paramsB,
  167 +
  168 + dataType: 'jsonp',
  169 +
  170 + success: function(r){
  171 +
  172 + if(r) {
  173 +
  174 + if(r.message=='ok') {
  175 +
  176 + if(r.result.taxi==null) {
  177 +
  178 + // 获取距离(单位:米)
  179 + points[index+1].distance = 0;
  180 +
  181 + // 获取时间(单位:秒)
  182 + points[index+1].duration = 0;
  183 +
  184 + }else {
  185 +
  186 + // 获取距离(单位:米)
  187 + points[index+1].distance = r.result.taxi.distance;
  188 +
  189 + // 获取时间(单位:秒)
  190 + points[index+1].duration = r.result.taxi.duration;
  191 +
  192 + }
  193 +
  194 +
  195 + }
  196 +
  197 + }
  198 +
  199 + f();
  200 + }
  201 + });
  202 +
  203 + })();
  204 +
  205 + },
  206 + // 在地图上画出上行线路走向
  207 + drawingUpline01 : function (polylineArray,polyline_center,data) {
  208 + var polyUpline01 = 'polyline' + '_' + data.sectionrouteId;
  209 + // 创建线路走向
  210 + polyUpline01 = new BMap.Polyline(polylineArray, {strokeColor : "blue",strokeWeight : 6,strokeOpacity : 0.5});
  211 + polyUpline01.data = data;
  212 + // 把折线添加到地图上
  213 + mapBValue.addOverlay(polyUpline01);
  214 + var sectionPoint = [];
  215 + // 线路单击事件
  216 + polyUpline01.addEventListener('click',function(e) {
  217 + if(SpeedingMap.getIsEditStatus()) {
  218 + layer.msg('请先保存正在编辑的路段信息...');
  219 + return false;
  220 + }
  221 + if(SpeedingMap.getIsCutSection()) {
  222 + layer.msg('请先撤销所有切路段的点...');
  223 + return false;
  224 + }
  225 + polyUpline01.enableEditing();
  226 + SpeedingMap.setIsEditStatus(true);
  227 + });
  228 +
  229 + // 添加路段双击事件
  230 + polyUpline01.addEventListener("dblclick",function(e){
  231 + if(SpeedingMap.getIsCutSection()) {
  232 + layer.msg('请先撤销所有切路段的点...');
  233 + return false;
  234 + }
  235 + SpeedingMap.setIsEditStatus(false);
  236 + // 关闭
  237 + layer.closeAll();
  238 + polyUpline01.disableEditing();
  239 + EditSectionObj.setEitdSection(polyUpline01.data);
  240 + // 获取折线坐标集合
  241 + var editPloyLineArray = polyUpline01.getPath();
  242 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  243 + sectionList = [];
  244 + var tbodyHtml = template('section_list',{list : sectionList});
  245 + // 截取路段
  246 + $('#section_table tbody').html(tbodyHtml);
  247 + // 加载修改路段弹出层mobal页面
  248 + $.get('editsection.html', function(m){
  249 + $(pjaxContainer).append(m);
  250 + $('#edit_section_mobal_cache').trigger('editSectionMobalCache_show', [SpeedingMap,GetAjaxData,EditSectionObj,PublicFunctions]);
  251 + });
  252 + });
  253 +
  254 + // 路段右击事件
  255 + var editSection = function(e,ee,marker){
  256 + if(SpeedingMap.getIsEditStatus()) {
  257 + layer.msg('请先保存正在编辑的路段信息...');
  258 + return false;
  259 + }
  260 + var lng = e.lng;
  261 + var lat = e.lat;
  262 + var sectionName = null;
  263 + var marker = new BMap.Marker(new BMap.Point(lng, lat)); // 创建点
  264 + marker.isFlag = true;
  265 + if(pointIndex == 0) {
  266 + sectionPoint[pointIndex] = {lng:lng , lat:lat};
  267 + layer.msg('进入切路段状态,请选择本路段的终点!');
  268 + mapBValue.addOverlay(marker);// 添加覆盖物
  269 + firstPoint = {lng:lng, lat:lat};
  270 + pointIndex++;
  271 + EditSectionObj.setEitdSection(polyUpline01.data);
  272 + // 获取折线坐标集合
  273 + var editPloyLineArray = polyUpline01.getPath();
  274 + EditSectionObj.setEitdBsectionVector(JSON.stringify(editPloyLineArray));
  275 + } else if (pointIndex > 0) {
  276 + layer.prompt({title: '请输入路段名!'}, function(sectionName, index){
  277 + pointList = [];
  278 + sectionPoint[pointIndex] = {lng:lng , lat:lat};
  279 + pointList[0] = sectionPoint[pointIndex-1];
  280 + pointList[1] = sectionPoint[pointIndex];
  281 + sectionList.push({name:sectionName, section:pointList});
  282 + layer.close(index);
  283 + layer.msg('路段截取成功,请选择下一个路段的终点');
  284 + mapBValue.addOverlay(marker);// 添加覆盖物
  285 + var tbodyHtml = template('section_list',{list : sectionList});
  286 + // 截取路段
  287 + $('#section_table tbody').html(tbodyHtml);
  288 + pointIndex++;
  289 + });
  290 + }
  291 + SpeedingMap.setIsCutSection(true);
  292 + }
  293 + var markerMenu=new BMap.ContextMenu();
  294 + markerMenu.addItem(new BMap.MenuItem('切路段',editSection.bind(polyUpline01)));
  295 + polyUpline01.addContextMenu(markerMenu);
  296 +
  297 +
  298 + var PanOptions_ ={noAnimation :true};
  299 + mapBValue.reset();
  300 + mapBValue.panTo(polyline_center,PanOptions_);
  301 + mapBValue.panBy(500,-510,PanOptions_);
  302 + mapBValue.setZoom(14);
  303 + },
  304 + // 删除点刷新cutSectionTable
  305 + refreshCutSectionTable : function() {
  306 + var tbodyHtml = template('section_list',{list : sectionList});
  307 + $('#section_table tbody').html(tbodyHtml);
  308 + },
  309 + // 删除点刷新覆盖物
  310 + deleteCutSectionPoint : function(point) {
  311 + var lng = point.lng;
  312 + var lat = point.lat;
  313 + var allOverlay = mapBValue.getOverlays();
  314 + // 删除最后一个点
  315 + for (var i = 0; i < allOverlay.length -1; i++){
  316 + if(allOverlay[i].isFlag) {
  317 + if(allOverlay[i].point.lng == lng && allOverlay[i].point.lat == lat){
  318 + mapBValue.removeOverlay(allOverlay[i]);
  319 + break;
  320 + }
  321 + }
  322 + }
  323 + },
  324 + /** 在地图上画点 @param:<point_center:中心坐标点> */
  325 + drawingUpStationPoint : function(point_center,stationName,s) {
  326 +
  327 + // 自定义标注物图片
  328 + var icon_target = new BMap.Icon('/pages/base/stationroute/css/img/gjzd.png',new BMap.Size(10, 10));
  329 +
  330 + var html2 = '<div style="position: absolute; margin: 0pt; padding: 0pt; width: 160px; height: 26px; left: -10px; top: -35px; overflow: hidden;">'
  331 + + '<img class="rm3_image" style="border:none;left:0px; top:0px; position:absolute;" src="/pages/base/stationroute/css/img/back160.png">'
  332 + + '</div>'
  333 + + '<label class=" BMapLabel" unselectable="on" style="position: absolute; -moz-user-select: none; display: inline; cursor: inherit; border: 0px none; padding: 2px 1px 1px; white-space: nowrap; font: 12px arial,simsun; z-index: 80; color: rgb(255, 102, 0); left: 15px; top: -35px;"><span style="float: left; color: #fdfdfd; margin-left: -22px; font-size: 6px;">'+ s+'</span>'+ stationName+'</label>';
  334 +
  335 +
  336 + var myRichMarker1 = new BMapLib.RichMarker(html2, point_center,{
  337 + "anchor" : new BMap.Size(-10,8),
  338 + "enableDragging" : true});
  339 +
  340 +
  341 + myRichMarker1.disableDragging();
  342 + mapBValue.addOverlay(myRichMarker1);
  343 +
  344 +
  345 + // 创建标注物
  346 + marker = new BMap.Marker(point_center,{icon : icon_target});
  347 +
  348 + // 允许覆盖物在map.clearOverlays方法中被清除。
  349 + marker.enableMassClear();
  350 +
  351 + mapBValue.addOverlay(marker);
  352 + },
  353 +
  354 + // 根据站点坐标匹配库中的公交站点(手动规划)
  355 + stationsPointsToLibraryPoint : function(arra,callback) {
  356 + // 获取长度
  357 + var len = arra.length;
  358 + var station = {};
  359 + var stationList = [];
  360 + (function(){
  361 + if (!arguments.callee.count) {
  362 + arguments.callee.count = 0;
  363 + }
  364 + arguments.callee.count++;
  365 + var index = parseInt(arguments.callee.count) - 1;
  366 + if (index >= len) {
  367 + callback && callback(stationList);
  368 + return ;
  369 + }
  370 + var f = arguments.callee;
  371 + station = arra[index];
  372 + if(arra[index].name!=''){
  373 + $.get('/station/matchStation',station,function(result) {
  374 + var centerPointWkt = result.centerPointWkt, idx = centerPointWkt.indexOf('POINT(');
  375 + centerPointWkt = idx > -1 ? centerPointWkt.substring(6, centerPointWkt.length - 1) : centerPointWkt;
  376 + var coordinates = centerPointWkt.split(' ');
  377 + stationList.push({name: result.name ,wgs: arra[index].wgs, potion: {lng: coordinates[0], lat: coordinates[1]}, isHave: result.isHave, id: result.id});
  378 + f();
  379 + });
  380 + }else {
  381 + f();
  382 + }
  383 + })()
  384 + },
  385 + clearMarkAndOverlays : function() {
  386 +
  387 + // 清楚地图覆盖物
  388 + mapBValue.clearOverlays();
  389 +
  390 + mapBValue.removeOverlay();
  391 +
  392 + }
  393 +
  394 + }
  395 +
  396 + return Bmap;
  397 +
398 }(); 398 }();
399 \ No newline at end of file 399 \ No newline at end of file
src/main/resources/static/pages/mapmonitor/real/js/map_platform_old.js
1 -var realMap = (function() {  
2 -  
3 - function getJSONP(url, data ,callback){  
4 - $.ajax({  
5 - url:url,  
6 - data: data,  
7 - dataType:'jsonp',  
8 - success:callback,  
9 - error: function(e){  
10 - alert('error: jsonp,' + url);  
11 - }  
12 - });  
13 - }  
14 -  
15 - /**  
16 - * 透明点,用于替换隐藏百度Marker的icon  
17 - */  
18 - var tmIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAbSURBVHjaYvz//z8DAwMDAxMDFAAAAAD//wMAMAYDAW/BVI8AAAAASUVORK5CYII=';  
19 -  
20 - var REAL_BAIDU_TEXT = '百度地图', REAL_GAODE_TEXT = '高德地图';  
21 -  
22 - // 中心点 (上海市浦东新区政府)  
23 - var CENTER_POINT = {  
24 - lng : 121.544336,  
25 - lat : 31.221315  
26 - };  
27 -  
28 - // 图层容器  
29 - var mapContainer = $('#mapContainer');  
30 - // 路况按钮  
31 - var trafficBtn = $('#trafficItem');  
32 -  
33 - var storage = window.localStorage;  
34 -  
35 - var currentMap;  
36 -  
37 - var city = "上海";  
38 -  
39 - //百度API Key  
40 - var bdKey = 'IGGrr4UjwIYzatoCRFKEL8sT';  
41 -  
42 - var bd_gps_info_win_opts = {  
43 - width : 190,  
44 - height: 255,  
45 - enableMessage:true  
46 - };  
47 -  
48 - //线路路由  
49 - var polylines;  
50 -  
51 - //百度 -轨迹回放点聚合  
52 - //var historyClusterer;  
53 -  
54 - var markerClusterer;  
55 -  
56 - //设备号和marker对照  
57 - var markersMap;  
58 - var real_map = {  
59 - getMap: function(){  
60 - return currentMap;  
61 - },  
62 - init: function(){  
63 - var m = storage.getItem('real_map');  
64 - if(m && m == REAL_GAODE_TEXT)  
65 - real_map.gaode.init();  
66 - else  
67 - real_map.baidu.init();  
68 - },  
69 - //百度地图  
70 - baidu : {  
71 - //初始化  
72 - init : function() {  
73 - real_map.setText(REAL_BAIDU_TEXT);  
74 -  
75 - var map = new BMap.Map(mapContainer[0]);  
76 - //中心点和缩放级别  
77 - map.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);  
78 - map.enableScrollWheelZoom();  
79 - //加载完成  
80 - map.addEventListener("tilesloaded", function() {  
81 - layer.closeAll();  
82 - storage.setItem('real_map', REAL_BAIDU_TEXT);  
83 - });  
84 -  
85 - // 路况控件  
86 - var ctrl = new BMapLib.TrafficControl();  
87 - map.addControl(ctrl);  
88 -  
89 - //historyClusterer = new BMapLib.MarkerClusterer(map, {isAverangeCenter : true,minClusterSize : 2})  
90 - var isVisible;  
91 - trafficBtn.on('click', function() {  
92 - if (isVisible) {  
93 - ctrl.hide();  
94 - isVisible = false;  
95 - //调整线路路由透明度  
96 - $.each(polylines, function(){  
97 - this.setStrokeOpacity(0.5);  
98 - });  
99 - } else {  
100 - ctrl.show();  
101 - isVisible = true;  
102 - //调整线路路由透明度  
103 - $.each(polylines, function(){  
104 - this.setStrokeOpacity(0.1);  
105 - });  
106 - }  
107 - });  
108 - //百度路况控件自身关闭按钮  
109 - $('.portlet-fullscreen').on('click', '.maplibTc .maplibTcClose', function(){  
110 - isVisible = false;  
111 - //调整线路路由透明度  
112 - $.each(polylines, function(){  
113 - this.setStrokeOpacity(0.5);  
114 - });  
115 - });  
116 -  
117 - $('#tcWrap.maplibTc').addClass('animated bounceInLeft');  
118 - $('.maplibTcBtn_deskTop.anchorTR').remove();  
119 -  
120 - //保存当前地图实例和名称  
121 - currentMap = {  
122 - map: map,  
123 - mapName: REAL_BAIDU_TEXT,  
124 - fName : 'baidu'  
125 - }  
126 -  
127 - },  
128 - clear: function(){  
129 - currentMap.map.clearOverlays();  
130 - markerClusterer && markerClusterer.clearMarkers();  
131 -  
132 - },  
133 - change : function() {  
134 - if(currentMap.mapName == REAL_BAIDU_TEXT)  
135 - return;  
136 -  
137 - showMsg(REAL_BAIDU_TEXT);  
138 -  
139 - real_map.destroy();  
140 - real_map.baidu.init();  
141 - },  
142 - autocomplete: function(input, cb){  
143 - var ac = new BMap.Autocomplete({  
144 - 'location' : realMap.getMap().map,  
145 - 'input': input,  
146 - 'onSearchComplete': function(result){  
147 - //隐藏默认的提示框  
148 - ac.hide();  
149 - cb && cb({type: 'baidu', result: result.wr});  
150 - }  
151 - });  
152 -  
153 - $('#' + input).on('keyup', function(){  
154 - if(this.value == ''){  
155 - $('.search_result').html('');  
156 - return;  
157 - }  
158 - });  
159 -  
160 - },  
161 - setPlace: function(val){  
162 - var map = currentMap.map;  
163 - map.clearOverlays();  
164 - var local = new BMap.LocalSearch(map, {  
165 - onSearchComplete: function(){  
166 - var poi = local.getResults().getPoi(0);  
167 - if(!poi){  
168 - return;  
169 - }  
170 - var pp = poi.point;  
171 - map.centerAndZoom(pp, 18);  
172 - map.addOverlay(new BMap.Marker(pp));  
173 - }  
174 - });  
175 -  
176 - local.search(val);  
177 - },  
178 - drawLine: function(route){  
179 - var map = currentMap.map;  
180 - map.clearOverlays();  
181 - polylines = [];  
182 - //画线路  
183 - //从localStorage里读取路由信息  
184 - //var route = JSON.parse(storage.getItem(lineCode + '_route'));  
185 - var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}  
186 - ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5};  
187 -  
188 - var upPos = [], downPos = [], tempArray;  
189 - //上行  
190 - if(route.up){  
191 - $.each(route.up.split(','), function(){  
192 - tempArray = this.split(' ');  
193 - upPos.push(new BMap.Point(tempArray[0], tempArray[1]));  
194 - });  
195 -  
196 - var upLine = new BMap.Polyline(upPos, upLineOps);  
197 - map.addOverlay(upLine);  
198 -  
199 - polylines.push(upLine);  
200 - map.panTo(upPos[parseInt(upPos.length / 2)]);  
201 - }  
202 - //下行  
203 - if(route.down){  
204 - $.each(route.down.split(','), function(){  
205 - tempArray = this.split(' ');  
206 - downPos.push(new BMap.Point(tempArray[0], tempArray[1]));  
207 - });  
208 -  
209 - var downLine = new BMap.Polyline(downPos, downLineOps);  
210 - map.addOverlay(downLine);  
211 - polylines.push(downLine);  
212 -  
213 - }  
214 - },  
215 - //批量将GPS信号画到地图上  
216 - drawGpsMarker: function(gpsList){  
217 - markersMap = {};  
218 - var map = currentMap.map;  
219 -  
220 - markerClusterer && markerClusterer.clearMarkers();  
221 - markerClusterer = new BMapLib.MarkerClusterer(map, {isAverangeCenter : true,minClusterSize : 3});  
222 - real_map.baidu.coordsConvert(gpsList, function(){  
223 - //绘制车辆位置  
224 - var marker;  
225 - $.each(gpsList, function(i, gpsData){  
226 - marker = createBDMarkerByGps(gpsData)  
227 - map.addOverlay(marker);  
228 - //marker加入点聚合  
229 - markerClusterer.addMarker(marker);  
230 -  
231 - markersMap[gpsData.deviceId] = marker;  
232 - });  
233 -  
234 - });  
235 - },  
236 - goToMarker: function(deviceId){  
237 - var m = markersMap[deviceId];  
238 - if(m){  
239 - currentMap.map.panTo(m.point);  
240 - setTimeout(function(){  
241 - bdOpenWindow(m);  
242 - }, 500);  
243 - }  
244 - },  
245 - coordsConvert: function(list, cb){  
246 - if(list.length > 100)  
247 - list = list.slice(0, 100);  
248 -  
249 - var coords = '';  
250 - //拼接GPS坐标,一次性转换  
251 - for (var i = 0, item; item = list[i++];)  
252 - coords += item.lon + ',' + item.lat + ';';  
253 - coords = coords.substring(0, coords.length - 1);  
254 - getJSONP('//api.map.baidu.com/geoconv/v1/',{coords: coords, ak: bdKey}  
255 - ,function(rt){  
256 - $.each(rt.result, function(j, bdCoord){  
257 - list[j].bd_coord = bdCoord;  
258 - });  
259 - cb&&cb();  
260 - });  
261 - },  
262 - //绘制轨迹回放 marker  
263 - addHistoryMarker: function(gps){  
264 -  
265 - var marker = bdHistoryMarker(gps);  
266 - currentMap.map.addOverlay(marker);  
267 -  
268 - //historyClusterer.addMarker(marker);  
269 - return marker;  
270 - },  
271 - //移动marker  
272 - moveMarker: function(marker , gps){  
273 - marker.setPosition(new BMap.Point(gps.bd_lon, gps.bd_lat));  
274 - //重新设置颜色  
275 - marker.getLabel().setStyle({borderColor: bgColor(gps), backgroundColor: bgColor(gps)});  
276 - },  
277 - //居中marker  
278 - markerToCenter: function(marker){  
279 - currentMap.map.panTo(marker.getPosition());  
280 - },  
281 - //删除marker  
282 - removeMarker: function(marker){  
283 - currentMap.map.removeOverlay(marker);  
284 - }  
285 - },  
286 - //高德地图  
287 - gaode : {  
288 - init : function() {  
289 - var mapLoadAnim = '<div class="sk-cube-grid _center">'+  
290 - '<div class="sk-cube sk-cube1"></div>'+  
291 - '<div class="sk-cube sk-cube2"></div>'+  
292 - '<div class="sk-cube sk-cube3"></div>'+  
293 - '<div class="sk-cube sk-cube4"></div>'+  
294 - '<div class="sk-cube sk-cube5"></div>'+  
295 - '<div class="sk-cube sk-cube6"></div>'+  
296 - '<div class="sk-cube sk-cube7"></div>'+  
297 - '<div class="sk-cube sk-cube8"></div>'+  
298 - '<div class="sk-cube sk-cube9"></div>'+  
299 - '</div>';  
300 -  
301 - mapContainer.html(mapLoadAnim);  
302 -  
303 - real_map.gaode.setStyle();  
304 - real_map.setText(REAL_GAODE_TEXT);  
305 -  
306 - var map = new AMap.Map(mapContainer[0]);  
307 - // 地图中心和缩放级别  
308 - map.setZoomAndCenter(14, [ CENTER_POINT.lng,CENTER_POINT.lat ]);  
309 - //加载完成  
310 - AMap.event.addListener(map, 'complete', function() {  
311 - layer.closeAll();  
312 - storage.setItem('real_map', REAL_GAODE_TEXT);  
313 - $('.sk-cube-grid._center').remove();  
314 - });  
315 -  
316 - // 实时路况图层  
317 - var trafficLayer = new AMap.TileLayer.Traffic();  
318 - trafficLayer.setMap(map);  
319 - trafficLayer.hide();  
320 -  
321 - var isVisible;  
322 - trafficBtn.on('click', function() {  
323 - if (isVisible) {  
324 - trafficLayer.hide();  
325 - isVisible = false;  
326 - $(this).removeClass('active');  
327 -  
328 - //调整线路路由透明度  
329 - $.each(polylines, function(){  
330 - this.setOptions({strokeOpacity: 0.5});  
331 - });  
332 - } else {  
333 - trafficLayer.show();  
334 - isVisible = true;  
335 - $(this).addClass('active');  
336 -  
337 - //调整线路路由透明度  
338 - $.each(polylines, function(){  
339 - this.setOptions({strokeOpacity: 0.1});  
340 - });  
341 - }  
342 - });  
343 -  
344 - //保存当前地图实例和名称  
345 - currentMap = {  
346 - map: map,  
347 - mapName: REAL_GAODE_TEXT,  
348 - fName : 'gaode'  
349 - }  
350 -  
351 - },  
352 - change : function() {  
353 - if(currentMap.mapName == REAL_GAODE_TEXT)  
354 - return;  
355 -  
356 - showMsg(REAL_GAODE_TEXT);  
357 -  
358 - real_map.destroy();  
359 - real_map.gaode.init();  
360 - },  
361 - setStyle : function() {  
362 - $('.mapRightWrap').addClass('gaode');  
363 - $('.mapTools').addClass('gaode');  
364 - $('.leftUtils').addClass('gaode');  
365 - },  
366 - clearStyle : function() {  
367 - $('.mapRightWrap').removeClass('gaode');  
368 - $('.mapTools').removeClass('gaode');  
369 - $('.leftUtils').removeClass('gaode');  
370 - },  
371 - autocomplete: function(input, cb){  
372 -  
373 - AMap.plugin('AMap.Autocomplete',function(){  
374 - var autoOptions = {  
375 - city: city  
376 - };  
377 - autocomplete= new AMap.Autocomplete(autoOptions);  
378 -  
379 - $('#' + input).on('keyup', function(){  
380 - if(this.value == ''){  
381 - $('.search_result').html('');  
382 - return;  
383 - }  
384 - autocomplete.search(this.value, function(status, result){  
385 - cb & cb({type: 'gaode', result: result.tips});  
386 - });  
387 - });  
388 - });  
389 - },  
390 - setPlace: function(val){  
391 - var map = currentMap.map;  
392 -  
393 - AMap.plugin(['AMap.PlaceSearch'],function(){  
394 - var placeSearch = new AMap.PlaceSearch({  
395 - city:city,  
396 - map:map,  
397 - pageSize: 1  
398 - });  
399 -  
400 - placeSearch.search(val);  
401 - });  
402 - },  
403 - drawLine: function(route){  
404 - polylines = [];  
405 - var map = currentMap.map;  
406 - map.clearMap();  
407 -  
408 - //var route = JSON.parse(storage.getItem(lineCode + '_route'));  
409 - var upArr = [], downArr = [];  
410 -  
411 - var upLineOps = {path: upArr, strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}  
412 - ,downLineOps = {path: downArr, strokeColor:"red", strokeWeight:6, strokeOpacity:0.5};  
413 -  
414 - //上行  
415 - if(route.up){  
416 - $.each(route.up_gcj.split(','), function(){  
417 - tempArray = this.split(' ');  
418 - upArr.push([tempArray[0], tempArray[1]]);  
419 - });  
420 - var upLine = new AMap.Polyline(upLineOps);  
421 - //保存线条引用  
422 - polylines.push(upLine);  
423 -  
424 - upLine.setMap(map);  
425 - map.setCenter(upArr[parseInt(upArr.length / 2)]);  
426 -  
427 - }  
428 - //下行  
429 - if(route.down){  
430 - $.each(route.down_gcj.split(','), function(){  
431 - tempArray = this.split(' ');  
432 - downArr.push([tempArray[0], tempArray[1]]);  
433 - });  
434 - var downLine = new AMap.Polyline(downLineOps);  
435 - //保存线条引用  
436 - polylines.push(downLine);  
437 -  
438 - downLine.setMap(map);  
439 - }  
440 - },  
441 - drawGpsMarker: function(gpsList){  
442 - }  
443 - },  
444 - setText : function(text) {  
445 - $('.leftUtils span.dropdown-toggle').html(  
446 - text + ' <i class="fa fa-angle-down"></i>');  
447 - },  
448 - destroy : function() {  
449 - trafficBtn.unbind('click');  
450 -  
451 - //如果当前地图实例有destroy方法即执行  
452 - var map = currentMap.map;  
453 - map.destroy && map.destroy();  
454 -  
455 - if (currentMap.mapName == REAL_GAODE_TEXT) {  
456 - // 如果前一个地图是高德,清除相关样式  
457 - real_map.gaode.clearStyle();  
458 - }  
459 - }  
460 - }  
461 -  
462 - function showMsg(text){  
463 - layer.msg('正在切换到' + text + '...', {icon : 16,shade : [ 0.6, '#393D49' ],time : 0});  
464 - }  
465 -  
466 - /**  
467 - * 颜色  
468 - */  
469 - var bgColor = function(g){  
470 - if(g.state == 0){  
471 - if(g.upDown == 0)  
472 - return '#5E96D2';  
473 - else if(g.upDown == 1)  
474 - return '#C92121';  
475 - else  
476 - return 'red';  
477 - }  
478 - else  
479 - return "rgb(171, 171, 171)";  
480 - }  
481 -  
482 - var tColor = function(g){  
483 - if(g.state == 0)  
484 - return "#fff";  
485 - else  
486 - return "rgb(229, 229, 229)";  
487 - }  
488 -  
489 - function createBDMarkerByGps(gpsData){  
490 - //marker  
491 - var point = new BMap.Point(gpsData.bd_coord.x, gpsData.bd_coord.y)  
492 - //label  
493 - ,label = new BMap.Label(gpsData.nbbm.replace('-',''), {position: point, offset: new BMap.Size(-20,8)});  
494 - label.setStyle({borderColor: bgColor(gpsData), padding: '6px 6px 4px 6px', color: tColor(gpsData), backgroundColor: bgColor(gpsData)});  
495 - var marker = new BMap.Marker(point);  
496 - marker.setLabel(label);  
497 - //icon  
498 - marker.setIcon(new BMap.Icon(tmIcon, new BMap.Size(25,25)));  
499 - //window 绑定到 label  
500 - marker.infoWindow = new BMap.InfoWindow(bd_gps_info_win_opts);  
501 - //数据绑定到label  
502 - marker.gpsData = gpsData;  
503 -  
504 - //mouseover  
505 - label.addEventListener('mouseover', function(){  
506 - bdOpenWindow(marker);  
507 - });  
508 - return marker;  
509 - }  
510 -  
511 - function bdHistoryMarker(gps){  
512 - //marker  
513 - var point = new BMap.Point(gps.bd_lon, gps.bd_lat)  
514 - //label  
515 - ,label = new BMap.Label(gps.nbbm, {position: point, offset: new BMap.Size(-20,8)});  
516 - label.setStyle({borderColor: bgColor(gps), padding: '6px 6px 4px 6px', color: tColor(gps), backgroundColor: bgColor(gps)});  
517 - var marker = new BMap.Marker(point);  
518 - marker.setLabel(label);  
519 - //icon  
520 - marker.setIcon(new BMap.Icon(tmIcon, new BMap.Size(25,25)));  
521 -/* //window 绑定到 label  
522 - marker.infoWindow = new BMap.InfoWindow(bd_gps_info_win_opts);  
523 - //数据绑定到label  
524 - marker.gpsData = gpsData;  
525 -  
526 - //mouseover  
527 - label.addEventListener('mouseover', function(){  
528 - bdOpenWindow(marker);  
529 - });*/  
530 - return marker;  
531 - }  
532 -  
533 - function bdOpenWindow(marker){  
534 - marker.infoWindow.setContent(template('gps_info_win_temp', marker.gpsData));  
535 - currentMap.map.openInfoWindow(marker.infoWindow, marker.point);  
536 - }  
537 - return real_map; 1 +var realMap = (function() {
  2 +
  3 + function getJSONP(url, data ,callback){
  4 + $.ajax({
  5 + url:url,
  6 + data: data,
  7 + dataType:'jsonp',
  8 + success:callback,
  9 + error: function(e){
  10 + alert('error: jsonp,' + url);
  11 + }
  12 + });
  13 + }
  14 +
  15 + /**
  16 + * 透明点,用于替换隐藏百度Marker的icon
  17 + */
  18 + var tmIcon = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKTWlDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVN3WJP3Fj7f92UPVkLY8LGXbIEAIiOsCMgQWaIQkgBhhBASQMWFiApWFBURnEhVxILVCkidiOKgKLhnQYqIWotVXDjuH9yntX167+3t+9f7vOec5/zOec8PgBESJpHmomoAOVKFPDrYH49PSMTJvYACFUjgBCAQ5svCZwXFAADwA3l4fnSwP/wBr28AAgBw1S4kEsfh/4O6UCZXACCRAOAiEucLAZBSAMguVMgUAMgYALBTs2QKAJQAAGx5fEIiAKoNAOz0ST4FANipk9wXANiiHKkIAI0BAJkoRyQCQLsAYFWBUiwCwMIAoKxAIi4EwK4BgFm2MkcCgL0FAHaOWJAPQGAAgJlCLMwAIDgCAEMeE80DIEwDoDDSv+CpX3CFuEgBAMDLlc2XS9IzFLiV0Bp38vDg4iHiwmyxQmEXKRBmCeQinJebIxNI5wNMzgwAABr50cH+OD+Q5+bk4eZm52zv9MWi/mvwbyI+IfHf/ryMAgQAEE7P79pf5eXWA3DHAbB1v2upWwDaVgBo3/ldM9sJoFoK0Hr5i3k4/EAenqFQyDwdHAoLC+0lYqG9MOOLPv8z4W/gi372/EAe/tt68ABxmkCZrcCjg/1xYW52rlKO58sEQjFu9+cj/seFf/2OKdHiNLFcLBWK8ViJuFAiTcd5uVKRRCHJleIS6X8y8R+W/QmTdw0ArIZPwE62B7XLbMB+7gECiw5Y0nYAQH7zLYwaC5EAEGc0Mnn3AACTv/mPQCsBAM2XpOMAALzoGFyolBdMxggAAESggSqwQQcMwRSswA6cwR28wBcCYQZEQAwkwDwQQgbkgBwKoRiWQRlUwDrYBLWwAxqgEZrhELTBMTgN5+ASXIHrcBcGYBiewhi8hgkEQcgIE2EhOogRYo7YIs4IF5mOBCJhSDSSgKQg6YgUUSLFyHKkAqlCapFdSCPyLXIUOY1cQPqQ28ggMor8irxHMZSBslED1AJ1QLmoHxqKxqBz0XQ0D12AlqJr0Rq0Hj2AtqKn0UvodXQAfYqOY4DRMQ5mjNlhXIyHRWCJWBomxxZj5Vg1Vo81Yx1YN3YVG8CeYe8IJAKLgBPsCF6EEMJsgpCQR1hMWEOoJewjtBK6CFcJg4Qxwicik6hPtCV6EvnEeGI6sZBYRqwm7iEeIZ4lXicOE1+TSCQOyZLkTgohJZAySQtJa0jbSC2kU6Q+0hBpnEwm65Btyd7kCLKArCCXkbeQD5BPkvvJw+S3FDrFiOJMCaIkUqSUEko1ZT/lBKWfMkKZoKpRzame1AiqiDqfWkltoHZQL1OHqRM0dZolzZsWQ8ukLaPV0JppZ2n3aC/pdLoJ3YMeRZfQl9Jr6Afp5+mD9HcMDYYNg8dIYigZaxl7GacYtxkvmUymBdOXmchUMNcyG5lnmA+Yb1VYKvYqfBWRyhKVOpVWlX6V56pUVXNVP9V5qgtUq1UPq15WfaZGVbNQ46kJ1Bar1akdVbupNq7OUndSj1DPUV+jvl/9gvpjDbKGhUaghkijVGO3xhmNIRbGMmXxWELWclYD6yxrmE1iW7L57Ex2Bfsbdi97TFNDc6pmrGaRZp3mcc0BDsax4PA52ZxKziHODc57LQMtPy2x1mqtZq1+rTfaetq+2mLtcu0W7eva73VwnUCdLJ31Om0693UJuja6UbqFutt1z+o+02PreekJ9cr1Dund0Uf1bfSj9Rfq79bv0R83MDQINpAZbDE4Y/DMkGPoa5hpuNHwhOGoEctoupHEaKPRSaMnuCbuh2fjNXgXPmasbxxirDTeZdxrPGFiaTLbpMSkxeS+Kc2Ua5pmutG003TMzMgs3KzYrMnsjjnVnGueYb7ZvNv8jYWlRZzFSos2i8eW2pZ8ywWWTZb3rJhWPlZ5VvVW16xJ1lzrLOtt1ldsUBtXmwybOpvLtqitm63Edptt3xTiFI8p0in1U27aMez87ArsmuwG7Tn2YfYl9m32zx3MHBId1jt0O3xydHXMdmxwvOuk4TTDqcSpw+lXZxtnoXOd8zUXpkuQyxKXdpcXU22niqdun3rLleUa7rrStdP1o5u7m9yt2W3U3cw9xX2r+00umxvJXcM970H08PdY4nHM452nm6fC85DnL152Xlle+70eT7OcJp7WMG3I28Rb4L3Le2A6Pj1l+s7pAz7GPgKfep+Hvqa+It89viN+1n6Zfgf8nvs7+sv9j/i/4XnyFvFOBWABwQHlAb2BGoGzA2sDHwSZBKUHNQWNBbsGLww+FUIMCQ1ZH3KTb8AX8hv5YzPcZyya0RXKCJ0VWhv6MMwmTB7WEY6GzwjfEH5vpvlM6cy2CIjgR2yIuB9pGZkX+X0UKSoyqi7qUbRTdHF09yzWrORZ+2e9jvGPqYy5O9tqtnJ2Z6xqbFJsY+ybuIC4qriBeIf4RfGXEnQTJAntieTE2MQ9ieNzAudsmjOc5JpUlnRjruXcorkX5unOy553PFk1WZB8OIWYEpeyP+WDIEJQLxhP5aduTR0T8oSbhU9FvqKNolGxt7hKPJLmnVaV9jjdO31D+miGT0Z1xjMJT1IreZEZkrkj801WRNberM/ZcdktOZSclJyjUg1plrQr1zC3KLdPZisrkw3keeZtyhuTh8r35CP5c/PbFWyFTNGjtFKuUA4WTC+oK3hbGFt4uEi9SFrUM99m/ur5IwuCFny9kLBQuLCz2Lh4WfHgIr9FuxYji1MXdy4xXVK6ZHhp8NJ9y2jLspb9UOJYUlXyannc8o5Sg9KlpUMrglc0lamUycturvRauWMVYZVkVe9ql9VbVn8qF5VfrHCsqK74sEa45uJXTl/VfPV5bdra3kq3yu3rSOuk626s91m/r0q9akHV0IbwDa0b8Y3lG19tSt50oXpq9Y7NtM3KzQM1YTXtW8y2rNvyoTaj9nqdf13LVv2tq7e+2Sba1r/dd3vzDoMdFTve75TsvLUreFdrvUV99W7S7oLdjxpiG7q/5n7duEd3T8Wej3ulewf2Re/ranRvbNyvv7+yCW1SNo0eSDpw5ZuAb9qb7Zp3tXBaKg7CQeXBJ9+mfHvjUOihzsPcw83fmX+39QjrSHkr0jq/dawto22gPaG97+iMo50dXh1Hvrf/fu8x42N1xzWPV56gnSg98fnkgpPjp2Snnp1OPz3Umdx590z8mWtdUV29Z0PPnj8XdO5Mt1/3yfPe549d8Lxw9CL3Ytslt0utPa49R35w/eFIr1tv62X3y+1XPK509E3rO9Hv03/6asDVc9f41y5dn3m978bsG7duJt0cuCW69fh29u0XdwruTNxdeo94r/y+2v3qB/oP6n+0/rFlwG3g+GDAYM/DWQ/vDgmHnv6U/9OH4dJHzEfVI0YjjY+dHx8bDRq98mTOk+GnsqcTz8p+Vv9563Or59/94vtLz1j82PAL+YvPv655qfNy76uprzrHI8cfvM55PfGm/K3O233vuO+638e9H5ko/ED+UPPR+mPHp9BP9z7nfP78L/eE8/sl0p8zAAAAIGNIUk0AAHolAACAgwAA+f8AAIDpAAB1MAAA6mAAADqYAAAXb5JfxUYAAAAbSURBVHjaYvz//z8DAwMDAxMDFAAAAAD//wMAMAYDAW/BVI8AAAAASUVORK5CYII=';
  19 +
  20 + var REAL_BAIDU_TEXT = '百度地图', REAL_GAODE_TEXT = '高德地图';
  21 +
  22 + // 中心点 (上海市浦东新区政府)
  23 + var CENTER_POINT = {
  24 + lng : 121.544336,
  25 + lat : 31.221315
  26 + };
  27 +
  28 + // 图层容器
  29 + var mapContainer = $('#mapContainer');
  30 + // 路况按钮
  31 + var trafficBtn = $('#trafficItem');
  32 +
  33 + var storage = window.localStorage;
  34 +
  35 + var currentMap;
  36 +
  37 + var city = "上海";
  38 +
  39 + //百度API Key
  40 + var bdKey = '1TgEKvYqohJyeGXnN6yHSSTb4psOarQw';
  41 +
  42 + var bd_gps_info_win_opts = {
  43 + width : 190,
  44 + height: 255,
  45 + enableMessage:true
  46 + };
  47 +
  48 + //线路路由
  49 + var polylines;
  50 +
  51 + //百度 -轨迹回放点聚合
  52 + //var historyClusterer;
  53 +
  54 + var markerClusterer;
  55 +
  56 + //设备号和marker对照
  57 + var markersMap;
  58 + var real_map = {
  59 + getMap: function(){
  60 + return currentMap;
  61 + },
  62 + init: function(){
  63 + var m = storage.getItem('real_map');
  64 + if(m && m == REAL_GAODE_TEXT)
  65 + real_map.gaode.init();
  66 + else
  67 + real_map.baidu.init();
  68 + },
  69 + //百度地图
  70 + baidu : {
  71 + //初始化
  72 + init : function() {
  73 + real_map.setText(REAL_BAIDU_TEXT);
  74 +
  75 + var map = new BMap.Map(mapContainer[0]);
  76 + //中心点和缩放级别
  77 + map.centerAndZoom(new BMap.Point(CENTER_POINT.lng,CENTER_POINT.lat), 15);
  78 + map.enableScrollWheelZoom();
  79 + //加载完成
  80 + map.addEventListener("tilesloaded", function() {
  81 + layer.closeAll();
  82 + storage.setItem('real_map', REAL_BAIDU_TEXT);
  83 + });
  84 +
  85 + // 路况控件
  86 + var ctrl = new BMapLib.TrafficControl();
  87 + map.addControl(ctrl);
  88 +
  89 + //historyClusterer = new BMapLib.MarkerClusterer(map, {isAverangeCenter : true,minClusterSize : 2})
  90 + var isVisible;
  91 + trafficBtn.on('click', function() {
  92 + if (isVisible) {
  93 + ctrl.hide();
  94 + isVisible = false;
  95 + //调整线路路由透明度
  96 + $.each(polylines, function(){
  97 + this.setStrokeOpacity(0.5);
  98 + });
  99 + } else {
  100 + ctrl.show();
  101 + isVisible = true;
  102 + //调整线路路由透明度
  103 + $.each(polylines, function(){
  104 + this.setStrokeOpacity(0.1);
  105 + });
  106 + }
  107 + });
  108 + //百度路况控件自身关闭按钮
  109 + $('.portlet-fullscreen').on('click', '.maplibTc .maplibTcClose', function(){
  110 + isVisible = false;
  111 + //调整线路路由透明度
  112 + $.each(polylines, function(){
  113 + this.setStrokeOpacity(0.5);
  114 + });
  115 + });
  116 +
  117 + $('#tcWrap.maplibTc').addClass('animated bounceInLeft');
  118 + $('.maplibTcBtn_deskTop.anchorTR').remove();
  119 +
  120 + //保存当前地图实例和名称
  121 + currentMap = {
  122 + map: map,
  123 + mapName: REAL_BAIDU_TEXT,
  124 + fName : 'baidu'
  125 + }
  126 +
  127 + },
  128 + clear: function(){
  129 + currentMap.map.clearOverlays();
  130 + markerClusterer && markerClusterer.clearMarkers();
  131 +
  132 + },
  133 + change : function() {
  134 + if(currentMap.mapName == REAL_BAIDU_TEXT)
  135 + return;
  136 +
  137 + showMsg(REAL_BAIDU_TEXT);
  138 +
  139 + real_map.destroy();
  140 + real_map.baidu.init();
  141 + },
  142 + autocomplete: function(input, cb){
  143 + var ac = new BMap.Autocomplete({
  144 + 'location' : realMap.getMap().map,
  145 + 'input': input,
  146 + 'onSearchComplete': function(result){
  147 + //隐藏默认的提示框
  148 + ac.hide();
  149 + cb && cb({type: 'baidu', result: result.wr});
  150 + }
  151 + });
  152 +
  153 + $('#' + input).on('keyup', function(){
  154 + if(this.value == ''){
  155 + $('.search_result').html('');
  156 + return;
  157 + }
  158 + });
  159 +
  160 + },
  161 + setPlace: function(val){
  162 + var map = currentMap.map;
  163 + map.clearOverlays();
  164 + var local = new BMap.LocalSearch(map, {
  165 + onSearchComplete: function(){
  166 + var poi = local.getResults().getPoi(0);
  167 + if(!poi){
  168 + return;
  169 + }
  170 + var pp = poi.point;
  171 + map.centerAndZoom(pp, 18);
  172 + map.addOverlay(new BMap.Marker(pp));
  173 + }
  174 + });
  175 +
  176 + local.search(val);
  177 + },
  178 + drawLine: function(route){
  179 + var map = currentMap.map;
  180 + map.clearOverlays();
  181 + polylines = [];
  182 + //画线路
  183 + //从localStorage里读取路由信息
  184 + //var route = JSON.parse(storage.getItem(lineCode + '_route'));
  185 + var upLineOps = {strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}
  186 + ,downLineOps = {strokeColor:"red", strokeWeight:6, strokeOpacity:0.5};
  187 +
  188 + var upPos = [], downPos = [], tempArray;
  189 + //上行
  190 + if(route.up){
  191 + $.each(route.up.split(','), function(){
  192 + tempArray = this.split(' ');
  193 + upPos.push(new BMap.Point(tempArray[0], tempArray[1]));
  194 + });
  195 +
  196 + var upLine = new BMap.Polyline(upPos, upLineOps);
  197 + map.addOverlay(upLine);
  198 +
  199 + polylines.push(upLine);
  200 + map.panTo(upPos[parseInt(upPos.length / 2)]);
  201 + }
  202 + //下行
  203 + if(route.down){
  204 + $.each(route.down.split(','), function(){
  205 + tempArray = this.split(' ');
  206 + downPos.push(new BMap.Point(tempArray[0], tempArray[1]));
  207 + });
  208 +
  209 + var downLine = new BMap.Polyline(downPos, downLineOps);
  210 + map.addOverlay(downLine);
  211 + polylines.push(downLine);
  212 +
  213 + }
  214 + },
  215 + //批量将GPS信号画到地图上
  216 + drawGpsMarker: function(gpsList){
  217 + markersMap = {};
  218 + var map = currentMap.map;
  219 +
  220 + markerClusterer && markerClusterer.clearMarkers();
  221 + markerClusterer = new BMapLib.MarkerClusterer(map, {isAverangeCenter : true,minClusterSize : 3});
  222 + real_map.baidu.coordsConvert(gpsList, function(){
  223 + //绘制车辆位置
  224 + var marker;
  225 + $.each(gpsList, function(i, gpsData){
  226 + marker = createBDMarkerByGps(gpsData)
  227 + map.addOverlay(marker);
  228 + //marker加入点聚合
  229 + markerClusterer.addMarker(marker);
  230 +
  231 + markersMap[gpsData.deviceId] = marker;
  232 + });
  233 +
  234 + });
  235 + },
  236 + goToMarker: function(deviceId){
  237 + var m = markersMap[deviceId];
  238 + if(m){
  239 + currentMap.map.panTo(m.point);
  240 + setTimeout(function(){
  241 + bdOpenWindow(m);
  242 + }, 500);
  243 + }
  244 + },
  245 + coordsConvert: function(list, cb){
  246 + if(list.length > 100)
  247 + list = list.slice(0, 100);
  248 +
  249 + var coords = '';
  250 + //拼接GPS坐标,一次性转换
  251 + for (var i = 0, item; item = list[i++];)
  252 + coords += item.lon + ',' + item.lat + ';';
  253 + coords = coords.substring(0, coords.length - 1);
  254 + getJSONP('//api.map.baidu.com/geoconv/v1/',{coords: coords, ak: bdKey}
  255 + ,function(rt){
  256 + $.each(rt.result, function(j, bdCoord){
  257 + list[j].bd_coord = bdCoord;
  258 + });
  259 + cb&&cb();
  260 + });
  261 + },
  262 + //绘制轨迹回放 marker
  263 + addHistoryMarker: function(gps){
  264 +
  265 + var marker = bdHistoryMarker(gps);
  266 + currentMap.map.addOverlay(marker);
  267 +
  268 + //historyClusterer.addMarker(marker);
  269 + return marker;
  270 + },
  271 + //移动marker
  272 + moveMarker: function(marker , gps){
  273 + marker.setPosition(new BMap.Point(gps.bd_lon, gps.bd_lat));
  274 + //重新设置颜色
  275 + marker.getLabel().setStyle({borderColor: bgColor(gps), backgroundColor: bgColor(gps)});
  276 + },
  277 + //居中marker
  278 + markerToCenter: function(marker){
  279 + currentMap.map.panTo(marker.getPosition());
  280 + },
  281 + //删除marker
  282 + removeMarker: function(marker){
  283 + currentMap.map.removeOverlay(marker);
  284 + }
  285 + },
  286 + //高德地图
  287 + gaode : {
  288 + init : function() {
  289 + var mapLoadAnim = '<div class="sk-cube-grid _center">'+
  290 + '<div class="sk-cube sk-cube1"></div>'+
  291 + '<div class="sk-cube sk-cube2"></div>'+
  292 + '<div class="sk-cube sk-cube3"></div>'+
  293 + '<div class="sk-cube sk-cube4"></div>'+
  294 + '<div class="sk-cube sk-cube5"></div>'+
  295 + '<div class="sk-cube sk-cube6"></div>'+
  296 + '<div class="sk-cube sk-cube7"></div>'+
  297 + '<div class="sk-cube sk-cube8"></div>'+
  298 + '<div class="sk-cube sk-cube9"></div>'+
  299 + '</div>';
  300 +
  301 + mapContainer.html(mapLoadAnim);
  302 +
  303 + real_map.gaode.setStyle();
  304 + real_map.setText(REAL_GAODE_TEXT);
  305 +
  306 + var map = new AMap.Map(mapContainer[0]);
  307 + // 地图中心和缩放级别
  308 + map.setZoomAndCenter(14, [ CENTER_POINT.lng,CENTER_POINT.lat ]);
  309 + //加载完成
  310 + AMap.event.addListener(map, 'complete', function() {
  311 + layer.closeAll();
  312 + storage.setItem('real_map', REAL_GAODE_TEXT);
  313 + $('.sk-cube-grid._center').remove();
  314 + });
  315 +
  316 + // 实时路况图层
  317 + var trafficLayer = new AMap.TileLayer.Traffic();
  318 + trafficLayer.setMap(map);
  319 + trafficLayer.hide();
  320 +
  321 + var isVisible;
  322 + trafficBtn.on('click', function() {
  323 + if (isVisible) {
  324 + trafficLayer.hide();
  325 + isVisible = false;
  326 + $(this).removeClass('active');
  327 +
  328 + //调整线路路由透明度
  329 + $.each(polylines, function(){
  330 + this.setOptions({strokeOpacity: 0.5});
  331 + });
  332 + } else {
  333 + trafficLayer.show();
  334 + isVisible = true;
  335 + $(this).addClass('active');
  336 +
  337 + //调整线路路由透明度
  338 + $.each(polylines, function(){
  339 + this.setOptions({strokeOpacity: 0.1});
  340 + });
  341 + }
  342 + });
  343 +
  344 + //保存当前地图实例和名称
  345 + currentMap = {
  346 + map: map,
  347 + mapName: REAL_GAODE_TEXT,
  348 + fName : 'gaode'
  349 + }
  350 +
  351 + },
  352 + change : function() {
  353 + if(currentMap.mapName == REAL_GAODE_TEXT)
  354 + return;
  355 +
  356 + showMsg(REAL_GAODE_TEXT);
  357 +
  358 + real_map.destroy();
  359 + real_map.gaode.init();
  360 + },
  361 + setStyle : function() {
  362 + $('.mapRightWrap').addClass('gaode');
  363 + $('.mapTools').addClass('gaode');
  364 + $('.leftUtils').addClass('gaode');
  365 + },
  366 + clearStyle : function() {
  367 + $('.mapRightWrap').removeClass('gaode');
  368 + $('.mapTools').removeClass('gaode');
  369 + $('.leftUtils').removeClass('gaode');
  370 + },
  371 + autocomplete: function(input, cb){
  372 +
  373 + AMap.plugin('AMap.Autocomplete',function(){
  374 + var autoOptions = {
  375 + city: city
  376 + };
  377 + autocomplete= new AMap.Autocomplete(autoOptions);
  378 +
  379 + $('#' + input).on('keyup', function(){
  380 + if(this.value == ''){
  381 + $('.search_result').html('');
  382 + return;
  383 + }
  384 + autocomplete.search(this.value, function(status, result){
  385 + cb & cb({type: 'gaode', result: result.tips});
  386 + });
  387 + });
  388 + });
  389 + },
  390 + setPlace: function(val){
  391 + var map = currentMap.map;
  392 +
  393 + AMap.plugin(['AMap.PlaceSearch'],function(){
  394 + var placeSearch = new AMap.PlaceSearch({
  395 + city:city,
  396 + map:map,
  397 + pageSize: 1
  398 + });
  399 +
  400 + placeSearch.search(val);
  401 + });
  402 + },
  403 + drawLine: function(route){
  404 + polylines = [];
  405 + var map = currentMap.map;
  406 + map.clearMap();
  407 +
  408 + //var route = JSON.parse(storage.getItem(lineCode + '_route'));
  409 + var upArr = [], downArr = [];
  410 +
  411 + var upLineOps = {path: upArr, strokeColor:"blue", strokeWeight:6, strokeOpacity:0.5}
  412 + ,downLineOps = {path: downArr, strokeColor:"red", strokeWeight:6, strokeOpacity:0.5};
  413 +
  414 + //上行
  415 + if(route.up){
  416 + $.each(route.up_gcj.split(','), function(){
  417 + tempArray = this.split(' ');
  418 + upArr.push([tempArray[0], tempArray[1]]);
  419 + });
  420 + var upLine = new AMap.Polyline(upLineOps);
  421 + //保存线条引用
  422 + polylines.push(upLine);
  423 +
  424 + upLine.setMap(map);
  425 + map.setCenter(upArr[parseInt(upArr.length / 2)]);
  426 +
  427 + }
  428 + //下行
  429 + if(route.down){
  430 + $.each(route.down_gcj.split(','), function(){
  431 + tempArray = this.split(' ');
  432 + downArr.push([tempArray[0], tempArray[1]]);
  433 + });
  434 + var downLine = new AMap.Polyline(downLineOps);
  435 + //保存线条引用
  436 + polylines.push(downLine);
  437 +
  438 + downLine.setMap(map);
  439 + }
  440 + },
  441 + drawGpsMarker: function(gpsList){
  442 + }
  443 + },
  444 + setText : function(text) {
  445 + $('.leftUtils span.dropdown-toggle').html(
  446 + text + ' <i class="fa fa-angle-down"></i>');
  447 + },
  448 + destroy : function() {
  449 + trafficBtn.unbind('click');
  450 +
  451 + //如果当前地图实例有destroy方法即执行
  452 + var map = currentMap.map;
  453 + map.destroy && map.destroy();
  454 +
  455 + if (currentMap.mapName == REAL_GAODE_TEXT) {
  456 + // 如果前一个地图是高德,清除相关样式
  457 + real_map.gaode.clearStyle();
  458 + }
  459 + }
  460 + }
  461 +
  462 + function showMsg(text){
  463 + layer.msg('正在切换到' + text + '...', {icon : 16,shade : [ 0.6, '#393D49' ],time : 0});
  464 + }
  465 +
  466 + /**
  467 + * 颜色
  468 + */
  469 + var bgColor = function(g){
  470 + if(g.state == 0){
  471 + if(g.upDown == 0)
  472 + return '#5E96D2';
  473 + else if(g.upDown == 1)
  474 + return '#C92121';
  475 + else
  476 + return 'red';
  477 + }
  478 + else
  479 + return "rgb(171, 171, 171)";
  480 + }
  481 +
  482 + var tColor = function(g){
  483 + if(g.state == 0)
  484 + return "#fff";
  485 + else
  486 + return "rgb(229, 229, 229)";
  487 + }
  488 +
  489 + function createBDMarkerByGps(gpsData){
  490 + //marker
  491 + var point = new BMap.Point(gpsData.bd_coord.x, gpsData.bd_coord.y)
  492 + //label
  493 + ,label = new BMap.Label(gpsData.nbbm.replace('-',''), {position: point, offset: new BMap.Size(-20,8)});
  494 + label.setStyle({borderColor: bgColor(gpsData), padding: '6px 6px 4px 6px', color: tColor(gpsData), backgroundColor: bgColor(gpsData)});
  495 + var marker = new BMap.Marker(point);
  496 + marker.setLabel(label);
  497 + //icon
  498 + marker.setIcon(new BMap.Icon(tmIcon, new BMap.Size(25,25)));
  499 + //window 绑定到 label
  500 + marker.infoWindow = new BMap.InfoWindow(bd_gps_info_win_opts);
  501 + //数据绑定到label
  502 + marker.gpsData = gpsData;
  503 +
  504 + //mouseover
  505 + label.addEventListener('mouseover', function(){
  506 + bdOpenWindow(marker);
  507 + });
  508 + return marker;
  509 + }
  510 +
  511 + function bdHistoryMarker(gps){
  512 + //marker
  513 + var point = new BMap.Point(gps.bd_lon, gps.bd_lat)
  514 + //label
  515 + ,label = new BMap.Label(gps.nbbm, {position: point, offset: new BMap.Size(-20,8)});
  516 + label.setStyle({borderColor: bgColor(gps), padding: '6px 6px 4px 6px', color: tColor(gps), backgroundColor: bgColor(gps)});
  517 + var marker = new BMap.Marker(point);
  518 + marker.setLabel(label);
  519 + //icon
  520 + marker.setIcon(new BMap.Icon(tmIcon, new BMap.Size(25,25)));
  521 +/* //window 绑定到 label
  522 + marker.infoWindow = new BMap.InfoWindow(bd_gps_info_win_opts);
  523 + //数据绑定到label
  524 + marker.gpsData = gpsData;
  525 +
  526 + //mouseover
  527 + label.addEventListener('mouseover', function(){
  528 + bdOpenWindow(marker);
  529 + });*/
  530 + return marker;
  531 + }
  532 +
  533 + function bdOpenWindow(marker){
  534 + marker.infoWindow.setContent(template('gps_info_win_temp', marker.gpsData));
  535 + currentMap.map.openInfoWindow(marker.infoWindow, marker.point);
  536 + }
  537 + return real_map;
538 })(); 538 })();
539 \ No newline at end of file 539 \ No newline at end of file
src/main/resources/static/real_control_v2/alone_page/home/home_wrap.html
1 -<!DOCTYPE html>  
2 -<html lang="zh-cn">  
3 -  
4 -<head>  
5 - <meta charset="UTF-8">  
6 - <title>主页模拟图</title>  
7 - <!-- uikit core style-->  
8 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" />  
9 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" merge="plugins"/>  
10 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" merge="plugins"/>  
11 - <link rel="stylesheet"  
12 - href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>  
13 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css" merge="plugins"/>  
14 -  
15 - <!-- main style -->  
16 - <link rel="stylesheet" href="/real_control_v2/css/main.css" />  
17 - <!-- home style -->  
18 - <link rel="stylesheet" href="/real_control_v2/css/home.css" merge="custom_style"/>  
19 -  
20 - <!-- custom table -->  
21 - <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>  
22 - <!-- jquery contextMenu style -->  
23 - <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" merge="plugins"/>  
24 - <!-- formvalidation style -->  
25 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css" merge="plugins"/>  
26 - <!-- js tree -->  
27 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>  
28 - <!-- tooltip css-->  
29 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css" merge="plugins"/>  
30 - <link rel="stylesheet" href="/real_control_v2/css/pace.css" merge="plugins"/>  
31 -  
32 - <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>  
33 - <!-- perfect-scrollbar style -->  
34 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" merge="plugins"/>  
35 - <!-- layer 3.0.3 -->  
36 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/default/layer.css" merge="plugins"/>  
37 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/moon/style.css" merge="plugins"/>  
38 -  
39 -  
40 - <style>  
41 - .main-container{  
42 - height: 100% !important;  
43 - }  
44 -  
45 - #main-tab-content{  
46 - padding: 0 !important;  
47 - list-style: none;  
48 - }  
49 -  
50 - .home-panel{  
51 -  
52 - }  
53 -  
54 - #home-main-content{  
55 - padding: 0 !important;  
56 - }  
57 -  
58 - #main-tab-content>.home-panel>#home-main-content{  
59 - overflow: inherit !important;  
60 - }  
61 - </style>  
62 -</head>  
63 -  
64 -<body>  
65 -<!--<div class="main-container" style="height: 100%;">  
66 -</div>-->  
67 -<div class="main-container">  
68 - <ul id="main-tab-content">  
69 - <li class="home-panel"></li>  
70 - </ul>  
71 -</div>  
72 -  
73 -  
74 -<!-- 地图相关 -->  
75 -<script src="//api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>  
76 -<script src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>  
77 -<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>  
78 -<script src="/assets/js/CoordinateConverter.js" merge="plugins"></script>  
79 -<!-- jquery -->  
80 -<script src="/real_control_v2/assets/js/jquery.min.js"></script>  
81 -<!-- jquery actual -->  
82 -<script src="/real_control_v2/assets/js/jquery.actual.min.js" merge="plugins"></script>  
83 -<!-- jquery.serializejson JSON序列化插件 -->  
84 -<script src="/assets/plugins/jquery.serializejson.js" merge="plugins"></script>  
85 -<!-- moment.js 日期处理类库 -->  
86 -<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>  
87 -<script src="/real_control_v2/assets/plugins/moment/zh-cn.js"></script>  
88 -  
89 -<!-- flatpickr -->  
90 -<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" merge="plugins"></script>  
91 -<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" merge="plugins"></script>  
92 -  
93 -<!-- perfect-scrollbar -->  
94 -<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>  
95 -<!-- common js -->  
96 -<script src="/real_control_v2/js/common.js"></script>  
97 -<!-- art-template 模版引擎 -->  
98 -<script src="/assets/plugins/template.js" merge="plugins"></script>  
99 -<!-- d3 -->  
100 -<script src="/assets/js/d3.min.js"></script>  
101 -<!-- EventProxy -->  
102 -<script src="/assets/js/eventproxy.js"></script>  
103 -<!-- Geolib -->  
104 -<script src="/real_control_v2/geolib/geolib.js" merge="plugins"></script>  
105 -  
106 -<script>  
107 -  
108 -  
109 - var res_load_ep = EventProxy.create('load_home_layout', 'load_home_line_panel', 'load_data_basic', 'data-basic', function () {  
110 - //加载主页  
111 - gb_home_layout.layout(function () {  
112 - gb_home_line_panel.init(function () {  
113 - //gps自刷新  
114 - gb_data_gps.fixedTimeRefresh();  
115 -  
116 - $('.uk-icon-send-o.home_alone_page').remove();  
117 - });  
118 - });  
119 - });  
120 -  
121 - function connectArr(arr, separator, transFun) {  
122 - var rs = '';  
123 - $.each(arr, function (i, item) {  
124 - if (transFun)  
125 - item = transFun(item);  
126 - rs += (separator + item);  
127 - });  
128 - return rs.substr(separator.length);  
129 - }  
130 -  
131 - var isArray = function (obj) {  
132 - return Object.prototype.toString.call(obj) === '[object Array]';  
133 - };  
134 -  
135 - var gb_form_validation_opts = {  
136 - framework: 'uikit',  
137 - locale: 'zh_CN',  
138 - icon: {  
139 - valid: 'uk-icon-check',  
140 - invalid: 'uk-icon-times',  
141 - validating: 'uk-icon-refresh'  
142 - }  
143 - };  
144 -  
145 -</script>  
146 -  
147 -<!-- uikit core -->  
148 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js" merge="uikit_js"></script>  
149 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js" merge="uikit_js"></script>  
150 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js" merge="uikit_js"></script>  
151 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js" merge="uikit_js"></script>  
152 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js" merge="uikit_js"></script>  
153 -  
154 -  
155 -<!-- jquery contextMenu -->  
156 -<script src="/real_control_v2/assets/js/jquery.contextMenu.min.js" merge="plugins"></script>  
157 -<script src="/real_control_v2/assets/js/jquery.ui.position.min.js" merge="plugins"></script>  
158 -<!-- formvalidation- -->  
159 -<script src="/real_control_v2/assets/plugins/formvalidation/formValidation.min.js" merge="plugins"></script>  
160 -<script src="/real_control_v2/assets/plugins/formvalidation/zh_CN.js" merge="plugins"></script>  
161 -<script src="/real_control_v2/assets/plugins/formvalidation/uikit.min.js" merge="plugins"></script>  
162 -<!-- js tree -->  
163 -<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>  
164 -<!-- simple pinyin -->  
165 -<script src="/assets/plugins/pinyin.js" merge="plugins"></script>  
166 -<!-- qtip -->  
167 -<script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js" merge="plugins"></script>  
168 -<!-- layer 3.0.3 -->  
169 -<script src="/real_control_v2/assets/plugins/layer3.0.3/layer.js" merge="plugins"></script>  
170 -  
171 -<!-- 数据 -->  
172 -<script src="/real_control_v2/alone_page/home/alone_data_basic.js" merge="custom_js"></script>  
173 -<script src="/real_control_v2/alone_page/home/alone_data_gps.js" merge="custom_js"></script>  
174 -<script src="/real_control_v2/js/data/gps_abnormal.js" merge="custom_js"></script>  
175 -<!-- 线路模拟图 -->  
176 -<script src="/real_control_v2/js/utils/svg_chart.js" merge="custom_js"></script>  
177 -<script src="/real_control_v2/js/utils/svg_data_convert.js" merge="custom_js"></script>  
178 -<script src="/real_control_v2/js/utils/svg_chart_tooltip.js" merge="custom_js"></script>  
179 -<script src="/real_control_v2/js/utils/svg_chart_map.js" merge="custom_js"></script>  
180 -  
181 -<!-- custom table js -->  
182 -<script src="/real_control_v2/js/utils/ct_table.js" merge="custom_js"></script>  
183 -<!-- home js -->  
184 -<script src="/real_control_v2/js/home/layout.js" merge="custom_js"></script>  
185 -<script src="/real_control_v2/js/home/line_panel.js" merge="custom_js"></script>  
186 -<script src="/real_control_v2/js/home/context_menu.js" merge="custom_js"></script>  
187 -  
188 -  
189 -<!-- 模态框扩展 -->  
190 -<script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>  
191 -  
192 -</body>  
193 -  
194 -</html> 1 +<!DOCTYPE html>
  2 +<html lang="zh-cn">
  3 +
  4 +<head>
  5 + <meta charset="UTF-8">
  6 + <title>主页模拟图</title>
  7 + <!-- uikit core style-->
  8 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" />
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" merge="plugins"/>
  10 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" merge="plugins"/>
  11 + <link rel="stylesheet"
  12 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>
  13 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css" merge="plugins"/>
  14 +
  15 + <!-- main style -->
  16 + <link rel="stylesheet" href="/real_control_v2/css/main.css" />
  17 + <!-- home style -->
  18 + <link rel="stylesheet" href="/real_control_v2/css/home.css" merge="custom_style"/>
  19 +
  20 + <!-- custom table -->
  21 + <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>
  22 + <!-- jquery contextMenu style -->
  23 + <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" merge="plugins"/>
  24 + <!-- formvalidation style -->
  25 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css" merge="plugins"/>
  26 + <!-- js tree -->
  27 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>
  28 + <!-- tooltip css-->
  29 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css" merge="plugins"/>
  30 + <link rel="stylesheet" href="/real_control_v2/css/pace.css" merge="plugins"/>
  31 +
  32 + <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>
  33 + <!-- perfect-scrollbar style -->
  34 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" merge="plugins"/>
  35 + <!-- layer 3.0.3 -->
  36 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/default/layer.css" merge="plugins"/>
  37 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/moon/style.css" merge="plugins"/>
  38 +
  39 +
  40 + <style>
  41 + .main-container{
  42 + height: 100% !important;
  43 + }
  44 +
  45 + #main-tab-content{
  46 + padding: 0 !important;
  47 + list-style: none;
  48 + }
  49 +
  50 + .home-panel{
  51 +
  52 + }
  53 +
  54 + #home-main-content{
  55 + padding: 0 !important;
  56 + }
  57 +
  58 + #main-tab-content>.home-panel>#home-main-content{
  59 + overflow: inherit !important;
  60 + }
  61 + </style>
  62 +</head>
  63 +
  64 +<body>
  65 +<!--<div class="main-container" style="height: 100%;">
  66 +</div>-->
  67 +<div class="main-container">
  68 + <ul id="main-tab-content">
  69 + <li class="home-panel"></li>
  70 + </ul>
  71 +</div>
  72 +
  73 +
  74 +<!-- 地图相关 -->
  75 +<script src="//api.map.baidu.com/api?v=2.0&ak=1TgEKvYqohJyeGXnN6yHSSTb4psOarQw"></script>
  76 +<script src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
  77 +<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>
  78 +<script src="/assets/js/CoordinateConverter.js" merge="plugins"></script>
  79 +<!-- jquery -->
  80 +<script src="/real_control_v2/assets/js/jquery.min.js"></script>
  81 +<!-- jquery actual -->
  82 +<script src="/real_control_v2/assets/js/jquery.actual.min.js" merge="plugins"></script>
  83 +<!-- jquery.serializejson JSON序列化插件 -->
  84 +<script src="/assets/plugins/jquery.serializejson.js" merge="plugins"></script>
  85 +<!-- moment.js 日期处理类库 -->
  86 +<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
  87 +<script src="/real_control_v2/assets/plugins/moment/zh-cn.js"></script>
  88 +
  89 +<!-- flatpickr -->
  90 +<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" merge="plugins"></script>
  91 +<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" merge="plugins"></script>
  92 +
  93 +<!-- perfect-scrollbar -->
  94 +<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>
  95 +<!-- common js -->
  96 +<script src="/real_control_v2/js/common.js"></script>
  97 +<!-- art-template 模版引擎 -->
  98 +<script src="/assets/plugins/template.js" merge="plugins"></script>
  99 +<!-- d3 -->
  100 +<script src="/assets/js/d3.min.js"></script>
  101 +<!-- EventProxy -->
  102 +<script src="/assets/js/eventproxy.js"></script>
  103 +<!-- Geolib -->
  104 +<script src="/real_control_v2/geolib/geolib.js" merge="plugins"></script>
  105 +
  106 +<script>
  107 +
  108 +
  109 + var res_load_ep = EventProxy.create('load_home_layout', 'load_home_line_panel', 'load_data_basic', 'data-basic', function () {
  110 + //加载主页
  111 + gb_home_layout.layout(function () {
  112 + gb_home_line_panel.init(function () {
  113 + //gps自刷新
  114 + gb_data_gps.fixedTimeRefresh();
  115 +
  116 + $('.uk-icon-send-o.home_alone_page').remove();
  117 + });
  118 + });
  119 + });
  120 +
  121 + function connectArr(arr, separator, transFun) {
  122 + var rs = '';
  123 + $.each(arr, function (i, item) {
  124 + if (transFun)
  125 + item = transFun(item);
  126 + rs += (separator + item);
  127 + });
  128 + return rs.substr(separator.length);
  129 + }
  130 +
  131 + var isArray = function (obj) {
  132 + return Object.prototype.toString.call(obj) === '[object Array]';
  133 + };
  134 +
  135 + var gb_form_validation_opts = {
  136 + framework: 'uikit',
  137 + locale: 'zh_CN',
  138 + icon: {
  139 + valid: 'uk-icon-check',
  140 + invalid: 'uk-icon-times',
  141 + validating: 'uk-icon-refresh'
  142 + }
  143 + };
  144 +
  145 +</script>
  146 +
  147 +<!-- uikit core -->
  148 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js" merge="uikit_js"></script>
  149 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js" merge="uikit_js"></script>
  150 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js" merge="uikit_js"></script>
  151 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js" merge="uikit_js"></script>
  152 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js" merge="uikit_js"></script>
  153 +
  154 +
  155 +<!-- jquery contextMenu -->
  156 +<script src="/real_control_v2/assets/js/jquery.contextMenu.min.js" merge="plugins"></script>
  157 +<script src="/real_control_v2/assets/js/jquery.ui.position.min.js" merge="plugins"></script>
  158 +<!-- formvalidation- -->
  159 +<script src="/real_control_v2/assets/plugins/formvalidation/formValidation.min.js" merge="plugins"></script>
  160 +<script src="/real_control_v2/assets/plugins/formvalidation/zh_CN.js" merge="plugins"></script>
  161 +<script src="/real_control_v2/assets/plugins/formvalidation/uikit.min.js" merge="plugins"></script>
  162 +<!-- js tree -->
  163 +<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>
  164 +<!-- simple pinyin -->
  165 +<script src="/assets/plugins/pinyin.js" merge="plugins"></script>
  166 +<!-- qtip -->
  167 +<script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js" merge="plugins"></script>
  168 +<!-- layer 3.0.3 -->
  169 +<script src="/real_control_v2/assets/plugins/layer3.0.3/layer.js" merge="plugins"></script>
  170 +
  171 +<!-- 数据 -->
  172 +<script src="/real_control_v2/alone_page/home/alone_data_basic.js" merge="custom_js"></script>
  173 +<script src="/real_control_v2/alone_page/home/alone_data_gps.js" merge="custom_js"></script>
  174 +<script src="/real_control_v2/js/data/gps_abnormal.js" merge="custom_js"></script>
  175 +<!-- 线路模拟图 -->
  176 +<script src="/real_control_v2/js/utils/svg_chart.js" merge="custom_js"></script>
  177 +<script src="/real_control_v2/js/utils/svg_data_convert.js" merge="custom_js"></script>
  178 +<script src="/real_control_v2/js/utils/svg_chart_tooltip.js" merge="custom_js"></script>
  179 +<script src="/real_control_v2/js/utils/svg_chart_map.js" merge="custom_js"></script>
  180 +
  181 +<!-- custom table js -->
  182 +<script src="/real_control_v2/js/utils/ct_table.js" merge="custom_js"></script>
  183 +<!-- home js -->
  184 +<script src="/real_control_v2/js/home/layout.js" merge="custom_js"></script>
  185 +<script src="/real_control_v2/js/home/line_panel.js" merge="custom_js"></script>
  186 +<script src="/real_control_v2/js/home/context_menu.js" merge="custom_js"></script>
  187 +
  188 +
  189 +<!-- 模态框扩展 -->
  190 +<script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>
  191 +
  192 +</body>
  193 +
  194 +</html>
src/main/resources/static/real_control_v2/alone_page/map/alone_wrap.html
1 -<!DOCTYPE html>  
2 -<html lang="zh-cn">  
3 -  
4 -<head>  
5 - <meta charset="UTF-8">  
6 - <title>地图监控 v2.0</title>  
7 - <!-- uikit core style-->  
8 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css"/>  
9 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css"  
10 - merge="plugins"/>  
11 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css"  
12 - merge="plugins"/>  
13 - <link rel="stylesheet"  
14 - href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>  
15 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css"  
16 - merge="plugins"/>  
17 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css"  
18 - merge="plugins"/>  
19 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css"  
20 - merge="plugins"/>  
21 -  
22 - <!-- main style -->  
23 - <link rel="stylesheet" href="/real_control_v2/css/main.css"/>  
24 - <!-- north style -->  
25 - <link rel="stylesheet" href="/real_control_v2/css/north.css" merge="custom_style"/>  
26 - <!-- home style -->  
27 - <link rel="stylesheet" href="/real_control_v2/css/home.css" merge="custom_style"/>  
28 -  
29 - <!-- js tree -->  
30 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>  
31 -  
32 - <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>  
33 - <!-- perfect-scrollbar style -->  
34 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css"  
35 - merge="plugins"/>  
36 - <!-- layer 3.0.3 -->  
37 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/default/layer.css" merge="plugins"/>  
38 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/moon/style.css" merge="plugins"/>  
39 -  
40 - <!-- flatpickr -->  
41 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css" merge="plugins"/>  
42 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/themes/airbnb.css" merge="plugins"/>  
43 -  
44 - <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>  
45 -  
46 - <style>  
47 - .main-container .map-panel{  
48 - position: absolute;  
49 - top:0;  
50 - left: 0;  
51 - width: 20px;  
52 - z-index: 999;  
53 - height: 20px;  
54 - }  
55 - </style>  
56 -</head>  
57 -  
58 -<body>  
59 -<div class="main-container" style="height: 100%;">  
60 - <span style="position: absolute;left: calc(50% - 35px);top: calc(45% - 35px);">加载中...</span>  
61 -</div>  
62 -<!-- 地图相关 -->  
63 -<script src="//api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>  
64 -<script src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>  
65 -<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>  
66 -<script src="/assets/js/CoordinateConverter.js" merge="plugins"></script>  
67 -<!-- 高德 -->  
68 -<script src="//webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"></script>  
69 -<!-- jquery -->  
70 -<script src="/real_control_v2/assets/js/jquery.min.js"></script>  
71 -<!-- jquery actual -->  
72 -<script src="/real_control_v2/assets/js/jquery.actual.min.js" merge="plugins"></script>  
73 -<!-- moment.js 日期处理类库 -->  
74 -<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>  
75 -<script src="/real_control_v2/assets/plugins/moment/zh-cn.js"></script>  
76 -  
77 -<!-- flatpickr -->  
78 -<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" merge="plugins"></script>  
79 -<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" merge="plugins"></script>  
80 -  
81 -<!-- perfect-scrollbar -->  
82 -<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>  
83 -<!-- common js -->  
84 -<script src="/real_control_v2/js/common.js"></script>  
85 -<!-- art-template 模版引擎 -->  
86 -<script src="/assets/plugins/template.js" merge="plugins"></script>  
87 -<!-- d3 -->  
88 -<script src="/assets/js/d3.min.js"></script>  
89 -<!-- EventProxy -->  
90 -<script src="/assets/js/eventproxy.js"></script>  
91 -<!-- uikit core -->  
92 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js" merge="uikit_js"></script>  
93 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js" merge="uikit_js"></script>  
94 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js" merge="uikit_js"></script>  
95 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js" merge="uikit_js"></script>  
96 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js" merge="uikit_js"></script>  
97 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js" merge="uikit_js"></script>  
98 -  
99 -<!-- js tree -->  
100 -<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>  
101 -<!-- layer 3.0.3 -->  
102 -<script src="/real_control_v2/assets/plugins/layer3.0.3/layer.js" merge="plugins"></script>  
103 -  
104 -<!-- 模态框扩展 -->  
105 -<script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>  
106 -  
107 -<script src="/real_control_v2/alone_page/map/alone_data_basic.js" merge="custom_js"></script>  
108 -<script src="/real_control_v2/alone_page/map/alone_data_gps.js" merge="custom_js"></script>  
109 -<script src="/real_control_v2/js/utils/ct_table.js" merge="custom_js"></script>  
110 -<!-- jquery.serializejson JSON序列化插件 -->  
111 -<script src="/assets/plugins/jquery.serializejson.js" merge="uikit_js"></script>  
112 -  
113 -<script src="/assets/plugins/pinyin.js" merge="plugins"></script>  
114 -</body>  
115 -<script>  
116 - gb_data_gps.fixedTimeRefresh();  
117 - var res_load_ep = EventProxy.create('data-basic', function () {  
118 -  
119 - //嵌入地图页面  
120 - $('.main-container').load('/real_control_v2/mapmonitor/real.html', function () {  
121 - $('.map-system-msg.flex-left').remove();  
122 -  
123 - $(this).append('<span class="map-panel"></span>');//判断里有JS判定这个容器是否显示  
124 - });  
125 - });  
126 -  
127 - var isArray = function (obj) {  
128 - return Object.prototype.toString.call(obj) === '[object Array]';  
129 - };  
130 -</script>  
131 -</html> 1 +<!DOCTYPE html>
  2 +<html lang="zh-cn">
  3 +
  4 +<head>
  5 + <meta charset="UTF-8">
  6 + <title>地图监控 v2.0</title>
  7 + <!-- uikit core style-->
  8 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css"/>
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css"
  10 + merge="plugins"/>
  11 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css"
  12 + merge="plugins"/>
  13 + <link rel="stylesheet"
  14 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>
  15 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css"
  16 + merge="plugins"/>
  17 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css"
  18 + merge="plugins"/>
  19 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css"
  20 + merge="plugins"/>
  21 +
  22 + <!-- main style -->
  23 + <link rel="stylesheet" href="/real_control_v2/css/main.css"/>
  24 + <!-- north style -->
  25 + <link rel="stylesheet" href="/real_control_v2/css/north.css" merge="custom_style"/>
  26 + <!-- home style -->
  27 + <link rel="stylesheet" href="/real_control_v2/css/home.css" merge="custom_style"/>
  28 +
  29 + <!-- js tree -->
  30 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>
  31 +
  32 + <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>
  33 + <!-- perfect-scrollbar style -->
  34 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css"
  35 + merge="plugins"/>
  36 + <!-- layer 3.0.3 -->
  37 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/default/layer.css" merge="plugins"/>
  38 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/moon/style.css" merge="plugins"/>
  39 +
  40 + <!-- flatpickr -->
  41 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css" merge="plugins"/>
  42 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/themes/airbnb.css" merge="plugins"/>
  43 +
  44 + <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>
  45 +
  46 + <style>
  47 + .main-container .map-panel{
  48 + position: absolute;
  49 + top:0;
  50 + left: 0;
  51 + width: 20px;
  52 + z-index: 999;
  53 + height: 20px;
  54 + }
  55 + </style>
  56 +</head>
  57 +
  58 +<body>
  59 +<div class="main-container" style="height: 100%;">
  60 + <span style="position: absolute;left: calc(50% - 35px);top: calc(45% - 35px);">加载中...</span>
  61 +</div>
  62 +<!-- 地图相关 -->
  63 +<script src="//api.map.baidu.com/api?v=2.0&ak=1TgEKvYqohJyeGXnN6yHSSTb4psOarQw"></script>
  64 +<script src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
  65 +<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>
  66 +<script src="/assets/js/CoordinateConverter.js" merge="plugins"></script>
  67 +<!-- 高德 -->
  68 +<script src="//webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"></script>
  69 +<!-- jquery -->
  70 +<script src="/real_control_v2/assets/js/jquery.min.js"></script>
  71 +<!-- jquery actual -->
  72 +<script src="/real_control_v2/assets/js/jquery.actual.min.js" merge="plugins"></script>
  73 +<!-- moment.js 日期处理类库 -->
  74 +<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
  75 +<script src="/real_control_v2/assets/plugins/moment/zh-cn.js"></script>
  76 +
  77 +<!-- flatpickr -->
  78 +<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" merge="plugins"></script>
  79 +<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" merge="plugins"></script>
  80 +
  81 +<!-- perfect-scrollbar -->
  82 +<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>
  83 +<!-- common js -->
  84 +<script src="/real_control_v2/js/common.js"></script>
  85 +<!-- art-template 模版引擎 -->
  86 +<script src="/assets/plugins/template.js" merge="plugins"></script>
  87 +<!-- d3 -->
  88 +<script src="/assets/js/d3.min.js"></script>
  89 +<!-- EventProxy -->
  90 +<script src="/assets/js/eventproxy.js"></script>
  91 +<!-- uikit core -->
  92 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js" merge="uikit_js"></script>
  93 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js" merge="uikit_js"></script>
  94 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js" merge="uikit_js"></script>
  95 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js" merge="uikit_js"></script>
  96 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js" merge="uikit_js"></script>
  97 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js" merge="uikit_js"></script>
  98 +
  99 +<!-- js tree -->
  100 +<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>
  101 +<!-- layer 3.0.3 -->
  102 +<script src="/real_control_v2/assets/plugins/layer3.0.3/layer.js" merge="plugins"></script>
  103 +
  104 +<!-- 模态框扩展 -->
  105 +<script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>
  106 +
  107 +<script src="/real_control_v2/alone_page/map/alone_data_basic.js" merge="custom_js"></script>
  108 +<script src="/real_control_v2/alone_page/map/alone_data_gps.js" merge="custom_js"></script>
  109 +<script src="/real_control_v2/js/utils/ct_table.js" merge="custom_js"></script>
  110 +<!-- jquery.serializejson JSON序列化插件 -->
  111 +<script src="/assets/plugins/jquery.serializejson.js" merge="uikit_js"></script>
  112 +
  113 +<script src="/assets/plugins/pinyin.js" merge="plugins"></script>
  114 +</body>
  115 +<script>
  116 + gb_data_gps.fixedTimeRefresh();
  117 + var res_load_ep = EventProxy.create('data-basic', function () {
  118 +
  119 + //嵌入地图页面
  120 + $('.main-container').load('/real_control_v2/mapmonitor/real.html', function () {
  121 + $('.map-system-msg.flex-left').remove();
  122 +
  123 + $(this).append('<span class="map-panel"></span>');//判断里有JS判定这个容器是否显示
  124 + });
  125 + });
  126 +
  127 + var isArray = function (obj) {
  128 + return Object.prototype.toString.call(obj) === '[object Array]';
  129 + };
  130 +</script>
  131 +</html>
src/main/resources/static/real_control_v2/main.html
1 -<!DOCTYPE html>  
2 -<html lang="zh-cn">  
3 -  
4 -<head>  
5 - <meta charset="UTF-8">  
6 - <title>线路调度 v2.0</title>  
7 - <!-- uikit core style-->  
8 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" />  
9 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" merge="plugins"/>  
10 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" merge="plugins"/>  
11 - <link rel="stylesheet"  
12 - href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>  
13 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css" merge="plugins"/>  
14 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css" merge="plugins"/>  
15 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css" merge="plugins"/>  
16 -  
17 - <!-- main style -->  
18 - <link rel="stylesheet" href="/real_control_v2/css/main.css" />  
19 - <!-- north style -->  
20 - <link rel="stylesheet" href="/real_control_v2/css/north.css" merge="custom_style"/>  
21 - <!-- home style -->  
22 - <link rel="stylesheet" href="/real_control_v2/css/home.css" merge="custom_style"/>  
23 - <!-- line style -->  
24 - <link rel="stylesheet" href="/real_control_v2/css/line_schedule.css" merge="custom_style"/>  
25 - <link rel="stylesheet" href="/real_control_v2/css/line_schedule_table.css" merge="custom_style"/>  
26 -  
27 - <link rel="stylesheet" href="/real_control_v2/css/sch_autocomp_result.css" merge="custom_style"/>  
28 - <!-- custom table -->  
29 - <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>  
30 - <!-- jquery contextMenu style -->  
31 - <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" merge="plugins"/>  
32 - <!-- formvalidation style -->  
33 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css" merge="plugins"/>  
34 - <!-- js tree -->  
35 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>  
36 - <!-- tooltip css-->  
37 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css" merge="plugins"/>  
38 - <link rel="stylesheet" href="/real_control_v2/css/pace.css" merge="plugins"/>  
39 -  
40 - <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>  
41 - <!-- perfect-scrollbar style -->  
42 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" merge="plugins"/>  
43 - <!-- layer 3.0.3 -->  
44 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/default/layer.css" merge="plugins"/>  
45 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/moon/style.css" merge="plugins"/>  
46 -  
47 - <!-- flatpickr -->  
48 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css" merge="plugins">  
49 - <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/themes/airbnb.css" merge="plugins">  
50 -</head>  
51 -  
52 -<body>  
53 -<div class="north uk-width-1-1 uk-panel-box">  
54 - <div class="uk-grid uk-grid-match">  
55 - <div class="uk-width-4-10">  
56 - <div class="uk-panel">  
57 - <h2 class="north-logo">  
58 - <!--<i class="uk-icon-life-ring"></i>--> 浦东公交线路调度  
59 - </h2>  
60 - </div>  
61 - </div>  
62 - <div class="uk-width-6-10">  
63 - <div class="uk-panel uk-width north-toolbar"></div>  
64 - </div>  
65 - </div>  
66 - <div class="north-tabs"></div>  
67 -</div>  
68 -  
69 -<div class="main-container">  
70 - <div class="load-panel">  
71 - <i class="uk-icon-spinner uk-icon-spin"></i>  
72 - 正在加载数据  
73 - </div>  
74 -</div>  
75 -  
76 -<script>  
77 -/* var gb_beforeunload_fun = function (e) {  
78 - var confirmationMessage = "\o/";  
79 - (e || window.event).returnValue = confirmationMessage;  
80 - return confirmationMessage;  
81 - }  
82 - window.addEventListener("beforeunload", gb_beforeunload_fun);*/  
83 -  
84 - delete window.exports;  
85 - delete window.module;  
86 -  
87 - var ipcMain;  
88 - //是否处于electron环境下  
89 - var isElectron = (function () {  
90 - try {  
91 - if (process.versions.electron)  
92 - return true;  
93 - else  
94 - return false;  
95 - }  
96 - catch (e) {  
97 - return false;  
98 - }  
99 - })();  
100 -  
101 - if (isElectron) {  
102 - var link = document.createElement("link");  
103 - link.type = "text/css";  
104 - link.rel = "stylesheet";  
105 - link.href = "/real_control_v2/css/electron.css";  
106 - document.getElementsByTagName("head")[0].appendChild(link);  
107 -  
108 - ipcMain = require('electron').ipcRenderer;  
109 - }  
110 -</script>  
111 -  
112 -<!-- 地图相关 -->  
113 -<script src="//api.map.baidu.com/api?v=2.0&ak=IGGrr4UjwIYzatoCRFKEL8sT"></script>  
114 -<script src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>  
115 -<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>  
116 -<script src="/assets/js/CoordinateConverter.js" merge="plugins"></script>  
117 -<!-- 高德 -->  
118 -<script src="//webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"></script>  
119 -<!-- jquery -->  
120 -<script src="/real_control_v2/assets/js/jquery.min.js"></script>  
121 -<!-- jquery actual -->  
122 -<script src="/real_control_v2/assets/js/jquery.actual.min.js" merge="plugins"></script>  
123 -<!-- jquery.serializejson JSON序列化插件 -->  
124 -<script src="/assets/plugins/jquery.serializejson.js" merge="plugins"></script>  
125 -<!-- moment.js 日期处理类库 -->  
126 -<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>  
127 -<script src="/real_control_v2/assets/plugins/moment/zh-cn.js"></script>  
128 -<!-- jquery.pageinator 分页 -->  
129 -<script src="/assets/plugins/jqPaginator.min.js"></script>  
130 -  
131 -<!-- flatpickr -->  
132 -<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" merge="plugins"></script>  
133 -<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" merge="plugins"></script>  
134 -  
135 -<!-- perfect-scrollbar -->  
136 -<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>  
137 -<!-- common js -->  
138 -<script src="/real_control_v2/js/common.js"></script>  
139 -<!-- art-template 模版引擎 -->  
140 -<script src="/assets/plugins/template.js" merge="plugins"></script>  
141 -<!-- d3 -->  
142 -<script src="/assets/js/d3.min.js"></script>  
143 -<!-- EventProxy -->  
144 -<script src="/assets/js/eventproxy.js"></script>  
145 -<!-- main js -->  
146 -<script src="/real_control_v2/js/main.js"></script>  
147 -<!-- uikit core -->  
148 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js" merge="uikit_js"></script>  
149 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js" merge="uikit_js"></script>  
150 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js" merge="uikit_js"></script>  
151 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js" merge="uikit_js"></script>  
152 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js" merge="uikit_js"></script>  
153 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js" merge="uikit_js"></script>  
154 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js" merge="uikit_js"></script>  
155 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/lightbox.min.js" merge="uikit_js"></script>  
156 -<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js" merge="uikit_js"></script>  
157 -  
158 -  
159 -<!-- jquery contextMenu -->  
160 -<script src="/real_control_v2/assets/js/jquery.contextMenu.min.js" merge="plugins"></script>  
161 -<script src="/real_control_v2/assets/js/jquery.ui.position.min.js" merge="plugins"></script>  
162 -<!-- formvalidation- -->  
163 -<script src="/real_control_v2/assets/plugins/formvalidation/formValidation.min.js" merge="plugins"></script>  
164 -<script src="/real_control_v2/assets/plugins/formvalidation/zh_CN.js" merge="plugins"></script>  
165 -<script src="/real_control_v2/assets/plugins/formvalidation/uikit.min.js" merge="plugins"></script>  
166 -<!-- js tree -->  
167 -<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>  
168 -<!-- simple pinyin -->  
169 -<script src="/assets/plugins/pinyin.js" merge="plugins"></script>  
170 -<!-- qtip -->  
171 -<script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js" merge="plugins"></script>  
172 -<!-- layer 3.0.3 -->  
173 -<script src="/real_control_v2/assets/plugins/layer3.0.3/layer.js" merge="plugins"></script>  
174 -  
175 -<!-- 数据 -->  
176 -<script src="/real_control_v2/js/data/data_basic.js" merge="custom_js"></script>  
177 -<script src="/real_control_v2/js/data/data_gps.js" merge="custom_js"></script>  
178 -<script src="/real_control_v2/js/data/gps_abnormal.js" merge="custom_js"></script>  
179 -<script src="/real_control_v2/js/data/data_line_config.js" merge="custom_js"></script>  
180 -<!-- 线路模拟图 -->  
181 -<script src="/real_control_v2/js/utils/svg_chart.js" merge="custom_js"></script>  
182 -<script src="/real_control_v2/js/utils/svg_data_convert.js" merge="custom_js"></script>  
183 -<script src="/real_control_v2/js/utils/svg_chart_tooltip.js" merge="custom_js"></script>  
184 -<script src="/real_control_v2/js/utils/svg_chart_map.js" merge="custom_js"></script>  
185 -  
186 -<!-- custom table js -->  
187 -<script src="/real_control_v2/js/utils/ct_table.js" merge="custom_js"></script>  
188 -<!-- north js -->  
189 -<script src="/real_control_v2/js/north/toolbar.js" merge="custom_js"></script>  
190 -<script src="/real_control_v2/js/north/tabs.js" merge="custom_js"></script>  
191 -<script src="/real_control_v2/js/north/second_timer.js" merge="custom_js"></script>  
192 -<!-- home js -->  
193 -<script src="/real_control_v2/js/home/layout.js" merge="custom_js"></script>  
194 -<script src="/real_control_v2/js/home/line_panel.js" merge="custom_js"></script>  
195 -<script src="/real_control_v2/js/home/context_menu.js" merge="custom_js"></script>  
196 -<!-- line schedule js -->  
197 -<script src="/real_control_v2/js/line_schedule/legend.js" merge="custom_js"></script>  
198 -<script src="/real_control_v2/js/line_schedule/layout.js" merge="custom_js"></script>  
199 -<script src="/real_control_v2/js/line_schedule/sch_table.js" merge="custom_js"></script>  
200 -<script src="/real_control_v2/js/line_schedule/context_menu.js" merge="custom_js"></script>  
201 -<script src="/real_control_v2/js/line_schedule/dbclick.js" merge="custom_js"></script>  
202 -<script src="/real_control_v2/js/line_schedule/search.js" merge="custom_js"></script>  
203 -<script src="/real_control_v2/js/line_schedule/badge_tooltip.js" merge="custom_js"></script>  
204 -<script src="/real_control_v2/js/line_schedule/mileage_count.js" merge="custom_js"></script>  
205 -  
206 -<!-- 字典相关 -->  
207 -<script src="/assets/js/dictionary.js" merge="custom_js"></script>  
208 -<!-- websocket -->  
209 -<script src="/real_control_v2/assets/plugins/sockjs-client/sockjs.min.js"></script>  
210 -<script src="/real_control_v2/js/websocket/sch_websocket.js" merge="custom_js"></script>  
211 -<!-- tts -->  
212 -<script src="/real_control_v2/js/utils/tts.js" merge="custom_js"></script>  
213 -  
214 -<!-- echart -->  
215 -<script src="/real_control_v2/assets/echarts-3/echarts.js" merge="plugins"></script>  
216 -<!-- Geolib -->  
217 -<script src="/real_control_v2/geolib/geolib.js" merge="plugins"></script>  
218 -  
219 -<script src="/real_control_v2/js/signal_state/signal_state.js" merge="custom_js"></script>  
220 -<script src="/real_control_v2/js/utils/dispatch_pattern.js" merge="custom_js"></script>  
221 -  
222 -<!-- 处理表单片段嵌入问题 -->  
223 -<script src="/real_control_v2/js/forms/form_embed.js" merge="custom_js"></script>  
224 -<!-- 模态框扩展 -->  
225 -<script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>  
226 -  
227 -<!-- #### 安全驾驶 start ### -->  
228 -<div class="multi_plat_msg_pop_wrap" ></div>  
229 -<script id="sd_plat_msg_template" type="text/html">  
230 - <div class="multi_plat_msg_pop uk-animation-slide-bottom" data-type="{{type}}" data-nbbm="{{clzbh}}" data-type="{{yczltype}}" data-title="{{clzbh}} {{timeStr}} {{ycztText}}" data-url="{{url}}" data-ts="{{ts}}">  
231 - <div>  
232 - <span class="title">异常&nbsp;{{clzbh}}</span>  
233 - <br/>  
234 - <span class="text"> {{timeStr}} 出现违规驾驶({{ycztText}})</span>  
235 - <span class="desc">--安全驾驶监管平台</span>  
236 - </div>  
237 - </div>  
238 -</script>  
239 -<script id="cp_plat_msg_template" type="text/html">  
240 - <div class="multi_plat_msg_pop uk-animation-slide-bottom" data-type="{{type}}" data-id="{{id}}" data-title="{{responseState}}" data-ts="{{ts}}">  
241 - <div>  
242 - <span class="title">应急预案</span>  
243 - <br/>  
244 - <span class="text"> {{instructionsContent}}</span>  
245 - <span class="desc">--应急预案平台</span>  
246 - </div>  
247 - </div>  
248 -</script>  
249 -<script id="mt_plat_msg_template" type="text/html">  
250 - <div class="multi_plat_msg_pop uk-animation-slide-bottom" style="background-color: #0aae0a;" data-type="{{type}}" data-confirm="维修保养计划" data-line="{{line}}" data-zbh="{{zbh}}" data-bydj="{{bydj}}" data-bysj="{{dateTimeStr}}" data-bydd="{{bydd}}">  
251 - <div>  
252 - <span class="title">维修保养计划</span>  
253 - <br/>  
254 - <span class="text"> {{zbh}}&nbsp;&nbsp;{{timeStr}}&nbsp;&nbsp;进场保养</span>  
255 - <span class="desc">--浦东公交维修库</span>  
256 - </div>  
257 - </div>  
258 -</script>  
259 -<script id="ces_plat_msg_template" type="text/html">  
260 - <div class="multi_plat_msg_pop uk-animation-slide-bottom" style="background-color: #00ccff;" data-type="{{type}}" data-zbh="{{nbbm}}" data-start="{{startTimestamp}}" data-end="{{endTimestamp}}">  
261 - <div>  
262 - <span class="title">车辆异常停车</span>  
263 - <br/>  
264 - <span class="text"> {{line}}&nbsp;{{nbbm}}&nbsp;&nbsp;在&nbsp;{{address}}&nbsp;&nbsp;异常停车</span>  
265 - <span class="desc">--企业信息化运行监控中心</span>  
266 - </div>  
267 - </div>  
268 -</script>  
269 -<script id="inoutpark_plat_msg_template" type="text/html">  
270 - <div class="multi_plat_msg_pop uk-animation-slide-bottom" style="background-color: #FF7F24;" data-type="{{type}}" data-zbh="{{nbbm}}">  
271 - <div>  
272 - <span class="title">{{errType}}私自绕改道</span>  
273 - <br/>  
274 - <span class="text"> {{line}}&nbsp;{{nbbm}}&nbsp;&nbsp;在&nbsp;{{findTime}}&nbsp;{{errType}}私自绕改道,<br/>请到运管中心处理</span>  
275 - <span class="desc" style="color: #ffffff">--浦东公交运管中心管理系统</span>  
276 - </div>  
277 - </div>  
278 -</script>  
279 -  
280 -<script src="/real_control_v2/js/safe_driv/safeDriv.js" merge="custom_js"></script>  
281 -<script src="/real_control_v2/js/con_plan/conPlan.js" merge="custom_js"></script>  
282 -<script src="/real_control_v2/js/mt_plan/mtPlan.js" merge="custom_js"></script>  
283 -<script src="/real_control_v2/js/platform/carErrorStop.js" merge="custom_js"></script>  
284 -<script src="/real_control_v2/js/platform/inoutPark.js" merge="custom_js"></script>  
285 -<!-- #### 安全驾驶 end ### -->  
286 -  
287 -<!-- 打电话 -->  
288 -<script src="/real_control_v2/js/safe_driv/call_phone.js" ></script>  
289 -  
290 -<script id="voip_call_info_panel-temp" type="text/html">  
291 - <div class="voip_call_info_panel" style="{{style}}">  
292 - <p class="_title">VOIP</p>  
293 - <form class="uk-form uk-form-horizontal">  
294 -  
295 - <div class="uk-form-row">  
296 - <label class="uk-form-label" >工号:</label>  
297 - <div class="uk-form-controls">  
298 - <input type="text" name="agentID" value="1002" disabled>  
299 - </div>  
300 - </div>  
301 - <div class="uk-form-row">  
302 - <label class="uk-form-label">分机号:</label>  
303 - <div class="uk-form-controls">  
304 - <input type="text" name="dn" value="" >  
305 - </div>  
306 - </div>  
307 - <div class="uk-form-row">  
308 - <label class="uk-form-label" >自编号:</label>  
309 - <div class="uk-form-controls">  
310 - <input type="text" value="{{nbbm}}" disabled>  
311 - </div>  
312 - </div>  
313 - <div class="uk-form-row">  
314 - <label class="uk-form-label" >SIM号:</label>  
315 - <div class="uk-form-controls">  
316 - <input type="text" name="simNo" disabled>  
317 - </div>  
318 - </div>  
319 - <hr>  
320 - <h4 class="state_txt">  
321 - <button class="uk-button uk-button-large" type="button" disabled>获取SIM卡号...</button>  
322 - </h4>  
323 - </form>  
324 - </div>  
325 -</script>  
326 -</body>  
327 -  
328 -</html> 1 +<!DOCTYPE html>
  2 +<html lang="zh-cn">
  3 +
  4 +<head>
  5 + <meta charset="UTF-8">
  6 + <title>线路调度 v2.0</title>
  7 + <!-- uikit core style-->
  8 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/css/uikit.gradient.min.css" />
  9 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.gradient.min.css" merge="plugins"/>
  10 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.gradient.min.css" merge="plugins"/>
  11 + <link rel="stylesheet"
  12 + href="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.gradient.min.css" merge="plugins"/>
  13 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.gradient.min.css" merge="plugins"/>
  14 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/slidenav.gradient.min.css" merge="plugins"/>
  15 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.gradient.min.css" merge="plugins"/>
  16 +
  17 + <!-- main style -->
  18 + <link rel="stylesheet" href="/real_control_v2/css/main.css" />
  19 + <!-- north style -->
  20 + <link rel="stylesheet" href="/real_control_v2/css/north.css" merge="custom_style"/>
  21 + <!-- home style -->
  22 + <link rel="stylesheet" href="/real_control_v2/css/home.css" merge="custom_style"/>
  23 + <!-- line style -->
  24 + <link rel="stylesheet" href="/real_control_v2/css/line_schedule.css" merge="custom_style"/>
  25 + <link rel="stylesheet" href="/real_control_v2/css/line_schedule_table.css" merge="custom_style"/>
  26 +
  27 + <link rel="stylesheet" href="/real_control_v2/css/sch_autocomp_result.css" merge="custom_style"/>
  28 + <!-- custom table -->
  29 + <link rel="stylesheet" href="/real_control_v2/css/ct_table.css" merge="custom_style"/>
  30 + <!-- jquery contextMenu style -->
  31 + <link rel="stylesheet" href="/real_control_v2/assets/css/jquery.contextMenu.min.css" merge="plugins"/>
  32 + <!-- formvalidation style -->
  33 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/formvalidation/formValidation.min.css" merge="plugins"/>
  34 + <!-- js tree -->
  35 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/jstree/default/style.css" merge="plugins"/>
  36 + <!-- tooltip css-->
  37 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.css" merge="plugins"/>
  38 + <link rel="stylesheet" href="/real_control_v2/css/pace.css" merge="plugins"/>
  39 +
  40 + <link rel="stylesheet" href="/real_control_v2/css/modal_extend.css" merge="custom_style"/>
  41 + <!-- perfect-scrollbar style -->
  42 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.css" merge="plugins"/>
  43 + <!-- layer 3.0.3 -->
  44 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/default/layer.css" merge="plugins"/>
  45 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/layer3.0.3/skin/moon/style.css" merge="plugins"/>
  46 +
  47 + <!-- flatpickr -->
  48 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.css" merge="plugins">
  49 + <link rel="stylesheet" href="/real_control_v2/assets/plugins/flatpickr/themes/airbnb.css" merge="plugins">
  50 +</head>
  51 +
  52 +<body>
  53 +<div class="north uk-width-1-1 uk-panel-box">
  54 + <div class="uk-grid uk-grid-match">
  55 + <div class="uk-width-4-10">
  56 + <div class="uk-panel">
  57 + <h2 class="north-logo">
  58 + <!--<i class="uk-icon-life-ring"></i>--> 浦东公交线路调度
  59 + </h2>
  60 + </div>
  61 + </div>
  62 + <div class="uk-width-6-10">
  63 + <div class="uk-panel uk-width north-toolbar"></div>
  64 + </div>
  65 + </div>
  66 + <div class="north-tabs"></div>
  67 +</div>
  68 +
  69 +<div class="main-container">
  70 + <div class="load-panel">
  71 + <i class="uk-icon-spinner uk-icon-spin"></i>
  72 + 正在加载数据
  73 + </div>
  74 +</div>
  75 +
  76 +<script>
  77 +/* var gb_beforeunload_fun = function (e) {
  78 + var confirmationMessage = "\o/";
  79 + (e || window.event).returnValue = confirmationMessage;
  80 + return confirmationMessage;
  81 + }
  82 + window.addEventListener("beforeunload", gb_beforeunload_fun);*/
  83 +
  84 + delete window.exports;
  85 + delete window.module;
  86 +
  87 + var ipcMain;
  88 + //是否处于electron环境下
  89 + var isElectron = (function () {
  90 + try {
  91 + if (process.versions.electron)
  92 + return true;
  93 + else
  94 + return false;
  95 + }
  96 + catch (e) {
  97 + return false;
  98 + }
  99 + })();
  100 +
  101 + if (isElectron) {
  102 + var link = document.createElement("link");
  103 + link.type = "text/css";
  104 + link.rel = "stylesheet";
  105 + link.href = "/real_control_v2/css/electron.css";
  106 + document.getElementsByTagName("head")[0].appendChild(link);
  107 +
  108 + ipcMain = require('electron').ipcRenderer;
  109 + }
  110 +</script>
  111 +
  112 +<!-- 地图相关 -->
  113 +<script src="//api.map.baidu.com/api?v=2.0&ak=1TgEKvYqohJyeGXnN6yHSSTb4psOarQw"></script>
  114 +<script src="//api.map.baidu.com/library/TrafficControl/1.4/src/TrafficControl_min.js"></script>
  115 +<script src="/assets/js/baidu//MarkerClusterer.js" merge="plugins"></script>
  116 +<script src="/assets/js/CoordinateConverter.js" merge="plugins"></script>
  117 +<!-- 高德 -->
  118 +<script src="//webapi.amap.com/maps?v=1.3&key=16cb1c5043847e09ef9edafdd77befda"></script>
  119 +<!-- jquery -->
  120 +<script src="/real_control_v2/assets/js/jquery.min.js"></script>
  121 +<!-- jquery actual -->
  122 +<script src="/real_control_v2/assets/js/jquery.actual.min.js" merge="plugins"></script>
  123 +<!-- jquery.serializejson JSON序列化插件 -->
  124 +<script src="/assets/plugins/jquery.serializejson.js" merge="plugins"></script>
  125 +<!-- moment.js 日期处理类库 -->
  126 +<script src="/real_control_v2/assets/plugins/moment/moment.min.js"></script>
  127 +<script src="/real_control_v2/assets/plugins/moment/zh-cn.js"></script>
  128 +<!-- jquery.pageinator 分页 -->
  129 +<script src="/assets/plugins/jqPaginator.min.js"></script>
  130 +
  131 +<!-- flatpickr -->
  132 +<script src="/real_control_v2/assets/plugins/flatpickr/flatpickr.min.js" merge="plugins"></script>
  133 +<script src="/real_control_v2/assets/plugins/flatpickr/l10n/zh.js" merge="plugins"></script>
  134 +
  135 +<!-- perfect-scrollbar -->
  136 +<script src="/real_control_v2/assets/plugins/perfect-scrollbar/perfect-scrollbar.jquery.js" merge="plugins"></script>
  137 +<!-- common js -->
  138 +<script src="/real_control_v2/js/common.js"></script>
  139 +<!-- art-template 模版引擎 -->
  140 +<script src="/assets/plugins/template.js" merge="plugins"></script>
  141 +<!-- d3 -->
  142 +<script src="/assets/js/d3.min.js"></script>
  143 +<!-- EventProxy -->
  144 +<script src="/assets/js/eventproxy.js"></script>
  145 +<!-- main js -->
  146 +<script src="/real_control_v2/js/main.js"></script>
  147 +<!-- uikit core -->
  148 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/uikit.min.js" merge="uikit_js"></script>
  149 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/notify.min.js" merge="uikit_js"></script>
  150 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/pagination.min.js" merge="uikit_js"></script>
  151 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/tooltip.min.js" merge="uikit_js"></script>
  152 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/autocomplete.min.js" merge="uikit_js"></script>
  153 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/accordion.min.js" merge="uikit_js"></script>
  154 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/timepicker.min.js" merge="uikit_js"></script>
  155 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/lightbox.min.js" merge="uikit_js"></script>
  156 +<script src="/real_control_v2/assets/plugins/uikit-2.27.1/components/sticky.min.js" merge="uikit_js"></script>
  157 +
  158 +
  159 +<!-- jquery contextMenu -->
  160 +<script src="/real_control_v2/assets/js/jquery.contextMenu.min.js" merge="plugins"></script>
  161 +<script src="/real_control_v2/assets/js/jquery.ui.position.min.js" merge="plugins"></script>
  162 +<!-- formvalidation- -->
  163 +<script src="/real_control_v2/assets/plugins/formvalidation/formValidation.min.js" merge="plugins"></script>
  164 +<script src="/real_control_v2/assets/plugins/formvalidation/zh_CN.js" merge="plugins"></script>
  165 +<script src="/real_control_v2/assets/plugins/formvalidation/uikit.min.js" merge="plugins"></script>
  166 +<!-- js tree -->
  167 +<script src="/real_control_v2/assets/plugins/jstree/jstree.min.js" merge="plugins"></script>
  168 +<!-- simple pinyin -->
  169 +<script src="/assets/plugins/pinyin.js" merge="plugins"></script>
  170 +<!-- qtip -->
  171 +<script src="/real_control_v2/assets/plugins/qtip/jquery.qtip.min.js" merge="plugins"></script>
  172 +<!-- layer 3.0.3 -->
  173 +<script src="/real_control_v2/assets/plugins/layer3.0.3/layer.js" merge="plugins"></script>
  174 +
  175 +<!-- 数据 -->
  176 +<script src="/real_control_v2/js/data/data_basic.js" merge="custom_js"></script>
  177 +<script src="/real_control_v2/js/data/data_gps.js" merge="custom_js"></script>
  178 +<script src="/real_control_v2/js/data/gps_abnormal.js" merge="custom_js"></script>
  179 +<script src="/real_control_v2/js/data/data_line_config.js" merge="custom_js"></script>
  180 +<!-- 线路模拟图 -->
  181 +<script src="/real_control_v2/js/utils/svg_chart.js" merge="custom_js"></script>
  182 +<script src="/real_control_v2/js/utils/svg_data_convert.js" merge="custom_js"></script>
  183 +<script src="/real_control_v2/js/utils/svg_chart_tooltip.js" merge="custom_js"></script>
  184 +<script src="/real_control_v2/js/utils/svg_chart_map.js" merge="custom_js"></script>
  185 +
  186 +<!-- custom table js -->
  187 +<script src="/real_control_v2/js/utils/ct_table.js" merge="custom_js"></script>
  188 +<!-- north js -->
  189 +<script src="/real_control_v2/js/north/toolbar.js" merge="custom_js"></script>
  190 +<script src="/real_control_v2/js/north/tabs.js" merge="custom_js"></script>
  191 +<script src="/real_control_v2/js/north/second_timer.js" merge="custom_js"></script>
  192 +<!-- home js -->
  193 +<script src="/real_control_v2/js/home/layout.js" merge="custom_js"></script>
  194 +<script src="/real_control_v2/js/home/line_panel.js" merge="custom_js"></script>
  195 +<script src="/real_control_v2/js/home/context_menu.js" merge="custom_js"></script>
  196 +<!-- line schedule js -->
  197 +<script src="/real_control_v2/js/line_schedule/legend.js" merge="custom_js"></script>
  198 +<script src="/real_control_v2/js/line_schedule/layout.js" merge="custom_js"></script>
  199 +<script src="/real_control_v2/js/line_schedule/sch_table.js" merge="custom_js"></script>
  200 +<script src="/real_control_v2/js/line_schedule/context_menu.js" merge="custom_js"></script>
  201 +<script src="/real_control_v2/js/line_schedule/dbclick.js" merge="custom_js"></script>
  202 +<script src="/real_control_v2/js/line_schedule/search.js" merge="custom_js"></script>
  203 +<script src="/real_control_v2/js/line_schedule/badge_tooltip.js" merge="custom_js"></script>
  204 +<script src="/real_control_v2/js/line_schedule/mileage_count.js" merge="custom_js"></script>
  205 +
  206 +<!-- 字典相关 -->
  207 +<script src="/assets/js/dictionary.js" merge="custom_js"></script>
  208 +<!-- websocket -->
  209 +<script src="/real_control_v2/assets/plugins/sockjs-client/sockjs.min.js"></script>
  210 +<script src="/real_control_v2/js/websocket/sch_websocket.js" merge="custom_js"></script>
  211 +<!-- tts -->
  212 +<script src="/real_control_v2/js/utils/tts.js" merge="custom_js"></script>
  213 +
  214 +<!-- echart -->
  215 +<script src="/real_control_v2/assets/echarts-3/echarts.js" merge="plugins"></script>
  216 +<!-- Geolib -->
  217 +<script src="/real_control_v2/geolib/geolib.js" merge="plugins"></script>
  218 +
  219 +<script src="/real_control_v2/js/signal_state/signal_state.js" merge="custom_js"></script>
  220 +<script src="/real_control_v2/js/utils/dispatch_pattern.js" merge="custom_js"></script>
  221 +
  222 +<!-- 处理表单片段嵌入问题 -->
  223 +<script src="/real_control_v2/js/forms/form_embed.js" merge="custom_js"></script>
  224 +<!-- 模态框扩展 -->
  225 +<script src="/real_control_v2/js/modal_extend.js" merge="custom_js"></script>
  226 +
  227 +<!-- #### 安全驾驶 start ### -->
  228 +<div class="multi_plat_msg_pop_wrap" ></div>
  229 +<script id="sd_plat_msg_template" type="text/html">
  230 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" data-type="{{type}}" data-nbbm="{{clzbh}}" data-type="{{yczltype}}" data-title="{{clzbh}} {{timeStr}} {{ycztText}}" data-url="{{url}}" data-ts="{{ts}}">
  231 + <div>
  232 + <span class="title">异常&nbsp;{{clzbh}}</span>
  233 + <br/>
  234 + <span class="text"> {{timeStr}} 出现违规驾驶({{ycztText}})</span>
  235 + <span class="desc">--安全驾驶监管平台</span>
  236 + </div>
  237 + </div>
  238 +</script>
  239 +<script id="cp_plat_msg_template" type="text/html">
  240 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" data-type="{{type}}" data-id="{{id}}" data-title="{{responseState}}" data-ts="{{ts}}">
  241 + <div>
  242 + <span class="title">应急预案</span>
  243 + <br/>
  244 + <span class="text"> {{instructionsContent}}</span>
  245 + <span class="desc">--应急预案平台</span>
  246 + </div>
  247 + </div>
  248 +</script>
  249 +<script id="mt_plat_msg_template" type="text/html">
  250 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" style="background-color: #0aae0a;" data-type="{{type}}" data-confirm="维修保养计划" data-line="{{line}}" data-zbh="{{zbh}}" data-bydj="{{bydj}}" data-bysj="{{dateTimeStr}}" data-bydd="{{bydd}}">
  251 + <div>
  252 + <span class="title">维修保养计划</span>
  253 + <br/>
  254 + <span class="text"> {{zbh}}&nbsp;&nbsp;{{timeStr}}&nbsp;&nbsp;进场保养</span>
  255 + <span class="desc">--浦东公交维修库</span>
  256 + </div>
  257 + </div>
  258 +</script>
  259 +<script id="ces_plat_msg_template" type="text/html">
  260 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" style="background-color: #00ccff;" data-type="{{type}}" data-zbh="{{nbbm}}" data-start="{{startTimestamp}}" data-end="{{endTimestamp}}">
  261 + <div>
  262 + <span class="title">车辆异常停车</span>
  263 + <br/>
  264 + <span class="text"> {{line}}&nbsp;{{nbbm}}&nbsp;&nbsp;在&nbsp;{{address}}&nbsp;&nbsp;异常停车</span>
  265 + <span class="desc">--企业信息化运行监控中心</span>
  266 + </div>
  267 + </div>
  268 +</script>
  269 +<script id="inoutpark_plat_msg_template" type="text/html">
  270 + <div class="multi_plat_msg_pop uk-animation-slide-bottom" style="background-color: #FF7F24;" data-type="{{type}}" data-zbh="{{nbbm}}">
  271 + <div>
  272 + <span class="title">{{errType}}私自绕改道</span>
  273 + <br/>
  274 + <span class="text"> {{line}}&nbsp;{{nbbm}}&nbsp;&nbsp;在&nbsp;{{findTime}}&nbsp;{{errType}}私自绕改道,<br/>请到运管中心处理</span>
  275 + <span class="desc" style="color: #ffffff">--浦东公交运管中心管理系统</span>
  276 + </div>
  277 + </div>
  278 +</script>
  279 +
  280 +<script src="/real_control_v2/js/safe_driv/safeDriv.js" merge="custom_js"></script>
  281 +<script src="/real_control_v2/js/con_plan/conPlan.js" merge="custom_js"></script>
  282 +<script src="/real_control_v2/js/mt_plan/mtPlan.js" merge="custom_js"></script>
  283 +<script src="/real_control_v2/js/platform/carErrorStop.js" merge="custom_js"></script>
  284 +<script src="/real_control_v2/js/platform/inoutPark.js" merge="custom_js"></script>
  285 +<!-- #### 安全驾驶 end ### -->
  286 +
  287 +<!-- 打电话 -->
  288 +<script src="/real_control_v2/js/safe_driv/call_phone.js" ></script>
  289 +
  290 +<script id="voip_call_info_panel-temp" type="text/html">
  291 + <div class="voip_call_info_panel" style="{{style}}">
  292 + <p class="_title">VOIP</p>
  293 + <form class="uk-form uk-form-horizontal">
  294 +
  295 + <div class="uk-form-row">
  296 + <label class="uk-form-label" >工号:</label>
  297 + <div class="uk-form-controls">
  298 + <input type="text" name="agentID" value="1002" disabled>
  299 + </div>
  300 + </div>
  301 + <div class="uk-form-row">
  302 + <label class="uk-form-label">分机号:</label>
  303 + <div class="uk-form-controls">
  304 + <input type="text" name="dn" value="" >
  305 + </div>
  306 + </div>
  307 + <div class="uk-form-row">
  308 + <label class="uk-form-label" >自编号:</label>
  309 + <div class="uk-form-controls">
  310 + <input type="text" value="{{nbbm}}" disabled>
  311 + </div>
  312 + </div>
  313 + <div class="uk-form-row">
  314 + <label class="uk-form-label" >SIM号:</label>
  315 + <div class="uk-form-controls">
  316 + <input type="text" name="simNo" disabled>
  317 + </div>
  318 + </div>
  319 + <hr>
  320 + <h4 class="state_txt">
  321 + <button class="uk-button uk-button-large" type="button" disabled>获取SIM卡号...</button>
  322 + </h4>
  323 + </form>
  324 + </div>
  325 +</script>
  326 +</body>
  327 +
  328 +</html>