Commit ba8633e99a27b90c55b47e8f7d6225f1f0efc6bb

Authored by 648540858
1 parent 81f1b8ee

优化地图-添加地图页面以及设备树

Showing 25 changed files with 1074 additions and 577 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepaliveTimeoutListenerForPlatform.java
... ... @@ -52,7 +52,6 @@ public class KeepaliveTimeoutListenerForPlatform extends RedisKeyExpirationEvent
52 52 public void onMessage(Message message, byte[] pattern) {
53 53 // 获取失效的key
54 54 String expiredKey = message.toString();
55   - logger.debug(expiredKey);
56 55 // 平台心跳到期,需要重发, 判断是否已经多次未收到心跳回复, 多次未收到,则重新发起注册, 注册尝试多次未得到回复,则认为平台离线
57 56 String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.PLATFORM_KEEPALIVE_PREFIX + userSetting.getServerId() + "_";
58 57 String PLATFORM_REGISTER_PREFIX = VideoManagerConstants.PLATFORM_REGISTER_PREFIX + userSetting.getServerId() + "_";
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
... ... @@ -57,10 +57,8 @@ public class OfflineEventListener implements ApplicationListener<OfflineEvent> {
57 57  
58 58 @Override
59 59 public void onApplicationEvent(OfflineEvent event) {
60   -
61   - if (logger.isDebugEnabled()) {
62   - logger.debug("设备离线事件触发,deviceId:" + event.getDeviceId() + ",from:" + event.getFrom());
63   - }
  60 +
  61 + logger.info("设备离线事件触发,deviceId:" + event.getDeviceId() + ",from:" + event.getFrom());
64 62  
65 63 String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetting.getServerId() + "_" + event.getDeviceId();
66 64  
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
... ... @@ -58,10 +58,8 @@ public class OnlineEventListener implements ApplicationListener<OnlineEvent> {
58 58  
59 59 @Override
60 60 public void onApplicationEvent(OnlineEvent event) {
61   -
62   - if (logger.isDebugEnabled()) {
63   - logger.debug("设备上线事件触发,deviceId:" + event.getDevice().getDeviceId() + ",from:" + event.getFrom());
64   - }
  61 +
  62 + logger.info("设备上线事件触发,deviceId:" + event.getDevice().getDeviceId() + ",from:" + event.getFrom());
65 63 Device device = event.getDevice();
66 64 if (device == null) return;
67 65 String key = VideoManagerConstants.KEEPLIVEKEY_PREFIX + userSetting.getServerId() + "_" + event.getDevice().getDeviceId();
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/event/record/RecordEndEventListener.java
... ... @@ -31,10 +31,8 @@ public class RecordEndEventListener implements ApplicationListener<RecordEndEven
31 31 private Map<String, RecordEndEventHandler> handlerMap = new HashMap<>();
32 32 @Override
33 33 public void onApplicationEvent(RecordEndEvent event) {
34   - if (logger.isDebugEnabled()) {
35   - logger.debug("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}条", event.getRecordInfo().getDeviceId(),
36   - event.getRecordInfo().getChannelId(), event.getRecordInfo().getSumNum() );
37   - }
  34 + logger.info("录像查询完成事件触发,deviceId:{}, channelId: {}, 录像数量{}条", event.getRecordInfo().getDeviceId(),
  35 + event.getRecordInfo().getChannelId(), event.getRecordInfo().getSumNum() );
38 36 if (handlerMap.size() > 0) {
39 37 for (RecordEndEventHandler recordEndEventHandler : handlerMap.values()) {
40 38 recordEndEventHandler.handler(event.getRecordInfo());
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/SubscribeListenerForPlatform.java
... ... @@ -39,7 +39,6 @@ public class SubscribeListenerForPlatform extends RedisKeyExpirationEventMessage
39 39 public void onMessage(Message message, byte[] pattern) {
40 40 // 获取失效的key
41 41 String expiredKey = message.toString();
42   - logger.debug(expiredKey);
43 42 // 订阅到期
44 43 String PLATFORM_KEEPLIVEKEY_PREFIX = VideoManagerConstants.SIP_SUBSCRIBE_PREFIX + userSetting.getServerId() + "_";
45 44 if (expiredKey.startsWith(PLATFORM_KEEPLIVEKEY_PREFIX)) {
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/event/subscribe/catalog/CatalogEventLister.java
... ... @@ -66,7 +66,7 @@ public class CatalogEventLister implements ApplicationListener&lt;CatalogEvent&gt; {
66 66 subscribe = subscribeHolder.getCatalogSubscribe(event.getPlatformId());
67 67  
68 68 if (subscribe == null) {
69   - logger.debug("发送订阅消息时发现订阅信息已经不存在");
  69 + logger.info("发送订阅消息时发现订阅信息已经不存在");
70 70 return;
71 71 }
72 72 }else {
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
... ... @@ -13,6 +13,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
13 13 import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
14 14 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
15 15 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
  16 +import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
16 17 import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
17 18 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
18 19 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
... ... @@ -149,11 +150,12 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
149 150 logger.info("[收到Notify-MobilePosition]:{}/{}->{}.{}", mobilePosition.getDeviceId(), mobilePosition.getChannelId(),
150 151 mobilePosition.getLongitude(), mobilePosition.getLatitude());
151 152 mobilePosition.setReportSource("Mobile Position");
152   - BaiduPoint bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
153   - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
154   - mobilePosition.setGeodeticSystem("BD-09");
155   - mobilePosition.setCnLng(bp.getBdLng());
156   - mobilePosition.setCnLat(bp.getBdLat());
  153 + // 默认来源坐标系为WGS-84处理
  154 + Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
  155 + logger.info("GCJ02坐标:" + gcj02Point[0] + ", " + gcj02Point[1]);
  156 + mobilePosition.setGeodeticSystem("GCJ-02");
  157 + mobilePosition.setCnLng(gcj02Point[0] + "");
  158 + mobilePosition.setCnLat(gcj02Point[1] + "");
157 159 if (!userSetting.getSavePositionHistory()) {
158 160 storager.clearMobilePositionsByDeviceId(deviceId);
159 161 }
... ... @@ -223,12 +225,12 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
223 225 mobilePosition.setLongitude(deviceAlarm.getLongitude());
224 226 mobilePosition.setLatitude(deviceAlarm.getLatitude());
225 227 mobilePosition.setReportSource("GPS Alarm");
226   - BaiduPoint bp = new BaiduPoint();
227   - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
228   - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
229   - mobilePosition.setGeodeticSystem("BD-09");
230   - mobilePosition.setCnLng(bp.getBdLng());
231   - mobilePosition.setCnLat(bp.getBdLat());
  228 + // 默认来源坐标系为WGS-84处理
  229 + Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
  230 + logger.info("GCJ02坐标:" + gcj02Point[0] + ", " + gcj02Point[1]);
  231 + mobilePosition.setGeodeticSystem("GCJ-02");
  232 + mobilePosition.setCnLng(gcj02Point[0] + "");
  233 + mobilePosition.setCnLat(gcj02Point[1] + "");
232 234 if (!userSetting.getSavePositionHistory()) {
233 235 storager.clearMobilePositionsByDeviceId(deviceId);
234 236 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
... ... @@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.gb28181.event.EventPublisher;
8 8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
9 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
  11 +import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
11 12 import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
12 13 import com.genersoft.iot.vmp.service.IDeviceAlarmService;
13 14 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
... ... @@ -93,12 +94,12 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme
93 94 mobilePosition.setLongitude(deviceAlarm.getLongitude());
94 95 mobilePosition.setLatitude(deviceAlarm.getLatitude());
95 96 mobilePosition.setReportSource("GPS Alarm");
96   - BaiduPoint bp = new BaiduPoint();
97   - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
98   - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
99   - mobilePosition.setGeodeticSystem("BD-09");
100   - mobilePosition.setCnLng(bp.getBdLng());
101   - mobilePosition.setCnLat(bp.getBdLat());
  97 + // 默认来源坐标系为WGS-84处理
  98 + Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
  99 + logger.info("GCJ02坐标:" + gcj02Point[0] + ", " + gcj02Point[1]);
  100 + mobilePosition.setGeodeticSystem("GCJ-02");
  101 + mobilePosition.setCnLng(gcj02Point[0] + "");
  102 + mobilePosition.setCnLat(gcj02Point[1] + "");
102 103 if (!userSetting.getSavePositionHistory()) {
103 104 storager.clearMobilePositionsByDeviceId(device.getDeviceId());
104 105 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/MobilePositionNotifyMessageHandler.java
... ... @@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
8 8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
9 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify.NotifyMessageHandler;
  11 +import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
11 12 import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
12 13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
13 14 import com.genersoft.iot.vmp.utils.GpsUtil;
... ... @@ -79,12 +80,12 @@ public class MobilePositionNotifyMessageHandler extends SIPRequestProcessorParen
79 80 mobilePosition.setAltitude(0.0);
80 81 }
81 82 mobilePosition.setReportSource("Mobile Position");
82   - BaiduPoint bp = new BaiduPoint();
83   - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
84   - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
85   - mobilePosition.setGeodeticSystem("BD-09");
86   - mobilePosition.setCnLng(bp.getBdLng());
87   - mobilePosition.setCnLat(bp.getBdLat());
  83 + // 默认来源坐标系为WGS-84处理
  84 + Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
  85 + logger.info("GCJ02坐标:" + gcj02Point[0] + ", " + gcj02Point[1]);
  86 + mobilePosition.setGeodeticSystem("GCJ-02");
  87 + mobilePosition.setCnLng(gcj02Point[0] + "");
  88 + mobilePosition.setCnLat(gcj02Point[1] + "");
88 89 if (!userSetting.getSavePositionHistory()) {
89 90 storager.clearMobilePositionsByDeviceId(device.getDeviceId());
90 91 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
... ... @@ -12,6 +12,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
12 12 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
13 13 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
14 14 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
  15 +import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
15 16 import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
16 17 import com.genersoft.iot.vmp.gb28181.utils.XmlUtil;
17 18 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
... ... @@ -215,12 +216,12 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
215 216 mobilePosition.setAltitude(0.0);
216 217 }
217 218 mobilePosition.setReportSource("Mobile Position");
218   - BaiduPoint bp = new BaiduPoint();
219   - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
220   - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
221   - mobilePosition.setGeodeticSystem("BD-09");
222   - mobilePosition.setCnLng(bp.getBdLng());
223   - mobilePosition.setCnLat(bp.getBdLat());
  219 + // 默认来源坐标系为WGS-84处理
  220 + Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
  221 + logger.info("GCJ02坐标:" + gcj02Point[0] + ", " + gcj02Point[1]);
  222 + mobilePosition.setGeodeticSystem("GCJ-02");
  223 + mobilePosition.setCnLng(gcj02Point[0] + "");
  224 + mobilePosition.setCnLat(gcj02Point[1] + "");
224 225 if (!userSetting.getSavePositionHistory()) {
225 226 storager.clearMobilePositionsByDeviceId(deviceId);
226 227 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/MobilePositionResponseMessageHandler.java
... ... @@ -8,6 +8,7 @@ import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
8 8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
9 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
10 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.ResponseMessageHandler;
  11 +import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
11 12 import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
12 13 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
13 14 import com.genersoft.iot.vmp.utils.GpsUtil;
... ... @@ -79,12 +80,12 @@ public class MobilePositionResponseMessageHandler extends SIPRequestProcessorPar
79 80 mobilePosition.setAltitude(0.0);
80 81 }
81 82 mobilePosition.setReportSource("Mobile Position");
82   - BaiduPoint bp = new BaiduPoint();
83   - bp = GpsUtil.Wgs84ToBd09(String.valueOf(mobilePosition.getLongitude()), String.valueOf(mobilePosition.getLatitude()));
84   - logger.info("百度坐标:" + bp.getBdLng() + ", " + bp.getBdLat());
85   - mobilePosition.setGeodeticSystem("BD-09");
86   - mobilePosition.setCnLng(bp.getBdLng());
87   - mobilePosition.setCnLat(bp.getBdLat());
  83 + // 默认来源坐标系为WGS-84处理
  84 + Double[] gcj02Point = Coordtransform.WGS84ToGCJ02(mobilePosition.getLongitude(), mobilePosition.getLatitude());
  85 + logger.info("GCJ02坐标:" + gcj02Point[0] + ", " + gcj02Point[1]);
  86 + mobilePosition.setGeodeticSystem("GCJ-02");
  87 + mobilePosition.setCnLng(gcj02Point[0] + "");
  88 + mobilePosition.setCnLat(gcj02Point[1] + "");
88 89 if (!userSetting.getSavePositionHistory()) {
89 90 storager.clearMobilePositionsByDeviceId(device.getDeviceId());
90 91 }
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/utils/Coordtransform.java 0 → 100644
  1 +package com.genersoft.iot.vmp.gb28181.utils;
  2 +
  3 +/**
  4 + * 坐标转换
  5 + * 一个提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换的工具类
  6 + * 参考https://github.com/wandergis/coordtransform 写的Java版本
  7 + * @author Xinconan
  8 + * @date 2016-03-18
  9 + * @url https://github.com/xinconan/coordtransform
  10 + */
  11 +public class Coordtransform {
  12 +
  13 + private static double x_PI = 3.14159265358979324 * 3000.0 / 180.0;
  14 + private static double PI = 3.1415926535897932384626;
  15 + private static double a = 6378245.0;
  16 + private static double ee = 0.00669342162296594323;
  17 +
  18 + /**
  19 + * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换
  20 + * 即 百度 转 谷歌、高德
  21 + * @param bd_lon
  22 + * @param bd_lat
  23 + * @return Double[lon,lat]
  24 + */
  25 + public static Double[] BD09ToGCJ02(Double bd_lon,Double bd_lat){
  26 + double x = bd_lon - 0.0065;
  27 + double y = bd_lat - 0.006;
  28 + double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_PI);
  29 + double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_PI);
  30 + Double[] arr = new Double[2];
  31 + arr[0] = z * Math.cos(theta);
  32 + arr[1] = z * Math.sin(theta);
  33 + return arr;
  34 + }
  35 +
  36 + /**
  37 + * 火星坐标系 (GCJ-02) 与百度坐标系 (BD-09) 的转换
  38 + * 即谷歌、高德 转 百度
  39 + * @param gcj_lon
  40 + * @param gcj_lat
  41 + * @return Double[lon,lat]
  42 + */
  43 + public static Double[] GCJ02ToBD09(Double gcj_lon,Double gcj_lat){
  44 + double z = Math.sqrt(gcj_lon * gcj_lon + gcj_lat * gcj_lat) + 0.00002 * Math.sin(gcj_lat * x_PI);
  45 + double theta = Math.atan2(gcj_lat, gcj_lon) + 0.000003 * Math.cos(gcj_lon * x_PI);
  46 + Double[] arr = new Double[2];
  47 + arr[0] = z * Math.cos(theta) + 0.0065;
  48 + arr[1] = z * Math.sin(theta) + 0.006;
  49 + return arr;
  50 + }
  51 +
  52 + /**
  53 + * WGS84转GCJ02
  54 + * @param wgs_lon
  55 + * @param wgs_lat
  56 + * @return Double[lon,lat]
  57 + */
  58 + public static Double[] WGS84ToGCJ02(Double wgs_lon,Double wgs_lat){
  59 + if(outOfChina(wgs_lon, wgs_lat)){
  60 + return new Double[]{wgs_lon,wgs_lat};
  61 + }
  62 + double dlat = transformlat(wgs_lon - 105.0, wgs_lat - 35.0);
  63 + double dlng = transformlng(wgs_lon - 105.0, wgs_lat - 35.0);
  64 + double radlat = wgs_lat / 180.0 * PI;
  65 + double magic = Math.sin(radlat);
  66 + magic = 1 - ee * magic * magic;
  67 + double sqrtmagic = Math.sqrt(magic);
  68 + dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
  69 + dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
  70 + Double[] arr = new Double[2];
  71 + arr[0] = wgs_lon + dlng;
  72 + arr[1] = wgs_lat + dlat;
  73 + return arr;
  74 + }
  75 +
  76 + /**
  77 + * GCJ02转WGS84
  78 + * @param gcj_lon
  79 + * @param gcj_lat
  80 + * @return Double[lon,lat]
  81 + */
  82 + public static Double[] GCJ02ToWGS84(Double gcj_lon,Double gcj_lat){
  83 + if(outOfChina(gcj_lon, gcj_lat)){
  84 + return new Double[]{gcj_lon,gcj_lat};
  85 + }
  86 + double dlat = transformlat(gcj_lon - 105.0, gcj_lat - 35.0);
  87 + double dlng = transformlng(gcj_lon - 105.0, gcj_lat - 35.0);
  88 + double radlat = gcj_lat / 180.0 * PI;
  89 + double magic = Math.sin(radlat);
  90 + magic = 1 - ee * magic * magic;
  91 + double sqrtmagic = Math.sqrt(magic);
  92 + dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI);
  93 + dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI);
  94 + double mglat = gcj_lat + dlat;
  95 + double mglng = gcj_lon + dlng;
  96 + return new Double[]{gcj_lon * 2 - mglng, gcj_lat * 2 - mglat};
  97 + }
  98 +
  99 + private static Double transformlat(double lng, double lat) {
  100 + double ret = -100.0 + 2.0 * lng + 3.0 * lat + 0.2 * lat * lat + 0.1 * lng * lat + 0.2 * Math.sqrt(Math.abs(lng));
  101 + ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  102 + ret += (20.0 * Math.sin(lat * PI) + 40.0 * Math.sin(lat / 3.0 * PI)) * 2.0 / 3.0;
  103 + ret += (160.0 * Math.sin(lat / 12.0 * PI) + 320 * Math.sin(lat * PI / 30.0)) * 2.0 / 3.0;
  104 + return ret;
  105 + }
  106 +
  107 + private static Double transformlng(double lng,double lat) {
  108 + double ret = 300.0 + lng + 2.0 * lat + 0.1 * lng * lng + 0.1 * lng * lat + 0.1 * Math.sqrt(Math.abs(lng));
  109 + ret += (20.0 * Math.sin(6.0 * lng * PI) + 20.0 * Math.sin(2.0 * lng * PI)) * 2.0 / 3.0;
  110 + ret += (20.0 * Math.sin(lng * PI) + 40.0 * Math.sin(lng / 3.0 * PI)) * 2.0 / 3.0;
  111 + ret += (150.0 * Math.sin(lng / 12.0 * PI) + 300.0 * Math.sin(lng / 30.0 * PI)) * 2.0 / 3.0;
  112 + return ret;
  113 + }
  114 +
  115 + /**
  116 + * outOfChina
  117 + * @描述: 判断是否在国内,不在国内则不做偏移
  118 + * @param lng
  119 + * @param lat
  120 + * @return {boolean}
  121 + */
  122 + private static boolean outOfChina(Double lng,Double lat) {
  123 + return (lng < 72.004 || lng > 137.8347) || ((lat < 0.8293 || lat > 55.8271) || false);
  124 + };
  125 +
  126 +}
... ...
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStorageImpl.java
... ... @@ -274,7 +274,7 @@ public class VideoManagerStorageImpl implements IVideoManagerStorage {
274 274 channels = deviceChannelList;
275 275 }
276 276 if (stringBuilder.length() > 0) {
277   - logger.debug("[目录查询]收到的数据存在重复: {}" , stringBuilder);
  277 + logger.info("[目录查询]收到的数据存在重复: {}" , stringBuilder);
278 278 }
279 279 try {
280 280 int cleanChannelsResult = deviceChannelMapper.cleanChannelsNotInList(deviceId, channels);
... ...
web_src/index.html
... ... @@ -12,8 +12,26 @@
12 12 <script type="text/javascript" src="./static/js/jessibuca/jessibuca.js"></script>
13 13 <script type="text/javascript" src="./static/js/EasyWasmPlayer.js"></script>
14 14 <script type="text/javascript" src="./static/js/ZLMRTCClient.js"></script>
15   - <script type="text/javascript" src="//api.map.baidu.com/api?v=2.0&ak=rk73w8dv1rkE4UdZsataG68VarhYQzrx&s=1"></script>
16 15 <div id="app"></div>
17 16 <!-- built files will be auto injected -->
  17 + <script>
  18 + // map组件全局参数
  19 + window.mapParam = {
  20 + // 坐标系 GCJ-02 WGS-84, 默认WGS-84
  21 + coordinateSystem: "GCJ-02",
  22 + // 地图瓦片地址
  23 + tilesUrl: "http://webrd0{1-4}.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scale=1&style=8",
  24 + // 瓦片大小
  25 + tileSize: 512,
  26 + // 默认层级
  27 + zoom:10,
  28 + // 默认地图中心点
  29 + center:[116.41020, 39.915119],
  30 + // 地图最大层级
  31 + maxZoom:19,
  32 + // 地图最小层级
  33 + minZoom: 3
  34 + }
  35 + </script>
18 36 </body>
19 37 </html>
... ...
web_src/package-lock.json
... ... @@ -14,9 +14,9 @@
14 14 "element-ui": "^2.15.6",
15 15 "fingerprintjs2": "^2.1.2",
16 16 "moment": "^2.29.1",
  17 + "ol": "^6.14.1",
17 18 "postcss-pxtorem": "^5.1.1",
18 19 "vue": "^2.6.11",
19   - "vue-baidu-map": "^0.21.22",
20 20 "vue-clipboard2": "^0.3.1",
21 21 "vue-clipboards": "^1.3.0",
22 22 "vue-contextmenujs": "^1.3.13",
... ... @@ -57,7 +57,7 @@
57 57 "vue-template-compiler": "^2.5.2",
58 58 "webpack": "^3.6.0",
59 59 "webpack-bundle-analyzer": "^2.9.0",
60   - "webpack-dev-server": "^2.11.5",
  60 + "webpack-dev-server": "^2.9.1",
61 61 "webpack-merge": "^4.1.0"
62 62 },
63 63 "engines": {
... ... @@ -65,6 +65,50 @@
65 65 "npm": ">= 3.0.0"
66 66 }
67 67 },
  68 + "node_modules/@mapbox/jsonlint-lines-primitives": {
  69 + "version": "2.0.2",
  70 + "resolved": "https://registry.npmmirror.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
  71 + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==",
  72 + "engines": {
  73 + "node": ">= 0.6"
  74 + }
  75 + },
  76 + "node_modules/@mapbox/mapbox-gl-style-spec": {
  77 + "version": "13.23.1",
  78 + "resolved": "https://registry.npmmirror.com/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.23.1.tgz",
  79 + "integrity": "sha512-C6wh8A/5EdsgzhL6y6yl464VCQNIxK0yjrpnvCvchcFe3sNK2RbBw/J9u3m+p8Y6S6MsGuSMt3AkGAXOKMYweQ==",
  80 + "dependencies": {
  81 + "@mapbox/jsonlint-lines-primitives": "~2.0.2",
  82 + "@mapbox/point-geometry": "^0.1.0",
  83 + "@mapbox/unitbezier": "^0.0.0",
  84 + "csscolorparser": "~1.0.2",
  85 + "json-stringify-pretty-compact": "^2.0.0",
  86 + "minimist": "^1.2.5",
  87 + "rw": "^1.3.3",
  88 + "sort-object": "^0.3.2"
  89 + },
  90 + "bin": {
  91 + "gl-style-composite": "bin/gl-style-composite",
  92 + "gl-style-format": "bin/gl-style-format",
  93 + "gl-style-migrate": "bin/gl-style-migrate",
  94 + "gl-style-validate": "bin/gl-style-validate"
  95 + }
  96 + },
  97 + "node_modules/@mapbox/point-geometry": {
  98 + "version": "0.1.0",
  99 + "resolved": "https://registry.npmmirror.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
  100 + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ=="
  101 + },
  102 + "node_modules/@mapbox/unitbezier": {
  103 + "version": "0.0.0",
  104 + "resolved": "https://registry.npmmirror.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
  105 + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA=="
  106 + },
  107 + "node_modules/@petamoriken/float16": {
  108 + "version": "3.6.3",
  109 + "resolved": "https://registry.npmmirror.com/@petamoriken/float16/-/float16-3.6.3.tgz",
  110 + "integrity": "sha512-Yx6Z93kmz3JVPYoPPRFJXnt2/G4kfaxRROcZVVHsE4zOClJXvkOVidv/JfvP6hWn16lykbKYKVzUsId6mqXdGg=="
  111 + },
68 112 "node_modules/@types/q": {
69 113 "version": "1.5.4",
70 114 "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
... ... @@ -214,6 +258,7 @@
214 258 "version": "1.0.10",
215 259 "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
216 260 "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
  261 + "dev": true,
217 262 "dependencies": {
218 263 "sprintf-js": "~1.0.2"
219 264 }
... ... @@ -1434,34 +1479,6 @@
1434 1479 "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
1435 1480 "dev": true
1436 1481 },
1437   - "node_modules/bmaplib.curveline": {
1438   - "version": "1.0.0",
1439   - "resolved": "https://registry.npmjs.org/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz",
1440   - "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q=="
1441   - },
1442   - "node_modules/bmaplib.heatmap": {
1443   - "version": "1.0.4",
1444   - "resolved": "https://registry.npmjs.org/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz",
1445   - "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q=="
1446   - },
1447   - "node_modules/bmaplib.lushu": {
1448   - "version": "1.0.7",
1449   - "resolved": "https://registry.npmjs.org/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz",
1450   - "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w=="
1451   - },
1452   - "node_modules/bmaplib.markerclusterer": {
1453   - "version": "1.0.13",
1454   - "resolved": "https://registry.npmjs.org/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz",
1455   - "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==",
1456   - "dependencies": {
1457   - "bmaplib.texticonoverlay": "^1.0.2"
1458   - }
1459   - },
1460   - "node_modules/bmaplib.texticonoverlay": {
1461   - "version": "1.0.2",
1462   - "resolved": "https://registry.npmjs.org/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz",
1463   - "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg=="
1464   - },
1465 1482 "node_modules/bn.js": {
1466 1483 "version": "5.1.3",
1467 1484 "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz",
... ... @@ -2679,6 +2696,11 @@
2679 2696 "node": ">=8.0.0"
2680 2697 }
2681 2698 },
  2699 + "node_modules/csscolorparser": {
  2700 + "version": "1.0.3",
  2701 + "resolved": "https://registry.npmmirror.com/csscolorparser/-/csscolorparser-1.0.3.tgz",
  2702 + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w=="
  2703 + },
2682 2704 "node_modules/cssesc": {
2683 2705 "version": "3.0.0",
2684 2706 "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
... ... @@ -4880,6 +4902,28 @@
4880 4902 "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
4881 4903 "dev": true
4882 4904 },
  4905 + "node_modules/geotiff": {
  4906 + "version": "2.0.5",
  4907 + "resolved": "https://registry.npmmirror.com/geotiff/-/geotiff-2.0.5.tgz",
  4908 + "integrity": "sha512-U5kVYm118YAmw2swiLu8rhfrYnDKOFI7VaMjuQwcq6Intuuid9Pyb4jjxYUxxkq8kOu2r7Am0Rmb52PObGp4pQ==",
  4909 + "dependencies": {
  4910 + "@petamoriken/float16": "^3.4.7",
  4911 + "lerc": "^3.0.0",
  4912 + "pako": "^2.0.4",
  4913 + "parse-headers": "^2.0.2",
  4914 + "quick-lru": "^6.1.0",
  4915 + "web-worker": "^1.2.0",
  4916 + "xml-utils": "^1.0.2"
  4917 + },
  4918 + "engines": {
  4919 + "node": ">=10.19"
  4920 + }
  4921 + },
  4922 + "node_modules/geotiff/node_modules/pako": {
  4923 + "version": "2.0.4",
  4924 + "resolved": "https://registry.npmmirror.com/pako/-/pako-2.0.4.tgz",
  4925 + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg=="
  4926 + },
4883 4927 "node_modules/get-caller-file": {
4884 4928 "version": "1.0.3",
4885 4929 "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz",
... ... @@ -5428,8 +5472,7 @@
5428 5472 "node_modules/ieee754": {
5429 5473 "version": "1.1.13",
5430 5474 "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
5431   - "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=",
5432   - "dev": true
  5475 + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q="
5433 5476 },
5434 5477 "node_modules/iferr": {
5435 5478 "version": "0.1.5",
... ... @@ -6042,6 +6085,11 @@
6042 6085 "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
6043 6086 "dev": true
6044 6087 },
  6088 + "node_modules/json-stringify-pretty-compact": {
  6089 + "version": "2.0.0",
  6090 + "resolved": "https://registry.npmmirror.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz",
  6091 + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ=="
  6092 + },
6045 6093 "node_modules/json3": {
6046 6094 "version": "3.3.3",
6047 6095 "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
... ... @@ -6106,13 +6154,10 @@
6106 6154 "node": ">=0.10.0"
6107 6155 }
6108 6156 },
6109   - "node_modules/linkify-it": {
6110   - "version": "2.2.0",
6111   - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
6112   - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
6113   - "dependencies": {
6114   - "uc.micro": "^1.0.1"
6115   - }
  6157 + "node_modules/lerc": {
  6158 + "version": "3.0.0",
  6159 + "resolved": "https://registry.npmmirror.com/lerc/-/lerc-3.0.0.tgz",
  6160 + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
6116 6161 },
6117 6162 "node_modules/load-json-file": {
6118 6163 "version": "2.0.0",
... ... @@ -6335,25 +6380,10 @@
6335 6380 "node": ">=0.10.0"
6336 6381 }
6337 6382 },
6338   - "node_modules/markdown-it": {
6339   - "version": "8.4.2",
6340   - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
6341   - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
6342   - "dependencies": {
6343   - "argparse": "^1.0.7",
6344   - "entities": "~1.1.1",
6345   - "linkify-it": "^2.0.0",
6346   - "mdurl": "^1.0.1",
6347   - "uc.micro": "^1.0.5"
6348   - },
6349   - "bin": {
6350   - "markdown-it": "bin/markdown-it.js"
6351   - }
6352   - },
6353   - "node_modules/markdown-it/node_modules/entities": {
6354   - "version": "1.1.2",
6355   - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
6356   - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
  6383 + "node_modules/mapbox-to-css-font": {
  6384 + "version": "2.4.1",
  6385 + "resolved": "https://registry.npmmirror.com/mapbox-to-css-font/-/mapbox-to-css-font-2.4.1.tgz",
  6386 + "integrity": "sha512-QQ/iKiM43DM9+aujTL45Iz5o7gDeSFmy4LPl3HZmNcwCE++NxGazf+yFpY+wCb+YS23sDa1ghpo3zrNFOcHlow=="
6357 6387 },
6358 6388 "node_modules/math-expression-evaluator": {
6359 6389 "version": "1.3.8",
... ... @@ -6378,11 +6408,6 @@
6378 6408 "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
6379 6409 "dev": true
6380 6410 },
6381   - "node_modules/mdurl": {
6382   - "version": "1.0.1",
6383   - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
6384   - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
6385   - },
6386 6411 "node_modules/media-typer": {
6387 6412 "version": "0.3.0",
6388 6413 "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
... ... @@ -6783,8 +6808,7 @@
6783 6808 "node_modules/minimist": {
6784 6809 "version": "1.2.5",
6785 6810 "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
6786   - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
6787   - "dev": true
  6811 + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
6788 6812 },
6789 6813 "node_modules/mississippi": {
6790 6814 "version": "2.0.0",
... ... @@ -7246,6 +7270,27 @@
7246 7270 "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
7247 7271 "dev": true
7248 7272 },
  7273 + "node_modules/ol": {
  7274 + "version": "6.14.1",
  7275 + "resolved": "https://registry.npmmirror.com/ol/-/ol-6.14.1.tgz",
  7276 + "integrity": "sha512-sIcUWkGud3Y2gT3TJubSHlkyMXiPVh1yxfCPHxmY8+qtm79bB9oRnei9xHVIbRRG0Ro6Ldp5E+BMVSvYCxSpaA==",
  7277 + "dependencies": {
  7278 + "geotiff": "^2.0.2",
  7279 + "ol-mapbox-style": "^7.1.1",
  7280 + "pbf": "3.2.1",
  7281 + "rbush": "^3.0.1"
  7282 + }
  7283 + },
  7284 + "node_modules/ol-mapbox-style": {
  7285 + "version": "7.1.1",
  7286 + "resolved": "https://registry.npmmirror.com/ol-mapbox-style/-/ol-mapbox-style-7.1.1.tgz",
  7287 + "integrity": "sha512-GLTEYiH/Ec9Zn1eS4S/zXyR2sierVrUc+OLVP8Ra0FRyqRhoYbXdko0b7OIeSHWdtJfHssWYefDOGxfTRUUZ/A==",
  7288 + "dependencies": {
  7289 + "@mapbox/mapbox-gl-style-spec": "^13.20.1",
  7290 + "mapbox-to-css-font": "^2.4.1",
  7291 + "webfont-matcher": "^1.1.0"
  7292 + }
  7293 + },
7249 7294 "node_modules/on-finished": {
7250 7295 "version": "2.3.0",
7251 7296 "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
... ... @@ -7512,6 +7557,11 @@
7512 7557 "safe-buffer": "^5.1.1"
7513 7558 }
7514 7559 },
  7560 + "node_modules/parse-headers": {
  7561 + "version": "2.0.5",
  7562 + "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz",
  7563 + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
  7564 + },
7515 7565 "node_modules/parse-json": {
7516 7566 "version": "4.0.0",
7517 7567 "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
... ... @@ -7612,6 +7662,18 @@
7612 7662 "node": ">=4"
7613 7663 }
7614 7664 },
  7665 + "node_modules/pbf": {
  7666 + "version": "3.2.1",
  7667 + "resolved": "https://registry.npmmirror.com/pbf/-/pbf-3.2.1.tgz",
  7668 + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
  7669 + "dependencies": {
  7670 + "ieee754": "^1.1.12",
  7671 + "resolve-protobuf-schema": "^2.1.0"
  7672 + },
  7673 + "bin": {
  7674 + "pbf": "bin/pbf"
  7675 + }
  7676 + },
7615 7677 "node_modules/pbkdf2": {
7616 7678 "version": "3.1.1",
7617 7679 "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz",
... ... @@ -10613,6 +10675,11 @@
10613 10675 "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
10614 10676 "dev": true
10615 10677 },
  10678 + "node_modules/protocol-buffers-schema": {
  10679 + "version": "3.6.0",
  10680 + "resolved": "https://registry.npmmirror.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
  10681 + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
  10682 + },
10616 10683 "node_modules/proxy-addr": {
10617 10684 "version": "2.0.6",
10618 10685 "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
... ... @@ -10745,6 +10812,19 @@
10745 10812 "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
10746 10813 "dev": true
10747 10814 },
  10815 + "node_modules/quick-lru": {
  10816 + "version": "6.1.1",
  10817 + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-6.1.1.tgz",
  10818 + "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q==",
  10819 + "engines": {
  10820 + "node": ">=12"
  10821 + }
  10822 + },
  10823 + "node_modules/quickselect": {
  10824 + "version": "2.0.0",
  10825 + "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-2.0.0.tgz",
  10826 + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
  10827 + },
10748 10828 "node_modules/randombytes": {
10749 10829 "version": "2.1.0",
10750 10830 "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
... ... @@ -10788,6 +10868,14 @@
10788 10868 "node": ">= 0.8"
10789 10869 }
10790 10870 },
  10871 + "node_modules/rbush": {
  10872 + "version": "3.0.1",
  10873 + "resolved": "https://registry.npmmirror.com/rbush/-/rbush-3.0.1.tgz",
  10874 + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
  10875 + "dependencies": {
  10876 + "quickselect": "^2.0.0"
  10877 + }
  10878 + },
10791 10879 "node_modules/read-cache": {
10792 10880 "version": "1.0.0",
10793 10881 "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz",
... ... @@ -11225,6 +11313,14 @@
11225 11313 "node": ">=4"
11226 11314 }
11227 11315 },
  11316 + "node_modules/resolve-protobuf-schema": {
  11317 + "version": "2.1.0",
  11318 + "resolved": "https://registry.npmmirror.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
  11319 + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
  11320 + "dependencies": {
  11321 + "protocol-buffers-schema": "^3.3.1"
  11322 + }
  11323 + },
11228 11324 "node_modules/resolve-url": {
11229 11325 "version": "0.2.1",
11230 11326 "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
... ... @@ -11309,6 +11405,11 @@
11309 11405 "aproba": "^1.1.1"
11310 11406 }
11311 11407 },
  11408 + "node_modules/rw": {
  11409 + "version": "1.3.3",
  11410 + "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz",
  11411 + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
  11412 + },
11312 11413 "node_modules/safe-buffer": {
11313 11414 "version": "5.1.2",
11314 11415 "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
... ... @@ -11779,6 +11880,22 @@
11779 11880 "node": ">=0.8.0"
11780 11881 }
11781 11882 },
  11883 + "node_modules/sort-asc": {
  11884 + "version": "0.1.0",
  11885 + "resolved": "https://registry.npmmirror.com/sort-asc/-/sort-asc-0.1.0.tgz",
  11886 + "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw==",
  11887 + "engines": {
  11888 + "node": ">=0.10.0"
  11889 + }
  11890 + },
  11891 + "node_modules/sort-desc": {
  11892 + "version": "0.1.1",
  11893 + "resolved": "https://registry.npmmirror.com/sort-desc/-/sort-desc-0.1.1.tgz",
  11894 + "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw==",
  11895 + "engines": {
  11896 + "node": ">=0.10.0"
  11897 + }
  11898 + },
11782 11899 "node_modules/sort-keys": {
11783 11900 "version": "1.1.2",
11784 11901 "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz",
... ... @@ -11791,6 +11908,18 @@
11791 11908 "node": ">=0.10.0"
11792 11909 }
11793 11910 },
  11911 + "node_modules/sort-object": {
  11912 + "version": "0.3.2",
  11913 + "resolved": "https://registry.npmmirror.com/sort-object/-/sort-object-0.3.2.tgz",
  11914 + "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==",
  11915 + "dependencies": {
  11916 + "sort-asc": "^0.1.0",
  11917 + "sort-desc": "^0.1.1"
  11918 + },
  11919 + "engines": {
  11920 + "node": ">=0.10.0"
  11921 + }
  11922 + },
11794 11923 "node_modules/source-list-map": {
11795 11924 "version": "2.0.1",
11796 11925 "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
... ... @@ -11983,7 +12112,8 @@
11983 12112 "node_modules/sprintf-js": {
11984 12113 "version": "1.0.3",
11985 12114 "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
11986   - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
  12115 + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
  12116 + "dev": true
11987 12117 },
11988 12118 "node_modules/ssri": {
11989 12119 "version": "5.3.0",
... ... @@ -12479,11 +12609,6 @@
12479 12609 "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
12480 12610 "dev": true
12481 12611 },
12482   - "node_modules/uc.micro": {
12483   - "version": "1.0.6",
12484   - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
12485   - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
12486   - },
12487 12612 "node_modules/uglify-js": {
12488 12613 "version": "3.4.10",
12489 12614 "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
... ... @@ -12898,21 +13023,6 @@
12898 13023 "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1600441238751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz",
12899 13024 "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM="
12900 13025 },
12901   - "node_modules/vue-baidu-map": {
12902   - "version": "0.21.22",
12903   - "resolved": "https://registry.npmjs.org/vue-baidu-map/-/vue-baidu-map-0.21.22.tgz",
12904   - "integrity": "sha512-WQMPCih4UTh0AZCKKH/OVOYnyAWjfRNeK6BIeoLmscyY5aF8zzlJhz/NOHLb3mdztIpB0Z6aohn4Jd9mfCSjQw==",
12905   - "dependencies": {
12906   - "bmaplib.curveline": "^1.0.0",
12907   - "bmaplib.heatmap": "^1.0.4",
12908   - "bmaplib.lushu": "^1.0.7",
12909   - "bmaplib.markerclusterer": "^1.0.13",
12910   - "markdown-it": "^8.4.0"
12911   - },
12912   - "peerDependencies": {
12913   - "vue": "^2.1.8"
12914   - }
12915   - },
12916 13026 "node_modules/vue-clipboard2": {
12917 13027 "version": "0.3.1",
12918 13028 "resolved": "https://registry.npm.taobao.org/vue-clipboard2/download/vue-clipboard2-0.3.1.tgz",
... ... @@ -13299,6 +13409,16 @@
13299 13409 "minimalistic-assert": "^1.0.0"
13300 13410 }
13301 13411 },
  13412 + "node_modules/web-worker": {
  13413 + "version": "1.2.0",
  13414 + "resolved": "https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz",
  13415 + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
  13416 + },
  13417 + "node_modules/webfont-matcher": {
  13418 + "version": "1.1.0",
  13419 + "resolved": "https://registry.npmmirror.com/webfont-matcher/-/webfont-matcher-1.1.0.tgz",
  13420 + "integrity": "sha512-ov8lMvF9wi4PD7fK2Axn9PQEpO9cYI0fIoGqErwd+wi8xacFFDmX114D5Q2Lw0Wlgmb+Qw/dKI2KTtimrJf85g=="
  13421 + },
13302 13422 "node_modules/webpack": {
13303 13423 "version": "3.12.0",
13304 13424 "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
... ... @@ -14116,6 +14236,11 @@
14116 14236 "safe-buffer": "~5.1.0"
14117 14237 }
14118 14238 },
  14239 + "node_modules/xml-utils": {
  14240 + "version": "1.0.2",
  14241 + "resolved": "https://registry.npmmirror.com/xml-utils/-/xml-utils-1.0.2.tgz",
  14242 + "integrity": "sha512-rEn0FvKi+YGjv9omf22oAf+0d6Ly/sgJ/CUufU/nOzS7SRLmgwSujrewc03KojXxt+aPaTRpm593TgehtUBMSQ=="
  14243 + },
14119 14244 "node_modules/xtend": {
14120 14245 "version": "4.0.2",
14121 14246 "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1596697437792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz",
... ... @@ -14244,6 +14369,41 @@
14244 14369 }
14245 14370 },
14246 14371 "dependencies": {
  14372 + "@mapbox/jsonlint-lines-primitives": {
  14373 + "version": "2.0.2",
  14374 + "resolved": "https://registry.npmmirror.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz",
  14375 + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ=="
  14376 + },
  14377 + "@mapbox/mapbox-gl-style-spec": {
  14378 + "version": "13.23.1",
  14379 + "resolved": "https://registry.npmmirror.com/@mapbox/mapbox-gl-style-spec/-/mapbox-gl-style-spec-13.23.1.tgz",
  14380 + "integrity": "sha512-C6wh8A/5EdsgzhL6y6yl464VCQNIxK0yjrpnvCvchcFe3sNK2RbBw/J9u3m+p8Y6S6MsGuSMt3AkGAXOKMYweQ==",
  14381 + "requires": {
  14382 + "@mapbox/jsonlint-lines-primitives": "~2.0.2",
  14383 + "@mapbox/point-geometry": "^0.1.0",
  14384 + "@mapbox/unitbezier": "^0.0.0",
  14385 + "csscolorparser": "~1.0.2",
  14386 + "json-stringify-pretty-compact": "^2.0.0",
  14387 + "minimist": "^1.2.5",
  14388 + "rw": "^1.3.3",
  14389 + "sort-object": "^0.3.2"
  14390 + }
  14391 + },
  14392 + "@mapbox/point-geometry": {
  14393 + "version": "0.1.0",
  14394 + "resolved": "https://registry.npmmirror.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz",
  14395 + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ=="
  14396 + },
  14397 + "@mapbox/unitbezier": {
  14398 + "version": "0.0.0",
  14399 + "resolved": "https://registry.npmmirror.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz",
  14400 + "integrity": "sha512-HPnRdYO0WjFjRTSwO3frz1wKaU649OBFPX3Zo/2WZvuRi6zMiRGui8SnPQiQABgqCf8YikDe5t3HViTVw1WUzA=="
  14401 + },
  14402 + "@petamoriken/float16": {
  14403 + "version": "3.6.3",
  14404 + "resolved": "https://registry.npmmirror.com/@petamoriken/float16/-/float16-3.6.3.tgz",
  14405 + "integrity": "sha512-Yx6Z93kmz3JVPYoPPRFJXnt2/G4kfaxRROcZVVHsE4zOClJXvkOVidv/JfvP6hWn16lykbKYKVzUsId6mqXdGg=="
  14406 + },
14247 14407 "@types/q": {
14248 14408 "version": "1.5.4",
14249 14409 "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz",
... ... @@ -14360,6 +14520,7 @@
14360 14520 "version": "1.0.10",
14361 14521 "resolved": "https://registry.npm.taobao.org/argparse/download/argparse-1.0.10.tgz",
14362 14522 "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=",
  14523 + "dev": true,
14363 14524 "requires": {
14364 14525 "sprintf-js": "~1.0.2"
14365 14526 }
... ... @@ -15493,34 +15654,6 @@
15493 15654 "integrity": "sha1-nyKcFb4nJFT/qXOs4NvueaGww28=",
15494 15655 "dev": true
15495 15656 },
15496   - "bmaplib.curveline": {
15497   - "version": "1.0.0",
15498   - "resolved": "https://registry.npmjs.org/bmaplib.curveline/-/bmaplib.curveline-1.0.0.tgz",
15499   - "integrity": "sha512-9wcFMVhiYxNPqpvsLDAADn3qDhNzXp2mA6VyHSHg2XOAgSooC7ZiujdFhy0sp+0QYjTfJ/MjmLuNoUg2HHxH4Q=="
15500   - },
15501   - "bmaplib.heatmap": {
15502   - "version": "1.0.4",
15503   - "resolved": "https://registry.npmjs.org/bmaplib.heatmap/-/bmaplib.heatmap-1.0.4.tgz",
15504   - "integrity": "sha512-rmhqUARBpUSJ9jXzUI2j7dIOqnc38bqubkx/8a349U2qtw/ulLUwyzRD535OrA8G7w5cz4aPKm6/rNvUAarg/Q=="
15505   - },
15506   - "bmaplib.lushu": {
15507   - "version": "1.0.7",
15508   - "resolved": "https://registry.npmjs.org/bmaplib.lushu/-/bmaplib.lushu-1.0.7.tgz",
15509   - "integrity": "sha512-LVvgpESPii6xGxyjnQjq8u+ic4NjvhdCPV/RiSS/PGTUdZKeTDS7prSpleJLZH3ES0+oc0gYn8bw0LtPYUSz2w=="
15510   - },
15511   - "bmaplib.markerclusterer": {
15512   - "version": "1.0.13",
15513   - "resolved": "https://registry.npmjs.org/bmaplib.markerclusterer/-/bmaplib.markerclusterer-1.0.13.tgz",
15514   - "integrity": "sha512-VrLyWSiuDEVNi0yUfwOhFQ6z1oEEHS4w36GNu3iASu6p52QIx9uAXMUkuSCHReNR0bj2Cp9SA1dSx5RpojXajQ==",
15515   - "requires": {
15516   - "bmaplib.texticonoverlay": "^1.0.2"
15517   - }
15518   - },
15519   - "bmaplib.texticonoverlay": {
15520   - "version": "1.0.2",
15521   - "resolved": "https://registry.npmjs.org/bmaplib.texticonoverlay/-/bmaplib.texticonoverlay-1.0.2.tgz",
15522   - "integrity": "sha512-4ZTWr4ZP3B6qEWput5Tut16CfZgII38YwM3bpyb4gFTQyORlKYryFp9WHWrwZZaHlOyYDAXG9SX0hka43jTADg=="
15523   - },
15524 15657 "bn.js": {
15525 15658 "version": "5.1.3",
15526 15659 "resolved": "https://registry.npm.taobao.org/bn.js/download/bn.js-5.1.3.tgz",
... ... @@ -16579,6 +16712,11 @@
16579 16712 "source-map": "^0.6.1"
16580 16713 }
16581 16714 },
  16715 + "csscolorparser": {
  16716 + "version": "1.0.3",
  16717 + "resolved": "https://registry.npmmirror.com/csscolorparser/-/csscolorparser-1.0.3.tgz",
  16718 + "integrity": "sha512-umPSgYwZkdFoUrH5hIq5kf0wPSXiro51nPw0j2K/c83KflkPSTBGMz6NJvMB+07VlL0y7VPo6QJcDjcgKTTm3w=="
  16719 + },
16582 16720 "cssesc": {
16583 16721 "version": "3.0.0",
16584 16722 "resolved": "https://registry.npm.taobao.org/cssesc/download/cssesc-3.0.0.tgz",
... ... @@ -18425,6 +18563,27 @@
18425 18563 "integrity": "sha1-pWiZ0+o8m6uHS7l3O3xe3pL0iV0=",
18426 18564 "dev": true
18427 18565 },
  18566 + "geotiff": {
  18567 + "version": "2.0.5",
  18568 + "resolved": "https://registry.npmmirror.com/geotiff/-/geotiff-2.0.5.tgz",
  18569 + "integrity": "sha512-U5kVYm118YAmw2swiLu8rhfrYnDKOFI7VaMjuQwcq6Intuuid9Pyb4jjxYUxxkq8kOu2r7Am0Rmb52PObGp4pQ==",
  18570 + "requires": {
  18571 + "@petamoriken/float16": "^3.4.7",
  18572 + "lerc": "^3.0.0",
  18573 + "pako": "^2.0.4",
  18574 + "parse-headers": "^2.0.2",
  18575 + "quick-lru": "^6.1.0",
  18576 + "web-worker": "^1.2.0",
  18577 + "xml-utils": "^1.0.2"
  18578 + },
  18579 + "dependencies": {
  18580 + "pako": {
  18581 + "version": "2.0.4",
  18582 + "resolved": "https://registry.npmmirror.com/pako/-/pako-2.0.4.tgz",
  18583 + "integrity": "sha512-v8tweI900AUkZN6heMU/4Uy4cXRc2AYNRggVmTR+dEncawDJgCdLMximOVA2p4qO57WMynangsfGRb5WD6L1Bg=="
  18584 + }
  18585 + }
  18586 + },
18428 18587 "get-caller-file": {
18429 18588 "version": "1.0.3",
18430 18589 "resolved": "https://registry.npm.taobao.org/get-caller-file/download/get-caller-file-1.0.3.tgz",
... ... @@ -18892,8 +19051,7 @@
18892 19051 "ieee754": {
18893 19052 "version": "1.1.13",
18894 19053 "resolved": "https://registry.npm.taobao.org/ieee754/download/ieee754-1.1.13.tgz",
18895   - "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q=",
18896   - "dev": true
  19054 + "integrity": "sha1-7BaFWOlaoYH9h9N/VcMrvLZwi4Q="
18897 19055 },
18898 19056 "iferr": {
18899 19057 "version": "0.1.5",
... ... @@ -19367,6 +19525,11 @@
19367 19525 "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
19368 19526 "dev": true
19369 19527 },
  19528 + "json-stringify-pretty-compact": {
  19529 + "version": "2.0.0",
  19530 + "resolved": "https://registry.npmmirror.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz",
  19531 + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ=="
  19532 + },
19370 19533 "json3": {
19371 19534 "version": "3.3.3",
19372 19535 "resolved": "https://registry.npm.taobao.org/json3/download/json3-3.3.3.tgz",
... ... @@ -19419,13 +19582,10 @@
19419 19582 "invert-kv": "^1.0.0"
19420 19583 }
19421 19584 },
19422   - "linkify-it": {
19423   - "version": "2.2.0",
19424   - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz",
19425   - "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==",
19426   - "requires": {
19427   - "uc.micro": "^1.0.1"
19428   - }
  19585 + "lerc": {
  19586 + "version": "3.0.0",
  19587 + "resolved": "https://registry.npmmirror.com/lerc/-/lerc-3.0.0.tgz",
  19588 + "integrity": "sha512-Rm4J/WaHhRa93nCN2mwWDZFoRVF18G1f47C+kvQWyHGEZxFpTUi73p7lMVSAndyxGt6lJ2/CFbOcf9ra5p8aww=="
19429 19589 },
19430 19590 "load-json-file": {
19431 19591 "version": "2.0.0",
... ... @@ -19604,24 +19764,10 @@
19604 19764 "object-visit": "^1.0.0"
19605 19765 }
19606 19766 },
19607   - "markdown-it": {
19608   - "version": "8.4.2",
19609   - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-8.4.2.tgz",
19610   - "integrity": "sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==",
19611   - "requires": {
19612   - "argparse": "^1.0.7",
19613   - "entities": "~1.1.1",
19614   - "linkify-it": "^2.0.0",
19615   - "mdurl": "^1.0.1",
19616   - "uc.micro": "^1.0.5"
19617   - },
19618   - "dependencies": {
19619   - "entities": {
19620   - "version": "1.1.2",
19621   - "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
19622   - "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
19623   - }
19624   - }
  19767 + "mapbox-to-css-font": {
  19768 + "version": "2.4.1",
  19769 + "resolved": "https://registry.npmmirror.com/mapbox-to-css-font/-/mapbox-to-css-font-2.4.1.tgz",
  19770 + "integrity": "sha512-QQ/iKiM43DM9+aujTL45Iz5o7gDeSFmy4LPl3HZmNcwCE++NxGazf+yFpY+wCb+YS23sDa1ghpo3zrNFOcHlow=="
19625 19771 },
19626 19772 "math-expression-evaluator": {
19627 19773 "version": "1.3.8",
... ... @@ -19646,11 +19792,6 @@
19646 19792 "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==",
19647 19793 "dev": true
19648 19794 },
19649   - "mdurl": {
19650   - "version": "1.0.1",
19651   - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz",
19652   - "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4="
19653   - },
19654 19795 "media-typer": {
19655 19796 "version": "0.3.0",
19656 19797 "resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz",
... ... @@ -19976,8 +20117,7 @@
19976 20117 "minimist": {
19977 20118 "version": "1.2.5",
19978 20119 "resolved": "https://registry.npm.taobao.org/minimist/download/minimist-1.2.5.tgz",
19979   - "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=",
19980   - "dev": true
  20120 + "integrity": "sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI="
19981 20121 },
19982 20122 "mississippi": {
19983 20123 "version": "2.0.0",
... ... @@ -20372,6 +20512,27 @@
20372 20512 "integrity": "sha1-Cb6jND1BhZ69RGKS0RydTbYZCE4=",
20373 20513 "dev": true
20374 20514 },
  20515 + "ol": {
  20516 + "version": "6.14.1",
  20517 + "resolved": "https://registry.npmmirror.com/ol/-/ol-6.14.1.tgz",
  20518 + "integrity": "sha512-sIcUWkGud3Y2gT3TJubSHlkyMXiPVh1yxfCPHxmY8+qtm79bB9oRnei9xHVIbRRG0Ro6Ldp5E+BMVSvYCxSpaA==",
  20519 + "requires": {
  20520 + "geotiff": "^2.0.2",
  20521 + "ol-mapbox-style": "^7.1.1",
  20522 + "pbf": "3.2.1",
  20523 + "rbush": "^3.0.1"
  20524 + }
  20525 + },
  20526 + "ol-mapbox-style": {
  20527 + "version": "7.1.1",
  20528 + "resolved": "https://registry.npmmirror.com/ol-mapbox-style/-/ol-mapbox-style-7.1.1.tgz",
  20529 + "integrity": "sha512-GLTEYiH/Ec9Zn1eS4S/zXyR2sierVrUc+OLVP8Ra0FRyqRhoYbXdko0b7OIeSHWdtJfHssWYefDOGxfTRUUZ/A==",
  20530 + "requires": {
  20531 + "@mapbox/mapbox-gl-style-spec": "^13.20.1",
  20532 + "mapbox-to-css-font": "^2.4.1",
  20533 + "webfont-matcher": "^1.1.0"
  20534 + }
  20535 + },
20375 20536 "on-finished": {
20376 20537 "version": "2.3.0",
20377 20538 "resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz",
... ... @@ -20589,6 +20750,11 @@
20589 20750 "safe-buffer": "^5.1.1"
20590 20751 }
20591 20752 },
  20753 + "parse-headers": {
  20754 + "version": "2.0.5",
  20755 + "resolved": "https://registry.npmmirror.com/parse-headers/-/parse-headers-2.0.5.tgz",
  20756 + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA=="
  20757 + },
20592 20758 "parse-json": {
20593 20759 "version": "4.0.0",
20594 20760 "resolved": "https://registry.npm.taobao.org/parse-json/download/parse-json-4.0.0.tgz?cache=0&sync_timestamp=1598130878813&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fparse-json%2Fdownload%2Fparse-json-4.0.0.tgz",
... ... @@ -20668,6 +20834,15 @@
20668 20834 "pify": "^3.0.0"
20669 20835 }
20670 20836 },
  20837 + "pbf": {
  20838 + "version": "3.2.1",
  20839 + "resolved": "https://registry.npmmirror.com/pbf/-/pbf-3.2.1.tgz",
  20840 + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==",
  20841 + "requires": {
  20842 + "ieee754": "^1.1.12",
  20843 + "resolve-protobuf-schema": "^2.1.0"
  20844 + }
  20845 + },
20671 20846 "pbkdf2": {
20672 20847 "version": "3.1.1",
20673 20848 "resolved": "https://registry.npm.taobao.org/pbkdf2/download/pbkdf2-3.1.1.tgz",
... ... @@ -23119,6 +23294,11 @@
23119 23294 "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
23120 23295 "dev": true
23121 23296 },
  23297 + "protocol-buffers-schema": {
  23298 + "version": "3.6.0",
  23299 + "resolved": "https://registry.npmmirror.com/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz",
  23300 + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw=="
  23301 + },
23122 23302 "proxy-addr": {
23123 23303 "version": "2.0.6",
23124 23304 "resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz",
... ... @@ -23230,6 +23410,16 @@
23230 23410 "integrity": "sha1-M0WUG0FTy50ILY7uTNogFqmu9/Y=",
23231 23411 "dev": true
23232 23412 },
  23413 + "quick-lru": {
  23414 + "version": "6.1.1",
  23415 + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-6.1.1.tgz",
  23416 + "integrity": "sha512-S27GBT+F0NTRiehtbrgaSE1idUAJ5bX8dPAQTdylEyNlrdcH5X4Lz7Edz3DYzecbsCluD5zO8ZNEe04z3D3u6Q=="
  23417 + },
  23418 + "quickselect": {
  23419 + "version": "2.0.0",
  23420 + "resolved": "https://registry.npmmirror.com/quickselect/-/quickselect-2.0.0.tgz",
  23421 + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw=="
  23422 + },
23233 23423 "randombytes": {
23234 23424 "version": "2.1.0",
23235 23425 "resolved": "https://registry.npm.taobao.org/randombytes/download/randombytes-2.1.0.tgz",
... ... @@ -23267,6 +23457,14 @@
23267 23457 "unpipe": "1.0.0"
23268 23458 }
23269 23459 },
  23460 + "rbush": {
  23461 + "version": "3.0.1",
  23462 + "resolved": "https://registry.npmmirror.com/rbush/-/rbush-3.0.1.tgz",
  23463 + "integrity": "sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w==",
  23464 + "requires": {
  23465 + "quickselect": "^2.0.0"
  23466 + }
  23467 + },
23270 23468 "read-cache": {
23271 23469 "version": "1.0.0",
23272 23470 "resolved": "https://registry.npm.taobao.org/read-cache/download/read-cache-1.0.0.tgz",
... ... @@ -23648,6 +23846,14 @@
23648 23846 "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
23649 23847 "dev": true
23650 23848 },
  23849 + "resolve-protobuf-schema": {
  23850 + "version": "2.1.0",
  23851 + "resolved": "https://registry.npmmirror.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz",
  23852 + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==",
  23853 + "requires": {
  23854 + "protocol-buffers-schema": "^3.3.1"
  23855 + }
  23856 + },
23651 23857 "resolve-url": {
23652 23858 "version": "0.2.1",
23653 23859 "resolved": "https://registry.npm.taobao.org/resolve-url/download/resolve-url-0.2.1.tgz",
... ... @@ -23719,6 +23925,11 @@
23719 23925 "aproba": "^1.1.1"
23720 23926 }
23721 23927 },
  23928 + "rw": {
  23929 + "version": "1.3.3",
  23930 + "resolved": "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz",
  23931 + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
  23932 + },
23722 23933 "safe-buffer": {
23723 23934 "version": "5.1.2",
23724 23935 "resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz",
... ... @@ -24124,6 +24335,16 @@
24124 24335 }
24125 24336 }
24126 24337 },
  24338 + "sort-asc": {
  24339 + "version": "0.1.0",
  24340 + "resolved": "https://registry.npmmirror.com/sort-asc/-/sort-asc-0.1.0.tgz",
  24341 + "integrity": "sha512-jBgdDd+rQ+HkZF2/OHCmace5dvpos/aWQpcxuyRs9QUbPRnkEJmYVo81PIGpjIdpOcsnJ4rGjStfDHsbn+UVyw=="
  24342 + },
  24343 + "sort-desc": {
  24344 + "version": "0.1.1",
  24345 + "resolved": "https://registry.npmmirror.com/sort-desc/-/sort-desc-0.1.1.tgz",
  24346 + "integrity": "sha512-jfZacW5SKOP97BF5rX5kQfJmRVZP5/adDUTY8fCSPvNcXDVpUEe2pr/iKGlcyZzchRJZrswnp68fgk3qBXgkJw=="
  24347 + },
24127 24348 "sort-keys": {
24128 24349 "version": "1.1.2",
24129 24350 "resolved": "https://registry.npm.taobao.org/sort-keys/download/sort-keys-1.1.2.tgz",
... ... @@ -24133,6 +24354,15 @@
24133 24354 "is-plain-obj": "^1.0.0"
24134 24355 }
24135 24356 },
  24357 + "sort-object": {
  24358 + "version": "0.3.2",
  24359 + "resolved": "https://registry.npmmirror.com/sort-object/-/sort-object-0.3.2.tgz",
  24360 + "integrity": "sha512-aAQiEdqFTTdsvUFxXm3umdo04J7MRljoVGbBlkH7BgNsMvVNAJyGj7C/wV1A8wHWAJj/YikeZbfuCKqhggNWGA==",
  24361 + "requires": {
  24362 + "sort-asc": "^0.1.0",
  24363 + "sort-desc": "^0.1.1"
  24364 + }
  24365 + },
24136 24366 "source-list-map": {
24137 24367 "version": "2.0.1",
24138 24368 "resolved": "https://registry.npm.taobao.org/source-list-map/download/source-list-map-2.0.1.tgz",
... ... @@ -24296,7 +24526,8 @@
24296 24526 "sprintf-js": {
24297 24527 "version": "1.0.3",
24298 24528 "resolved": "https://registry.npm.taobao.org/sprintf-js/download/sprintf-js-1.0.3.tgz",
24299   - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
  24529 + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
  24530 + "dev": true
24300 24531 },
24301 24532 "ssri": {
24302 24533 "version": "5.3.0",
... ... @@ -24703,11 +24934,6 @@
24703 24934 "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
24704 24935 "dev": true
24705 24936 },
24706   - "uc.micro": {
24707   - "version": "1.0.6",
24708   - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz",
24709   - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA=="
24710   - },
24711 24937 "uglify-js": {
24712 24938 "version": "3.4.10",
24713 24939 "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.4.10.tgz?cache=0&sync_timestamp=1601823880483&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fuglify-js%2Fdownload%2Fuglify-js-3.4.10.tgz",
... ... @@ -25072,18 +25298,6 @@
25072 25298 "resolved": "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1600441238751&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz",
25073 25299 "integrity": "sha1-9evU+mvShpQD4pqJau1JBEVskSM="
25074 25300 },
25075   - "vue-baidu-map": {
25076   - "version": "0.21.22",
25077   - "resolved": "https://registry.npmjs.org/vue-baidu-map/-/vue-baidu-map-0.21.22.tgz",
25078   - "integrity": "sha512-WQMPCih4UTh0AZCKKH/OVOYnyAWjfRNeK6BIeoLmscyY5aF8zzlJhz/NOHLb3mdztIpB0Z6aohn4Jd9mfCSjQw==",
25079   - "requires": {
25080   - "bmaplib.curveline": "^1.0.0",
25081   - "bmaplib.heatmap": "^1.0.4",
25082   - "bmaplib.lushu": "^1.0.7",
25083   - "bmaplib.markerclusterer": "^1.0.13",
25084   - "markdown-it": "^8.4.0"
25085   - }
25086   - },
25087 25301 "vue-clipboard2": {
25088 25302 "version": "0.3.1",
25089 25303 "resolved": "https://registry.npm.taobao.org/vue-clipboard2/download/vue-clipboard2-0.3.1.tgz",
... ... @@ -25421,6 +25635,16 @@
25421 25635 "minimalistic-assert": "^1.0.0"
25422 25636 }
25423 25637 },
  25638 + "web-worker": {
  25639 + "version": "1.2.0",
  25640 + "resolved": "https://registry.npmmirror.com/web-worker/-/web-worker-1.2.0.tgz",
  25641 + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA=="
  25642 + },
  25643 + "webfont-matcher": {
  25644 + "version": "1.1.0",
  25645 + "resolved": "https://registry.npmmirror.com/webfont-matcher/-/webfont-matcher-1.1.0.tgz",
  25646 + "integrity": "sha512-ov8lMvF9wi4PD7fK2Axn9PQEpO9cYI0fIoGqErwd+wi8xacFFDmX114D5Q2Lw0Wlgmb+Qw/dKI2KTtimrJf85g=="
  25647 + },
25424 25648 "webpack": {
25425 25649 "version": "3.12.0",
25426 25650 "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz",
... ... @@ -26091,6 +26315,11 @@
26091 26315 "safe-buffer": "~5.1.0"
26092 26316 }
26093 26317 },
  26318 + "xml-utils": {
  26319 + "version": "1.0.2",
  26320 + "resolved": "https://registry.npmmirror.com/xml-utils/-/xml-utils-1.0.2.tgz",
  26321 + "integrity": "sha512-rEn0FvKi+YGjv9omf22oAf+0d6Ly/sgJ/CUufU/nOzS7SRLmgwSujrewc03KojXxt+aPaTRpm593TgehtUBMSQ=="
  26322 + },
26094 26323 "xtend": {
26095 26324 "version": "4.0.2",
26096 26325 "resolved": "https://registry.npm.taobao.org/xtend/download/xtend-4.0.2.tgz?cache=0&sync_timestamp=1596697437792&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxtend%2Fdownload%2Fxtend-4.0.2.tgz",
... ...
web_src/package.json
... ... @@ -16,9 +16,9 @@
16 16 "element-ui": "^2.15.6",
17 17 "fingerprintjs2": "^2.1.2",
18 18 "moment": "^2.29.1",
  19 + "ol": "^6.14.1",
19 20 "postcss-pxtorem": "^5.1.1",
20 21 "vue": "^2.6.11",
21   - "vue-baidu-map": "^0.21.22",
22 22 "vue-clipboard2": "^0.3.1",
23 23 "vue-clipboards": "^1.3.0",
24 24 "vue-contextmenujs": "^1.3.13",
... ...
web_src/src/components/UiHeader.vue
... ... @@ -4,6 +4,7 @@
4 4 <el-menu-item index="/">控制台</el-menu-item>
5 5 <el-menu-item index="/live">实时监控</el-menu-item>
6 6 <el-menu-item index="/deviceList">国标设备</el-menu-item>
  7 + <el-menu-item index="/devicePosition">电子地图</el-menu-item>
7 8 <el-menu-item index="/pushVideoList">推流列表</el-menu-item>
8 9 <el-menu-item index="/streamProxyList">拉流代理</el-menu-item>
9 10 <el-menu-item index="/cloudRecord">云端录像</el-menu-item>
... ...
web_src/src/components/common/MapComponent.vue 0 → 100644
  1 +<template>
  2 + <div id="mapContainer" style="width: 100%;height: 100%;"></div>
  3 +</template>
  4 +
  5 +<script>
  6 +import 'ol/ol.css';
  7 +import Map from 'ol/Map';
  8 +import OSM from 'ol/source/OSM';
  9 +import XYZ from 'ol/source/XYZ';
  10 +import TileLayer from 'ol/layer/Tile';
  11 +import View from 'ol/View';
  12 +import {get as getProj, fromLonLat} from 'ol/proj';
  13 +import {ZoomSlider, Zoom} from 'ol/control';
  14 +
  15 +let olMap = null;
  16 +
  17 +export default {
  18 + name: 'MapComponent',
  19 + data() {
  20 + return {
  21 +
  22 +
  23 + };
  24 + },
  25 + created(){
  26 + this.$nextTick(() => {
  27 + this.init();
  28 + })
  29 +
  30 + },
  31 + props: [],
  32 + mounted () {
  33 +
  34 + },
  35 + methods: {
  36 + init(){
  37 +
  38 + let center = fromLonLat([116.41020, 39.915119]);
  39 + if (mapParam.center) {
  40 + center = fromLonLat(mapParam.center);
  41 + }
  42 + const view = new View({
  43 + center: center,
  44 + zoom: mapParam.zoom || 10,
  45 + projection: this.projection,
  46 + maxZoom: mapParam.maxZoom || 19,
  47 + minZoom: mapParam.minZoom || 1,
  48 + });
  49 + let tileLayer = null;
  50 + if (mapParam.tilesUrl) {
  51 + tileLayer = new TileLayer({
  52 + source: new XYZ({
  53 + projection: getProj("EPSG:3857"),
  54 + wrapX: false,
  55 + tileSize: 256 || mapParam.tileSize,
  56 + url: mapParam.tilesUrl
  57 + })
  58 + })
  59 + }else {
  60 + tileLayer = new TileLayer({
  61 + preload: 4,
  62 + source: new OSM(),
  63 + })
  64 + }
  65 + olMap = new Map({
  66 + target: "mapContainer", // 容器ID
  67 + layers: [tileLayer], // 默认图层
  68 + view: view, // 视图
  69 + controls:[ // 控件
  70 + // new ZoomSlider(),
  71 + new Zoom(),
  72 + ] ,
  73 + })
  74 + },
  75 + setCenter(point){
  76 +
  77 + },
  78 + zoomIn(zoom){
  79 +
  80 + },
  81 + zoomOut(zoom){
  82 +
  83 + },
  84 + centerAndZoom(point,zoom,callback){
  85 +
  86 + },
  87 + panTo(point){
  88 +
  89 + },
  90 + openInfoBox(){
  91 +
  92 + },
  93 + closeInfoBox(){
  94 +
  95 + },
  96 + addLayer(){
  97 +
  98 + },
  99 + removeLayer(){
  100 +
  101 + }
  102 +
  103 +
  104 +
  105 + },
  106 + destroyed() {
  107 + // if (this.jessibuca) {
  108 + // this.jessibuca.destroy();
  109 + // }
  110 + // this.playing = false;
  111 + // this.loaded = false;
  112 + // this.performance = "";
  113 + },
  114 +}
  115 +</script>
  116 +
  117 +<style>
  118 +
  119 +</style>
... ...
web_src/src/components/dialog/jessibuca.vue renamed to web_src/src/components/common/jessibuca.vue
web_src/src/components/devicePosition.vue
... ... @@ -4,388 +4,257 @@
4 4 <el-header>
5 5 <uiHeader></uiHeader>
6 6 </el-header>
  7 + <el-container>
  8 + <el-aside width="250px" height="100%" style="background-color: #FFFFFF; margin: 0 0 20px 20px;">
  9 + <div style=" padding-top: 10px">
  10 + <el-tree class="el-scrollbar"
  11 + ref="tree"
  12 + id="deviceTree"
  13 + empty-text="未知节点"
  14 + node-key="id"
  15 + :highlight-current="false"
  16 + :expand-on-click-node="false"
  17 + :props="props"
  18 + :load="loadNode"
  19 + @node-contextmenu="contextmenuEventHandler"
  20 + @node-click="nodeClickHandler"
  21 + lazy>
  22 + </el-tree>
  23 + </div>
  24 +
  25 + </el-aside>
7 26 <el-main>
8   - <div style="background-color: #ffffff; position: relative; padding: 1rem 0.5rem 0.5rem 0.5rem; text-align: center;">
9   - <span style="font-size: 1rem; font-weight: 500">设备定位 ({{ parentChannelId == 0 ? deviceId : parentChannelId }})</span>
10   - </div>
11   - <div style="background-color: #ffffff; margin-bottom: 1rem; position: relative; padding: 0.5rem; text-align: left; font-size: 14px;">
12   - <el-button icon="el-icon-arrow-left" size="mini" style="margin-right: 1rem" type="primary" @click="showDevice">返回</el-button>
13   - <!-- <span class="demonstration">从</span> -->
14   - <el-date-picker v-model="searchFrom" type="datetime" placeholder="选择开始日期时间" default-time="00:00:00" size="mini" style="width: 11rem;" align="right" :picker-options="pickerOptions"></el-date-picker>
15   - <el-date-picker v-model="searchTo" type="datetime" placeholder="选择结束日期时间" default-time="00:00:00" size="mini" style="width: 11rem;" align="right" :picker-options="pickerOptions"></el-date-picker>
16   - <el-button-group>
17   - <el-button icon="el-icon-search" size="mini" type="primary" @click="showHistoryPath">历史轨迹</el-button>
18   - <el-button icon="el-icon-search" size="mini" style="margin-right: 1rem" type="primary" @click="showLatestPosition">最新位置</el-button>
19   - </el-button-group>
20   - <el-tag style="width: 5rem; text-align: center" size="medium">过期时间</el-tag>
21   - <el-input-number size="mini" v-model="expired" :min="300" :controls="false" style="width: 4rem;"></el-input-number>
22   - <el-tag style="width: 5rem; text-align: center" size="medium">上报周期</el-tag>
23   - <el-input-number size="mini" v-model="interval" :min="1" :controls="false" style="width: 4rem;"></el-input-number>
24   - <el-button-group>
25   - <el-button icon="el-icon-search" size="mini" type="primary" @click="subscribeMobilePosition">位置订阅</el-button>
26   - <el-button icon="el-icon-search" size="mini" type="primary" @click="unSubscribeMobilePosition">取消订阅</el-button>
27   - </el-button-group>
28   - <el-checkbox size="mini" style="margin-right: 1rem; float: right" v-model="autoList" @change="autoListChange" >自动刷新</el-checkbox>
29   - </div>
30   - <div class="mapContainer" style="background-color: #ffffff; position: relative; padding: 1rem 0.5rem 0.5rem 0.5rem; text-align: center; height: calc(100% - 10rem);">
31   - <div class="baidumap" id="allmap"></div>
32   - </div>
  27 + <MapComponent></MapComponent>
33 28 </el-main>
  29 + </el-container>
34 30 </el-container>
35 31 </div>
36 32 </template>
37 33  
38 34 <script>
39 35 import uiHeader from "./UiHeader.vue";
40   -import moment from "moment";
41   -import geoTools from "./GeoConvertTools.js";
  36 +import MapComponent from "./common/MapComponent.vue";
  37 +import DeviceService from "./service/DeviceService";
42 38 export default {
43 39 name: "devicePosition",
44 40 components: {
45   - uiHeader,
  41 + MapComponent,
  42 + uiHeader,
46 43 },
47 44 data() {
48 45 return {
49   - pickerOptions: {
50   - shortcuts: [{
51   - text: '今天',
52   - onClick(picker) {
53   - picker.$emit('pick', new Date());
54   - }
55   - }, {
56   - text: '昨天',
57   - onClick(picker) {
58   - const date = new Date();
59   - date.setTime(date.getTime() - 3600 * 1000 * 24);
60   - picker.$emit('pick', date);
61   - }
62   - }, {
63   - text: '一周前',
64   - onClick(picker) {
65   - const date = new Date();
66   - date.setTime(date.getTime() - 3600 * 1000 * 24 * 7);
67   - picker.$emit('pick', date);
68   - }
69   - }]
70   - },
71   - deviceId: this.$route.params.deviceId,
72   - showHistoryPosition: false, //显示历史轨迹
73   - startTime: null,
74   - endTime: null,
75   - searchFrom: null,
76   - searchTo: null,
77   - expired: 600,
78   - interval: 5,
79   - mobilePositionList: [],
80   - mapPointList: [],
81   - parentChannelId: this.$route.params.parentChannelId,
82   - updateLooper: 0, //数据刷新轮训标志
83   - total: 0,
84   - beforeUrl: "/deviceList",
85   - isLoging: false,
86   - autoList: false,
  46 + deviceService: new DeviceService(),
  47 + props: {
  48 + label: 'name',
  49 + children: 'children',
  50 + isLeaf: 'leaf'
  51 + },
87 52 };
88 53 },
89   - mounted() {
90   - this.initData();
91   - this.initBaiduMap();
92   - if (this.autoList) {
93   - this.updateLooper = setInterval(this.initData, 5000);
94   - }
  54 + created() {
  55 + this.init();
95 56 },
96 57 destroyed() {
97   - // this.$destroy("videojs");
98   - clearTimeout(this.updateLooper);
  58 +
99 59 },
100 60 methods: {
101   - initData: function () {
102   - // if (this.parentChannelId == "" || this.parentChannelId == 0) {
103   - // this.getDeviceChannelList();
104   - // } else {
105   - // this.showSubchannels();
106   - // }
107   - },
108   - initParam: function () {
109   - // this.deviceId = this.$route.params.deviceId;
110   - // this.parentChannelId = this.$route.params.parentChannelId;
111   - // this.currentPage = parseInt(this.$route.params.page);
112   - // this.count = parseInt(this.$route.params.count);
113   - // if (this.parentChannelId == "" || this.parentChannelId == 0) {
114   - // this.beforeUrl = "/deviceList";
115   - // }
116   - },
117   - initBaiduMap() {
118   - this.map = new BMap.Map("allmap"); // 创建地图实例
119   - let points = [];
120   - let point = new BMap.Point(116.231398, 39.567445); // 创建点坐标
121   - this.map.centerAndZoom(point, 5); // 初始化地图,设置中心点坐标和地图级别
122   - this.map.enableScrollWheelZoom(true); //开启鼠标滚轮缩放
123   - this.map.addControl(new BMap.NavigationControl());
124   - this.map.addControl(new BMap.ScaleControl());
125   - this.map.addControl(new BMap.OverviewMapControl());
126   - this.map.addControl(new BMap.MapTypeControl());
127   - //map.setMapStyle({ style: 'midnight' }) //地图风格
128   - },
129   - currentChange: function (val) {
130   - // var url = `/${this.$router.currentRoute.name}/${this.deviceId}/${this.parentChannelId}/${this.count}/${val}`;
131   - // console.log(url);
132   - // this.$router.push(url).then(() => {
133   - // this.initParam();
134   - // this.initData();
135   - // });
136   - },
137   - handleSizeChange: function (val) {
138   - // var url = `/${this.$router.currentRoute.name}/${this.$router.params.deviceId}/${this.$router.params.parentChannelId}/${val}/1`;
139   - // this.$router.push(url).then(() => {
140   - // this.initParam();
141   - // this.initData();
142   - // });
143   - },
144   - showDevice: function () {
145   - this.$router.push(this.beforeUrl).then(() => {
146   - this.initParam();
147   - this.initData();
148   - });
149   - },
150   - autoListChange: function () {
151   - if (this.autoList) {
152   - this.updateLooper = setInterval(this.initData, 1500);
153   - } else {
154   - window.clearInterval(this.updateLooper);
  61 + init(){
  62 +
  63 + },
  64 + loadNode: function(node, resolve){
  65 + if (node.level === 0) {
  66 + this.deviceService.getAllDeviceList((data)=>{
  67 + console.log("all deivce")
  68 + console.log(data)
  69 + if (data.length > 0) {
  70 + let nodeList = []
  71 + for (let i = 0; i < data.length; i++) {
  72 + let node = {
  73 + name: data[i].name || data[i].deviceId,
  74 + id: data[i].deviceId,
  75 + online: data[i].online,
  76 + deviceId: data[i].deviceId,
  77 + }
  78 + nodeList.push(node);
  79 + }
  80 + resolve(nodeList)
  81 + }else {
  82 + resolve([])
155 83 }
156   - },
157   - showHistoryPath: function () {
158   - this.map.clearOverlays();
159   - this.mapPointList = [];
160   - this.mobilePositionList = [];
161   - if (!!this.searchFrom) {
162   - this.startTime = this.toGBString(this.searchFrom);
163   - console.log(this.startTime);
164   - } else{
165   - this.startTime = null;
  84 + }, (error)=>{
  85 +
  86 + })
  87 + }
  88 + if (node.level === 1){
  89 + console.log(node)
  90 + this.deviceService.getAllCatalog(node.data.deviceId, (data)=>{
  91 + console.log("all Catalog")
  92 + console.log(data)
  93 + if (data.length > 0) {
  94 + let nodeList = []
  95 + for (let i = 0; i < data.length; i++) {
  96 + let node = {
  97 + name: data[i].name || data[i].channelId,
  98 + id: data[i].channelId,
  99 + online: data[i].status === 1,
  100 + deviceId: data[i].deviceId,
  101 + channelId: data[i].channelId,
  102 + }
  103 + nodeList.push(node);
  104 + }
  105 + resolve(nodeList)
  106 + }else {
  107 + resolve([])
166 108 }
167   - if (!!this.searchTo) {
168   - this.endTime = this.toGBString(this.searchTo);
169   - console.log(this.endTime);
170   - } else {
171   - this.endTime = null;
  109 + }, (error)=>{
  110 +
  111 + })
  112 + }
  113 +
  114 + if (node.level > 1) {
  115 + console.log(node.data.channelId)
  116 + this.deviceService.getAllSubCatalog(node.data.deviceId, node.data.channelId, (data)=>{
  117 + console.log("all Catalog")
  118 + console.log(data)
  119 + if (data.length > 0) {
  120 + let nodeList = []
  121 + for (let i = 0; i < data.length; i++) {
  122 + let node = {
  123 + name: data[i].name || data[i].channelId,
  124 + id: data[i].channelId,
  125 + online: data[i].status === 1,
  126 + deviceId: data[i].deviceId,
  127 + channelId: data[i].channelId,
  128 + }
  129 + nodeList.push(node);
  130 + }
  131 + resolve(nodeList)
  132 + }else {
  133 + resolve([])
172 134 }
173   - let self = this;
174   - this.$axios({
175   - method: 'get',
176   - url:`/api/position/history/${this.deviceId}`,
177   - params: {
178   - start: self.startTime,
179   - end: self.endTime,
180   - },
181   - }).then(function (res) {
182   - self.total = res.data.length;
183   - self.mobilePositionList = res.data;
184   - console.log(self.mobilePositionList);
185   - if (self.total == 0) {
186   - self.$message({
187   - showClose: true,
188   - message: '未找到符合条件的移动位置信息',
189   - type: 'error'
190   - });
191   - } else {
192   - self.$nextTick(() => {
193   - self.showMarkPoints(self);
194   - });
  135 + }, (error)=>{
  136 +
  137 + })
  138 + }
  139 + },
  140 + contextmenuEventHandler: function (event,data,node,element){
  141 + if (node.data.type !== 0) {
  142 + data.parentId = node.parent.data.id;
  143 + this.$contextmenu({
  144 + items: [
  145 + {
  146 + label: "移除通道",
  147 + icon: "el-icon-delete",
  148 + disabled: false,
  149 + onClick: () => {
  150 + this.$axios({
  151 + method:"delete",
  152 + url:"/api/platform/catalog/relation/del",
  153 + data: data
  154 + }).then((res)=>{
  155 + console.log("移除成功")
  156 + node.parent.loaded = false
  157 + node.parent.expand();
  158 + }).catch(function (error) {
  159 + console.log(error);
  160 + });
195 161 }
196   - }).catch(function (error) {
197   - console.log(error);
198   - });
199   - },
200   - showLatestPosition: function() {
201   - this.map.clearOverlays();
202   - this.mapPointList = [];
203   - this.mobilePositionList = [];
204   - let self = this;
205   - this.$axios({
206   - method: 'get',
207   - url:`/api/position/latest/${this.deviceId}`
208   - }).then(function (res) {
209   - console.log(res.data);
210   - self.total = res.data.length;
211   - self.mobilePositionList.push(res.data);
212   - console.log(self.mobilePositionList);
213   - if (self.total == 0) {
214   - self.$message({
215   - showClose: true,
216   - message: '未找到符合条件的移动位置信息',
217   - type: 'error'
218   - });
219   - } else {
220   - self.$nextTick(() => {
221   - self.showMarkPoints(self);
222   - });
  162 + }
  163 + ],
  164 + event, // 鼠标事件信息
  165 + customClass: "custom-class", // 自定义菜单 class
  166 + zIndex: 3000, // 菜单样式 z-index
  167 + });
  168 + }else {
  169 + this.$contextmenu({
  170 + items: [
  171 + {
  172 + label: "刷新节点",
  173 + icon: "el-icon-refresh",
  174 + disabled: false,
  175 + onClick: () => {
  176 + this.refreshCatalog(node);
223 177 }
224   - }).catch(function (error) {
225   - console.log(error);
226   - });
227   - },
228   - subscribeMobilePosition: function() {
229   - let self = this;
230   - this.$axios({
231   - method: 'get',
232   - url:`/api/position/subscribe/${this.deviceId}`,
233   - params: {
234   - expires: self.expired,
235   - interval: self.interval,
236   - },
237   - }).then(function (res) {
238   - console.log(res.data);
239   - })
240   - .catch(function (error) {
241   - console.log(error);
242   - });
243   - },
244   - unSubscribeMobilePosition: function() {
245   - let self = this;
246   - this.$axios({
247   - method: 'get',
248   - url:`/api/position/subscribe/${this.deviceId}`,
249   - params: {
250   - expires: 0,
251   - interval: self.interval,
252   - },
253   - })
254   - .then(function (res) {
255   - console.log(res.data);
256   - }).catch(function (error) {
257   - console.log(error);
258   - });
259   - },
260   - toGBString: function (dateTime) {
261   - return (
262   - dateTime.getFullYear() +
263   - "-" + this.twoDigits(dateTime.getMonth() + 1) +
264   - "-" + this.twoDigits(dateTime.getDate()) +
265   - "T" + this.twoDigits(dateTime.getHours()) +
266   - ":" + this.twoDigits(dateTime.getMinutes()) +
267   - ":" + this.twoDigits(dateTime.getSeconds())
268   - );
269   - },
270   - twoDigits: function (num) {
271   - if (num < 10) {
272   - return "0" + num;
273   - } else {
274   - return "" + num;
275   - }
276   - },
277   - showMarkPoints: function(self) {
278   - let that = self;
279   - let npointJ = null;
280   - let npointW = null;
281   - let point = null;
282   - for (let i = 0; i < self.mobilePositionList.length; i++) {
283   - if (self.mobilePositionList[i].geodeticSystem == "BD-09") {
284   - npointJ = self.mobilePositionList[i].cnLng;
285   - npointW = self.mobilePositionList[i].cnLat;
286   - point = new BMap.Point(npointJ, npointW);
287   - } else {
288   - npointJ = self.mobilePositionList[i].longitude;
289   - npointW = self.mobilePositionList[i].latitude;
290   - let bd2 = geoTools.GPSToBaidu(npointJ, npointW);
291   - point = new BMap.Point(bd2.lat, bd2.lng);
  178 + },
  179 + {
  180 + label: "新建节点",
  181 + icon: "el-icon-plus",
  182 + disabled: false,
  183 + onClick: () => {
  184 + this.addCatalog(data.id, node);
292 185 }
293   - self.mapPointList.push(point);
294   - let marker = new BMap.Marker(point); // 创建标注
295   - self.map.addOverlay(marker); // 将标注添加到地图中
296   - //提示信息 可以解析 HTML标签以及CSS
297   - let infoWindow = new BMap.InfoWindow(`<p style='text-align:left;font-weight:800'>设备: ${self.mobilePositionList[i].deviceId}</p>
298   - <p style='text-align:left;font-weight:0'>时间: ${self.mobilePositionList[i].time}</p>`);
299   - // 鼠标移上标注点要发生的事
300   - marker.addEventListener("mouseover", function () {
301   - this.openInfoWindow(infoWindow);
302   - });
303   - // 鼠标移开标注点要发生的事
304   - marker.addEventListener("mouseout", function () {
305   - this.closeInfoWindow(infoWindow);
306   - });
307   - // 鼠标点击标注点要发生的事情
308   - marker.addEventListener("click", function () {
309   - alert("点击");
310   - });
311   - }
312   - let view = that.map.getViewport(eval(self.mapPointList));
313   - that.map.centerAndZoom(view.center, view.zoom);
314   - },
  186 + },
  187 + {
  188 + label: "修改节点",
  189 + icon: "el-icon-edit",
  190 + disabled: node.level === 1,
  191 + onClick: () => {
  192 + this.editCatalog(data, node);
  193 + }
  194 + },
  195 + {
  196 + label: "删除节点",
  197 + icon: "el-icon-delete",
  198 + disabled: node.level === 1,
  199 + divided: true,
  200 + onClick: () => {
  201 + this.$confirm('确定删除?', '提示', {
  202 + confirmButtonText: '确定',
  203 + cancelButtonText: '取消',
  204 + type: 'warning'
  205 + }).then(() => {
  206 + this.removeCatalog(data.id, node)
  207 + }).catch(() => {
  208 +
  209 + });
  210 + }
  211 + },
  212 + {
  213 + label: "设为默认",
  214 + icon: "el-icon-folder-checked",
  215 + disabled: node.data.id === this.defaultCatalogIdSign,
  216 + onClick: () => {
  217 + this.setDefaultCatalog(data.id)
  218 + },
  219 + },
  220 + // {
  221 + // label: "导出",
  222 + // icon: "el-icon-download",
  223 + // disabled: false,
  224 + // children: [
  225 + // {
  226 + // label: "导出到文件",
  227 + // onClick: () => {
  228 + //
  229 + // },
  230 + // },
  231 + // {
  232 + // label: "导出到其他平台",
  233 + // onClick: () => {
  234 + //
  235 + // },
  236 + // }
  237 + // ]
  238 + // },
  239 +
  240 + ],
  241 + event, // 鼠标事件信息
  242 + customClass: "custom-class", // 自定义菜单 class
  243 + zIndex: 3000, // 菜单样式 z-index
  244 + });
  245 + }
  246 +
  247 + return false;
  248 + },
  249 + nodeClickHandler: function (data, node, tree){
  250 + this.chooseId = data.id;
  251 + this.chooseName = data.name;
  252 + if (this.catalogIdChange)this.catalogIdChange(this.chooseId, this.chooseName);
  253 + }
315 254 },
316 255 };
317 256 </script>
318 257  
319 258 <style>
320   -.videoList {
321   - display: flex;
322   - flex-wrap: wrap;
323   - align-content: flex-start;
324   -}
325   -
326   -.video-item {
327   - position: relative;
328   - width: 15rem;
329   - height: 10rem;
330   - margin-right: 1rem;
331   - background-color: #000000;
332   -}
333   -
334   -.video-item-img {
335   - position: absolute;
336   - top: 0;
337   - bottom: 0;
338   - left: 0;
339   - right: 0;
340   - margin: auto;
341   - width: 100%;
342   - height: 100%;
343   -}
344   -
345   -.video-item-img:after {
346   - content: "";
347   - display: inline-block;
348   - position: absolute;
349   - z-index: 2;
350   - top: 0;
351   - bottom: 0;
352   - left: 0;
353   - right: 0;
354   - margin: auto;
355   - width: 3rem;
356   - height: 3rem;
357   - background-image: url("../assets/loading.png");
358   - background-size: cover;
359   - background-color: #000000;
360   -}
361   -
362   -.video-item-title {
363   - position: absolute;
364   - bottom: 0;
365   - color: #000000;
366   - background-color: #ffffff;
367   - line-height: 1.5rem;
368   - padding: 0.3rem;
369   - width: 14.4rem;
370   -}
371   -
372   -.baidumap {
373   - width: 100%;
374   - height: 100%;
375   - border: none;
376   - position: absolute;
377   - left: 0;
378   - top: 0;
379   - right: 0;
380   - bottom: 0;
381   - margin: auto;
382   -}
383 259  
384   -/* 去除百度地图版权那行字 和 百度logo */
385   -.baidumap > .BMap_cpyCtrl {
386   - display: none !important;
387   -}
388   -.baidumap > .anchorBL {
389   - display: none !important;
390   -}
391 260 </style>
... ...
web_src/src/components/dialog/devicePlayer.vue
... ... @@ -185,7 +185,7 @@
185 185 // import player from '../dialog/rtcPlayer.vue'
186 186 // import LivePlayer from '@liveqing/liveplayer'
187 187 // import player from '../dialog/easyPlayer.vue'
188   -import player from '../dialog/jessibuca.vue'
  188 +import player from '../common/jessibuca.vue'
189 189 import recordDownload from '../dialog/recordDownload.vue'
190 190 export default {
191 191 name: 'devicePlayer',
... ...
web_src/src/components/live.vue
... ... @@ -46,7 +46,7 @@
46 46  
47 47 <script>
48 48 import uiHeader from "./UiHeader.vue";
49   - import player from './dialog/jessibuca.vue'
  49 + import player from './common/jessibuca.vue'
50 50 import ChannelTree from './channelTree.vue'
51 51  
52 52 export default {
... ...
web_src/src/components/service/DeviceService.js 0 → 100644
  1 +import axios from 'axios';
  2 +
  3 +class DeviceService{
  4 +
  5 + constructor() {
  6 + this.$axios = axios;
  7 + }
  8 +
  9 + getDeviceList(currentPage, count, callback, errorCallback){
  10 + this.$axios({
  11 + method: 'get',
  12 + url:`/api/device/query/devices`,
  13 + params: {
  14 + page: currentPage,
  15 + count: count
  16 + }
  17 + }).then((res) => {
  18 + if (typeof (callback) == "function") callback(res.data)
  19 + }).catch((error) => {
  20 + console.log(error);
  21 + if (typeof (errorCallback) == "function") errorCallback(error)
  22 + });
  23 + }
  24 + getAllDeviceList(callback, errorCallback) {
  25 + let currentPage = 1;
  26 + let count = 100;
  27 + let deviceList = []
  28 + this.getAllDeviceListIteration(deviceList, currentPage, count, (data) => {
  29 + if (typeof (callback) == "function") callback(data)
  30 + }, errorCallback)
  31 + }
  32 +
  33 + getAllDeviceListIteration(deviceList, currentPage, count, callback, errorCallback) {
  34 + this.getDeviceList(currentPage, count, (data) => {
  35 + console.log(data)
  36 + if (data.list) {
  37 + deviceList = deviceList.concat(data.list);
  38 + if (deviceList.length < data.total) {
  39 + currentPage ++
  40 + this.getAllDeviceListIteration(deviceList, currentPage, count, callback, errorCallback)
  41 + }else {
  42 + if (typeof (callback) == "function") callback(deviceList)
  43 + }
  44 + }
  45 + }, errorCallback)
  46 + }
  47 +
  48 +
  49 + getAllCatalog(deviceId, callback, errorCallback) {
  50 + let currentPage = 1;
  51 + let count = 100;
  52 + let catalogList = []
  53 + this.getAllCatalogIteration(deviceId, catalogList, currentPage, count, callback, errorCallback)
  54 + }
  55 +
  56 + getAllCatalogIteration(deviceId, catalogList, currentPage, count, callback, errorCallback) {
  57 + this.getCatalog(deviceId, currentPage, count, (data) => {
  58 + console.log(data)
  59 + if (data.list) {
  60 + catalogList = catalogList.concat(data.list);
  61 + if (catalogList.length < data.total) {
  62 + currentPage ++
  63 + this.getAllCatalogIteration(deviceId, catalogList, currentPage, count, callback, errorCallback)
  64 + }else {
  65 + console.log(2222)
  66 + if (typeof (callback) == "function") callback(catalogList)
  67 + }
  68 + }
  69 + }, errorCallback)
  70 + }
  71 + getCatalog(deviceId, currentPage, count, callback, errorCallback) {
  72 + this.$axios({
  73 + method: 'get',
  74 + url: `/api/device/query/devices/${deviceId}/channels`,
  75 + params:{
  76 + page: currentPage,
  77 + count: count,
  78 + query: "",
  79 + online: "",
  80 + channelType: true
  81 + }
  82 + }).then((res) =>{
  83 + if (typeof (callback) == "function") callback(res.data)
  84 + }).catch(errorCallback);
  85 + }
  86 +
  87 +
  88 + getAllSubCatalog(deviceId, channelId, callback, errorCallback) {
  89 + let currentPage = 1;
  90 + let count = 100;
  91 + let catalogList = []
  92 + this.getAllSubCatalogIteration(deviceId, channelId, catalogList, currentPage, count, callback, errorCallback)
  93 + }
  94 +
  95 + getAllSubCatalogIteration(deviceId,channelId, catalogList, currentPage, count, callback, errorCallback) {
  96 + this.getSubCatalog(deviceId, channelId, currentPage, count, (data) => {
  97 + console.log(data)
  98 + if (data.list) {
  99 + catalogList = catalogList.concat(data.list);
  100 + if (catalogList.length < data.total) {
  101 + currentPage ++
  102 + this.getAllSubCatalogIteration(deviceId, channelId, catalogList, currentPage, count, callback, errorCallback)
  103 + }else {
  104 + console.log(2222)
  105 + if (typeof (callback) == "function") callback(catalogList)
  106 + }
  107 + }
  108 + }, errorCallback)
  109 + }
  110 + getSubCatalog(deviceId, channelId, currentPage, count, callback, errorCallback) {
  111 + this.$axios({
  112 + method: 'get',
  113 + url: `/api/device/query/sub_channels/${deviceId}/${channelId}/channels`,
  114 + params:{
  115 + page: currentPage,
  116 + count: count,
  117 + query: "",
  118 + online: "",
  119 + channelType: true
  120 + }
  121 + }).then((res) =>{
  122 + if (typeof (callback) == "function") callback(res.data)
  123 + }).catch(errorCallback);
  124 + }
  125 +}
  126 +
  127 +export default DeviceService;
... ...
web_src/src/components/service/MediaServer.js
... ... @@ -10,9 +10,9 @@ class MediaServer{
10 10 this.$axios({
11 11 method: 'get',
12 12 url:`/api/server/media_server/online/list`,
13   - }).then(function (res) {
  13 + }).then((res) => {
14 14 if (typeof (callback) == "function") callback(res.data)
15   - }).catch(function (error) {
  15 + }).catch((error) => {
16 16 console.log(error);
17 17 });
18 18 }
... ...
web_src/src/router/index.js
... ... @@ -16,7 +16,7 @@ import sip from &#39;../components/setting/Sip.vue&#39;
16 16 import media from '../components/setting/Media.vue'
17 17 import live from '../components/live.vue'
18 18  
19   -import wasmPlayer from '../components/dialog/jessibuca.vue'
  19 +import wasmPlayer from '../components/common/jessibuca.vue'
20 20 import rtcPlayer from '../components/dialog/rtcPlayer.vue'
21 21  
22 22 const originalPush = VueRouter.prototype.push
... ... @@ -66,7 +66,17 @@ export default new VueRouter({
66 66 component: parentPlatformList,
67 67 },
68 68 {
69   - path: '/devicePosition/:deviceId/:parentChannelId/:count/:page',
  69 + path: '/devicePosition',
  70 + name: 'devicePosition',
  71 + component: devicePosition,
  72 + },
  73 + {
  74 + path: '/devicePosition/:deviceId',
  75 + name: 'devicePosition',
  76 + component: devicePosition,
  77 + },
  78 + {
  79 + path: '/devicePosition/:deviceId/:parentChannelId',
70 80 name: 'devicePosition',
71 81 component: devicePosition,
72 82 },
... ...