From c0222139729eb9b133f77581a429b9b56323e74f Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期二, 14 六月 2022 17:00:24 +0800
Subject: [PATCH] 设备支持设置地理坐标系,并将级联输出坐标系统一为wgs84

---
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java                                                                    |   17 +++
 src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java                                                         |   40 ++++++++
 src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java                                                                  |   28 +++++
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java                                                    |    5 -
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java                          |    1 
 src/main/resources/all-application.yml                                                                                          |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java                           |    1 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java |    2 
 web_src/src/components/map.vue                                                                                                  |   23 +++
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java                                                              |    3 
 /dev/null                                                                                                                       |   23 ----
 src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java                                                        |    4 
 web_src/src/components/dialog/deviceEdit.vue                                                                                    |    6 +
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java                                                             |   52 ++++++++++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java                                      |    4 
 web_src/src/router/index.js                                                                                                     |   12 +-
 src/main/resources/application-dev.yml                                                                                          |    2 
 sql/update.sql                                                                                                                  |   12 ++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java                             |    2 
 src/main/resources/application-docker.yml                                                                                       |    2 
 src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java                                                       |   28 ++++-
 21 files changed, 214 insertions(+), 55 deletions(-)

diff --git a/sql/update.sql b/sql/update.sql
index 0abc544..f78744d 100644
--- a/sql/update.sql
+++ b/sql/update.sql
@@ -1,4 +1,16 @@
 alter table stream_push
     add serverId varchar(50) not null;
+alter table device
+    add geoCoordSys varchar(50) not null;
+update device set device.geoCoordSys='WGS84';
+alter table device_channel
+    add longitudeGcj02 double default null;
+alter table device_channel
+    add latitudeGcj02 double default null;
+alter table device_channel
+    add longitudeWgs84 double default null;
+alter table device_channel
+    add latitudeWgs84 double default null;
+
 
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
index e8eab8c..d6befca 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/Device.java
@@ -1,6 +1,10 @@
 package com.genersoft.iot.vmp.gb28181.bean;
 
 
+/**
+ * 鍥芥爣璁惧/骞冲彴
+ * @author lin
+ */
 public class Device {
 
 	/**
@@ -128,6 +132,11 @@
 	 * 鏄惁寮�鍚痵src鏍¢獙锛岄粯璁ゅ叧闂紝寮�鍚彲浠ラ槻姝覆娴�
 	 */
 	private boolean ssrcCheck;
+
+	/**
+	 * 鍦扮悊鍧愭爣绯伙紝 鐩墠鏀寔 WGS84,GCJ02 TODO CGCS2000
+	 */
+	private String geoCoordSys;
 
 
 	public String getDeviceId() {
@@ -321,4 +330,12 @@
 	public void setSsrcCheck(boolean ssrcCheck) {
 		this.ssrcCheck = ssrcCheck;
 	}
+
+	public String getGeoCoordSys() {
+		return geoCoordSys;
+	}
+
+	public void setGeoCoordSys(String geoCoordSys) {
+		this.geoCoordSys = geoCoordSys;
+	}
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
index 95576f3..6345277 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
@@ -155,6 +155,26 @@
 	private double latitude;
 
 	/**
+	 * 缁忓害 GCJ02
+	 */
+	private double longitudeGcj02;
+
+	/**
+	 * 绾害 GCJ02
+	 */
+	private double latitudeGcj02;
+
+	/**
+	 * 缁忓害 WGS84
+	 */
+	private double longitudeWgs84;
+
+	/**
+	 * 绾害 WGS84
+	 */
+	private double latitudeWgs84;
+
+	/**
 	 * 瀛愯澶囨暟
 	 */
 	private int subCount;
@@ -407,6 +427,38 @@
 		this.latitude = latitude;
 	}
 
+	public double getLongitudeGcj02() {
+		return longitudeGcj02;
+	}
+
+	public void setLongitudeGcj02(double longitudeGcj02) {
+		this.longitudeGcj02 = longitudeGcj02;
+	}
+
+	public double getLatitudeGcj02() {
+		return latitudeGcj02;
+	}
+
+	public void setLatitudeGcj02(double latitudeGcj02) {
+		this.latitudeGcj02 = latitudeGcj02;
+	}
+
+	public double getLongitudeWgs84() {
+		return longitudeWgs84;
+	}
+
+	public void setLongitudeWgs84(double longitudeWgs84) {
+		this.longitudeWgs84 = longitudeWgs84;
+	}
+
+	public double getLatitudeWgs84() {
+		return latitudeWgs84;
+	}
+
+	public void setLatitudeWgs84(double latitudeWgs84) {
+		this.latitudeWgs84 = latitudeWgs84;
+	}
+
 	public int getSubCount() {
 		return subCount;
 	}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index be67e7c..2e70ea7 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -277,8 +277,8 @@
                         catalogXml.append("<Owner>" + channel.getOwner() + "</Owner>\r\n");
                         catalogXml.append("<CivilCode>" + channel.getCivilCode() + "</CivilCode>\r\n");
                         catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n");
-                        catalogXml.append("<Longitude>" + channel.getLongitude() + "</Longitude>\r\n");
-                        catalogXml.append("<Latitude>" + channel.getLatitude() + "</Latitude>\r\n");
+                        catalogXml.append("<Longitude>" + channel.getLongitudeWgs84() + "</Longitude>\r\n");
+                        catalogXml.append("<Latitude>" + channel.getLatitudeWgs84() + "</Latitude>\r\n");
                         catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n");
                         catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n");
                         catalogXml.append("<Info>\r\n");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java
deleted file mode 100644
index dd098f7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorAbstract.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.genersoft.iot.vmp.gb28181.transmit.event.request;
-
-import gov.nist.javax.sip.SipProviderImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Qualifier;
-
-/**    
- * @description:澶勭悊鎺ユ敹IPCamera鍙戞潵鐨凷IP鍗忚璇锋眰娑堟伅
- * @author: songww
- * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:42:22     
- */
-public abstract class SIPRequestProcessorAbstract  {
-
-
-	@Autowired
-	@Qualifier(value="tcpSipProvider")
-	private SipProviderImpl tcpSipProvider;
-
-	@Autowired
-	@Qualifier(value="udpSipProvider")
-	private SipProviderImpl udpSipProvider;
-
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
index 38a7246..7e66658 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -312,7 +312,7 @@
 					}else {
 						event = eventElement.getText().toUpperCase();
 					}
-					DeviceChannel channel = XmlUtil.channelContentHander(itemDevice);
+					DeviceChannel channel = XmlUtil.channelContentHander(itemDevice, device);
 					channel.setDeviceId(device.getDeviceId());
 					logger.info("[鏀跺埌 鐩綍璁㈤槄]锛歿}/{}", device.getDeviceId(), channel.getChannelId());
 					switch (event) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
index e914339..c2226a1 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
@@ -140,6 +140,7 @@
                 device = new Device();
                 device.setStreamMode("UDP");
                 device.setCharset("GB2312");
+                device.setGeoCoordSys("WGS84");
                 device.setDeviceId(deviceId);
             }
             device.setIp(received);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
index 4d618d1..d9d9479 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
@@ -82,7 +82,6 @@
 	@Override
 	public void process(RequestEvent evt) {
 		Request request = evt.getRequest();
-		System.out.println("鏀跺埌璁㈤槄");
 		try {
 			Element rootElement = getRootElement(evt);
 			String cmd = XmlUtil.getText(rootElement, "CmdType");
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
index 0fe317a..c4e88c5 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -129,7 +129,7 @@
     //                        if (NumericUtil.isDouble(XmlUtil.getText(itemDevice, "Longitude"))) {//濡傛灉鍖呭惈浣嶇疆淇℃伅锛屽氨鏇存柊涓�涓嬩綅缃�
     //                            processNotifyMobilePosition(evt, itemDevice);
     //                        }
-                                    DeviceChannel deviceChannel = XmlUtil.channelContentHander(itemDevice);
+                                    DeviceChannel deviceChannel = XmlUtil.channelContentHander(itemDevice, device);
                                     deviceChannel.setDeviceId(take.getDevice().getDeviceId());
 
                                     channelList.add(deviceChannel);
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
index 2caab0f..c44001a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/XmlUtil.java
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
 import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 import org.dom4j.Attribute;
 import org.dom4j.Document;
@@ -180,7 +181,7 @@
         return xml.getRootElement();
     }
 
-    public static DeviceChannel channelContentHander(Element itemDevice){
+    public static DeviceChannel channelContentHander(Element itemDevice, Device device){
         Element channdelNameElement = itemDevice.element("Name");
         String channelName = channdelNameElement != null ? channdelNameElement.getTextTrim().toString() : "";
         Element statusElement = itemDevice.element("Status");
@@ -308,6 +309,31 @@
         } else {
             deviceChannel.setLatitude(0.00);
         }
+        if (deviceChannel.getLongitude()*deviceChannel.getLatitude() > 0) {
+            if ("WGS84".equals(device.getGeoCoordSys())) {
+                deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
+                deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
+                Double[] position = Coordtransform.WGS84ToGCJ02(deviceChannel.getLongitude(), deviceChannel.getLatitude());
+                deviceChannel.setLongitudeGcj02(position[0]);
+                deviceChannel.setLatitudeGcj02(position[1]);
+            }else if ("GCJ02".equals(device.getGeoCoordSys())) {
+                deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude());
+                deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude());
+                Double[] position = Coordtransform.GCJ02ToWGS84(deviceChannel.getLongitude(), deviceChannel.getLatitude());
+                deviceChannel.setLongitudeWgs84(position[0]);
+                deviceChannel.setLatitudeWgs84(position[1]);
+            }else {
+                deviceChannel.setLongitudeGcj02(0.00);
+                deviceChannel.setLatitudeGcj02(0.00);
+                deviceChannel.setLongitudeWgs84(0.00);
+                deviceChannel.setLatitudeWgs84(0.00);
+            }
+        }else {
+            deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude());
+            deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude());
+            deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
+            deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
+        }
         if (XmlUtil.getText(itemDevice, "PTZType") == null || "".equals(XmlUtil.getText(itemDevice, "PTZType"))) {
             //鍏煎INFO涓殑淇℃伅
             Element info = itemDevice.element("Info");
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
index 3359b00..ec30cd4 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
@@ -2,17 +2,21 @@
 
 import com.genersoft.iot.vmp.conf.DynamicTask;
 import com.genersoft.iot.vmp.gb28181.bean.Device;
+import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
 import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
 import com.genersoft.iot.vmp.gb28181.task.ISubscribeTask;
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
 import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.response.cmd.CatalogResponseMessageHandler;
+import com.genersoft.iot.vmp.gb28181.utils.Coordtransform;
 import com.genersoft.iot.vmp.service.IDeviceService;
 import com.genersoft.iot.vmp.gb28181.task.impl.CatalogSubscribeTask;
 import com.genersoft.iot.vmp.gb28181.task.impl.MobilePositionSubscribeTask;
 import com.genersoft.iot.vmp.gb28181.bean.SyncStatus;
 import com.genersoft.iot.vmp.service.IMediaServerService;
 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper;
 import com.genersoft.iot.vmp.storager.dao.DeviceMapper;
 import com.genersoft.iot.vmp.utils.DateUtil;
 import org.slf4j.Logger;
@@ -49,6 +53,12 @@
 
     @Autowired
     private DeviceMapper deviceMapper;
+
+    @Autowired
+    private DeviceChannelMapper deviceChannelMapper;
+
+    @Autowired
+    private IVideoManagerStorage storage;
 
     @Autowired
     private ISIPCommander commander;
@@ -292,6 +302,10 @@
                 removeMobilePositionSubscribe(deviceInStore);
             }
         }
+        // 鍧愭爣绯诲彉鍖栵紝闇�瑕侀噸鏂拌绠桮CJ02鍧愭爣鍜學GS84鍧愭爣
+        if (!deviceInStore.getGeoCoordSys().equals(device.getGeoCoordSys())) {
+            updateDeviceChannelGeoCoordSys(device);
+        }
 
         String now = DateUtil.getNow();
         device.setUpdateTime(now);
@@ -299,6 +313,32 @@
         device.setUpdateTime(DateUtil.getNow());
         if (deviceMapper.update(device) > 0) {
             redisCatchStorage.updateDevice(device);
+
         }
     }
+
+    /**
+     * 鏇存柊閫氶亾鍧愭爣绯�
+     */
+    private void updateDeviceChannelGeoCoordSys(Device device) {
+       List<DeviceChannel> deviceChannels =  deviceChannelMapper.getAllChannelWithCoordinate(device.getDeviceId());
+       if (deviceChannels.size() > 0) {
+           for (DeviceChannel deviceChannel : deviceChannels) {
+               if ("WGS84".equals(device.getGeoCoordSys())) {
+                   deviceChannel.setLongitudeWgs84(deviceChannel.getLongitude());
+                   deviceChannel.setLatitudeWgs84(deviceChannel.getLatitude());
+                   Double[] position = Coordtransform.WGS84ToGCJ02(deviceChannel.getLongitude(), deviceChannel.getLatitude());
+                   deviceChannel.setLongitudeGcj02(position[0]);
+                   deviceChannel.setLatitudeGcj02(position[1]);
+               }else if ("GCJ02".equals(device.getGeoCoordSys())) {
+                   deviceChannel.setLongitudeGcj02(deviceChannel.getLongitude());
+                   deviceChannel.setLatitudeGcj02(deviceChannel.getLatitude());
+                   Double[] position = Coordtransform.GCJ02ToWGS84(deviceChannel.getLongitude(), deviceChannel.getLatitude());
+                   deviceChannel.setLongitudeWgs84(position[0]);
+                   deviceChannel.setLatitudeWgs84(position[1]);
+               }
+           }
+       }
+        storage.updateChannels(device.getDeviceId(), deviceChannels);
+    }
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
index 6db08d1..5c46fb9 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java
@@ -17,10 +17,10 @@
 
     @Insert("INSERT INTO device_channel (channelId, deviceId, name, manufacture, model, owner, civilCode, block, " +
             "address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " +
-            "ipAddress, port, password, PTZType, status, streamId, longitude, latitude, createTime, updateTime) " +
+            "ipAddress, port, password, PTZType, status, streamId, longitude, latitude, longitudeGcj02, latitudeGcj02, longitudeWgs84, latitudeWgs84, createTime, updateTime) " +
             "VALUES ('${channelId}', '${deviceId}', '${name}', '${manufacture}', '${model}', '${owner}', '${civilCode}', '${block}'," +
             "'${address}', ${parental}, '${parentId}', ${safetyWay}, ${registerWay}, '${certNum}', ${certifiable}, ${errCode}, '${secrecy}', " +
-            "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status}, '${streamId}', ${longitude}, ${latitude},'${createTime}', '${updateTime}')")
+            "'${ipAddress}', ${port}, '${password}', ${PTZType}, ${status}, '${streamId}', ${longitude}, ${latitude}, ${longitudeGcj02}, ${latitudeGcj02}, ${longitudeWgs84}, ${latitudeWgs84},'${createTime}', '${updateTime}')")
     int add(DeviceChannel channel);
 
     @Update(value = {" <script>" +
@@ -50,6 +50,10 @@
             "<if test='hasAudio != null'>, hasAudio=${hasAudio}</if>" +
             "<if test='longitude != null'>, longitude=${longitude}</if>" +
             "<if test='latitude != null'>, latitude=${latitude}</if>" +
+            "<if test='longitudeGcj02 != null'>, longitudeGcj02=${longitudeGcj02}</if>" +
+            "<if test='latitudeGcj02 != null'>, latitudeGcj02=${latitudeGcj02}</if>" +
+            "<if test='longitudeWgs84 != null'>, longitudeWgs84=${longitudeWgs84}</if>" +
+            "<if test='latitudeWgs84 != null'>, latitudeWgs84=${latitudeWgs84}</if>" +
             "WHERE deviceId='${deviceId}' AND channelId='${channelId}'"+
             " </script>"})
     int update(DeviceChannel channel);
@@ -138,7 +142,8 @@
             "insert into device_channel " +
             "(channelId, deviceId, name, manufacture, model, owner, civilCode, block, subCount, " +
             "  address, parental, parentId, safetyWay, registerWay, certNum, certifiable, errCode, secrecy, " +
-            "  ipAddress, port, password, PTZType, status, streamId, longitude, latitude, createTime, updateTime) " +
+            "  ipAddress, port, password, PTZType, status, streamId, longitude, latitude, longitudeGcj02, latitudeGcj02, " +
+            "  longitudeWgs84, latitudeWgs84, createTime, updateTime) " +
             "values " +
             "<foreach collection='addChannels' index='index' item='item' separator=','> " +
             "('${item.channelId}', '${item.deviceId}', '${item.name}', '${item.manufacture}', '${item.model}', " +
@@ -146,7 +151,8 @@
             "'${item.address}', ${item.parental}, '${item.parentId}', ${item.safetyWay}, ${item.registerWay}, " +
             "'${item.certNum}', ${item.certifiable}, ${item.errCode}, '${item.secrecy}', " +
             "'${item.ipAddress}', ${item.port}, '${item.password}', ${item.PTZType}, ${item.status}, " +
-            "'${item.streamId}', ${item.longitude}, ${item.latitude},'${item.createTime}', '${item.updateTime}')" +
+            "'${item.streamId}', ${item.longitude}, ${item.latitude},${item.longitudeGcj02}, " +
+            "${item.latitudeGcj02},${item.longitudeWgs84}, ${item.latitudeWgs84},'${item.createTime}', '${item.updateTime}')" +
             "</foreach> " +
             "ON DUPLICATE KEY UPDATE " +
             "updateTime=VALUES(updateTime), " +
@@ -173,7 +179,11 @@
             "status=VALUES(status), " +
             "streamId=VALUES(streamId), " +
             "longitude=VALUES(longitude), " +
-            "latitude=VALUES(latitude)" +
+            "latitude=VALUES(latitude), " +
+            "longitudeGcj02=VALUES(longitudeGcj02), " +
+            "latitudeGcj02=VALUES(latitudeGcj02), " +
+            "longitudeWgs84=VALUES(longitudeWgs84), " +
+            "latitudeWgs84=VALUES(latitudeWgs84) " +
             "</script>")
     int batchAdd(List<DeviceChannel> addChannels);
 
@@ -207,7 +217,11 @@
             "<if test='item.hasAudio != null'>, hasAudio=${item.hasAudio}</if>" +
             "<if test='item.longitude != null'>, longitude=${item.longitude}</if>" +
             "<if test='item.latitude != null'>, latitude=${item.latitude}</if>" +
-            "WHERE deviceId=#{item.deviceId} AND channelId=#{item.channelId}"+
+            "<if test='item.longitudeGcj02 != null'>, longitudeGcj02=${item.longitudeGcj02}</if>" +
+            "<if test='item.latitudeGcj02 != null'>, latitudeGcj02=${item.latitudeGcj02}</if>" +
+            "<if test='item.longitudeWgs84 != null'>, longitudeWgs84=${item.longitudeWgs84}</if>" +
+            "<if test='item.latitudeWgs84 != null'>, latitudeWgs84=${item.latitudeWgs84}</if>" +
+            "WHERE deviceId='${item.deviceId}' AND channelId='${item.channelId}'"+
             "</foreach>" +
             "</script>"})
     int batchUpdate(List<DeviceChannel> updateChannels);
@@ -261,4 +275,6 @@
     @Select("SELECT * FROM device_channel WHERE length(trim(streamId)) > 0")
     List<DeviceChannel> getAllChannelInPlay();
 
+    @Select("select * from device_channel where longitude*latitude > 0 and deviceId = #{deviceId}")
+    List<DeviceChannel> getAllChannelWithCoordinate(String deviceId);
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
index 37d951e..3e15b73 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -38,6 +38,7 @@
                 "mobilePositionSubmissionInterval," +
                 "subscribeCycleForAlarm," +
                 "ssrcCheck," +
+                "geoCoordSys," +
                 "online" +
             ") VALUES (" +
                 "#{deviceId}," +
@@ -61,6 +62,7 @@
                 "#{mobilePositionSubmissionInterval}," +
                 "#{subscribeCycleForAlarm}," +
                 "#{ssrcCheck}," +
+                "#{geoCoordSys}," +
                 "#{online}" +
             ")")
     int add(Device device);
@@ -87,6 +89,7 @@
                 "<if test=\"mobilePositionSubmissionInterval != null\">, mobilePositionSubmissionInterval=${mobilePositionSubmissionInterval}</if>" +
                 "<if test=\"subscribeCycleForAlarm != null\">, subscribeCycleForAlarm=${subscribeCycleForAlarm}</if>" +
                 "<if test=\"ssrcCheck != null\">, ssrcCheck=${ssrcCheck}</if>" +
+                "<if test=\"geoCoordSys != null\">, geoCoordSys=#{geoCoordSys}</if>" +
                 "WHERE deviceId='${deviceId}'"+
             " </script>"})
     int update(Device device);
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
index d313c6b..4c89537 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -317,12 +317,7 @@
 	public ResponseEntity<WVPResult<String>> updateDevice(Device device){
 
 		if (device != null && device.getDeviceId() != null) {
-
-
-			// TODO 鎶ヨ璁㈤槄鐩稿叧鐨勪俊鎭�
-
 			deviceService.updateDevice(device);
-//			cmder.deviceInfoQuery(device);
 		}
 		WVPResult<String> result = new WVPResult<>();
 		result.setCode(0);
diff --git a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
index d4928ec..3be4be3 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/gb28181/ApiDeviceController.java
@@ -146,8 +146,8 @@
                                                      // 2-鍩轰簬鍙d护鐨勫弻鍚戣璇�,
                                                      // 3-鍩轰簬鏁板瓧璇佷功鐨勫弻鍚戣璇�
             deviceJOSNChannel.put("Status", deviceChannel.getStatus());
-            deviceJOSNChannel.put("Longitude", deviceChannel.getLongitude());
-            deviceJOSNChannel.put("Latitude", deviceChannel.getLatitude());
+            deviceJOSNChannel.put("Longitude", deviceChannel.getLongitudeWgs84());
+            deviceJOSNChannel.put("Latitude", deviceChannel.getLatitudeWgs84());
             deviceJOSNChannel.put("PTZType ", deviceChannel.getPTZType()); // 浜戝彴绫诲瀷, 0 - 鏈煡, 1 - 鐞冩満, 2 - 鍗婄悆,
                                                                             //   3 - 鍥哄畾鏋満, 4 - 閬ユ帶鏋満
             deviceJOSNChannel.put("CustomPTZType", "");
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index 1233a89..9dedcb1 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -32,7 +32,7 @@
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         driver-class-name: com.mysql.cj.jdbc.Driver
-        url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false
+        url: jdbc:mysql://127.0.0.1:3306/wvp2?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
         username: root
         password: root123
         druid:
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index 3531431..35ddc86 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -20,7 +20,7 @@
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         driver-class-name: com.mysql.cj.jdbc.Driver
-        url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false
+        url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&serverTimezone=PRC&useSSL=false&allowMultiQueries=true
         username: root
         password: 123456
         druid:
diff --git a/src/main/resources/application-docker.yml b/src/main/resources/application-docker.yml
index 1653a58..53a8635 100644
--- a/src/main/resources/application-docker.yml
+++ b/src/main/resources/application-docker.yml
@@ -20,7 +20,7 @@
     datasource:
         # 浣跨敤mysql 鎵撳紑23-28琛屾敞閲婏紝 鍒犻櫎29-36琛�
          name: wvp
-         url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&allowMultiQueries=true&useSSL=false
+         url: jdbc:mysql://127.0.0.1:3306/wvp?useUnicode=true&characterEncoding=UTF8&rewriteBatchedStatements=true&allowMultiQueries=true&useSSL=false&allowMultiQueries=true
          username: root
          password: root
          type: com.alibaba.druid.pool.DruidDataSource
diff --git a/web_src/src/components/dialog/deviceEdit.vue b/web_src/src/components/dialog/deviceEdit.vue
index b4dd285..233fa56 100644
--- a/web_src/src/components/dialog/deviceEdit.vue
+++ b/web_src/src/components/dialog/deviceEdit.vue
@@ -36,6 +36,12 @@
               <el-option key="UTF-8" label="UTF-8" value="utf-8"></el-option>
             </el-select>
           </el-form-item>
+          <el-form-item label="鍦扮悊鍧愭爣绯�" prop="geoCoordSys" >
+            <el-select v-model="form.geoCoordSys" style="float: left; width: 100%" >
+              <el-option key="GCJ02" label="GCJ02" value="GCJ02"></el-option>
+              <el-option key="WGS84" label="WGS84" value="WGS84"></el-option>
+            </el-select>
+          </el-form-item>
           <el-form-item label="鐩綍璁㈤槄" title="0涓哄彇娑堣闃�" prop="subscribeCycleForCatalog" >
             <el-input v-model="form.subscribeCycleForCatalog" clearable ></el-input>
           </el-form-item>
diff --git a/web_src/src/components/devicePosition.vue b/web_src/src/components/map.vue
similarity index 93%
rename from web_src/src/components/devicePosition.vue
rename to web_src/src/components/map.vue
index db19677..caf36d4 100644
--- a/web_src/src/components/devicePosition.vue
+++ b/web_src/src/components/map.vue
@@ -49,7 +49,7 @@
 import queryTrace from './dialog/queryTrace.vue'
 
 export default {
-  name: "devicePosition",
+  name: "map",
   components: {
     MapComponent,
     DeviceTree,
@@ -183,12 +183,27 @@
         this.clean()
         this.closeInfoBox()
         let params = [];
+        let longitudeStr;
+        let latitudeStr;
+        if (window.mapParam.coordinateSystem == "GCJ-02") {
+          longitudeStr = "longitudeGcj02";
+          latitudeStr = "latitudeGcj02";
+        }else if (window.mapParam.coordinateSystem == "WGS84") {
+          longitudeStr = "longitudeWgs84";
+          latitudeStr = "latitudeWgs84";
+        }else {
+          longitudeStr = "longitude";
+          latitudeStr = "latitude";
+        }
+
         for (let i = 0; i < channels.length; i++) {
-          if (channels[i].longitude * channels[i].latitude === 0) {
+          let longitude = channels[i][longitudeStr];
+          let latitude = channels[i][latitudeStr];
+          if (longitude * latitude === 0) {
             continue;
           }
           let item = {
-            position: [channels[i].longitude, channels[i].latitude],
+            position: [longitude, latitude],
             image: {
               src: this.getImageByChannel(channels[i]),
               anchor: [0.5, 1]
@@ -202,7 +217,7 @@
         this.layer = this.$refs.map.addLayer(params, this.featureClickEvent)
         console.log(4)
         if (params.length === 1) {
-          this.$refs.map.panTo([channels[0].longitude, channels[0].latitude], mapParam.maxZoom)
+          this.$refs.map.panTo([channels[0][longitudeStr], channels[0][latitudeStr]], mapParam.maxZoom)
         } else if (params.length > 1) {
           this.$refs.map.fit(this.layer)
         } else {
diff --git a/web_src/src/router/index.js b/web_src/src/router/index.js
index 8844862..2f44fd8 100644
--- a/web_src/src/router/index.js
+++ b/web_src/src/router/index.js
@@ -7,7 +7,7 @@
 import channelList from '../components/channelList.vue'
 import pushVideoList from '../components/PushVideoList.vue'
 import streamProxyList from '../components/StreamProxyList.vue'
-import devicePosition from  '../components/devicePosition.vue'
+import map from '../components/map.vue'
 import login from '../components/Login.vue'
 import parentPlatformList from '../components/ParentPlatformList.vue'
 import cloudRecord from '../components/CloudRecord.vue'
@@ -69,9 +69,9 @@
           component: parentPlatformList,
         },
         {
-          path: '/devicePosition/:deviceId/:parentChannelId/:count/:page',
-          name: 'devicePosition',
-          component: devicePosition,
+          path: '/map/:deviceId/:parentChannelId/:count/:page',
+          name: 'map',
+          component: map,
         },
         {
           path: '/cloudRecord',
@@ -100,8 +100,8 @@
         },
         {
           path: '/map',
-          name: 'devicePosition',
-          component: devicePosition,
+          name: 'map',
+          component: map,
         },
         ]
     },

--
Gitblit v1.8.0