diff --git a/sql/update.sql b/sql/update.sql index 0abc5446..f78744d7 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 e8eab8c2..d6befca5 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 { /** @@ -129,6 +133,11 @@ public class Device { */ private boolean ssrcCheck; + /** + * 地理坐标系, 目前支持 WGS84,GCJ02 TODO CGCS2000 + */ + private String geoCoordSys; + public String getDeviceId() { return deviceId; @@ -321,4 +330,12 @@ public class Device { 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 95576f38..63452775 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 @@ -154,6 +154,26 @@ public class DeviceChannel { */ private double latitude; + /** + * 经度 GCJ02 + */ + private double longitudeGcj02; + + /** + * 纬度 GCJ02 + */ + private double latitudeGcj02; + + /** + * 经度 WGS84 + */ + private double longitudeWgs84; + + /** + * 纬度 WGS84 + */ + private double latitudeWgs84; + /** * 子设备数 */ @@ -407,6 +427,38 @@ public class DeviceChannel { 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 be67e7c6..2e70ea75 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 @@ public class SIPCommanderFroPlatform implements ISIPCommanderForPlatform { catalogXml.append("" + channel.getOwner() + "\r\n"); catalogXml.append("" + channel.getCivilCode() + "\r\n"); catalogXml.append("
" + channel.getAddress() + "
\r\n"); - catalogXml.append("" + channel.getLongitude() + "\r\n"); - catalogXml.append("" + channel.getLatitude() + "\r\n"); + catalogXml.append("" + channel.getLongitudeWgs84() + "\r\n"); + catalogXml.append("" + channel.getLatitudeWgs84() + "\r\n"); catalogXml.append("" + channel.getIpAddress() + "\r\n"); catalogXml.append("" + channel.getPort() + "\r\n"); catalogXml.append("\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 dd098f7b..00000000 --- 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发来的SIP协议请求消息 - * @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 38a72465..7e666581 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 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements }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 e9143392..c2226a18 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 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen 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 4d618d10..d9d94797 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 @@ public class SubscribeRequestProcessor extends SIPRequestProcessorParent impleme @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 0fe317ae..c4e88c57 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 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp // 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 2caab0f8..c44001a4 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 @@ package com.genersoft.iot.vmp.gb28181.utils; 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 @@ public class XmlUtil { 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 @@ public class XmlUtil { } 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 3359b00f..ec30cd48 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 @@ package com.genersoft.iot.vmp.service.impl; 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; @@ -50,6 +54,12 @@ public class DeviceServiceImpl implements IDeviceService { @Autowired private DeviceMapper deviceMapper; + @Autowired + private DeviceChannelMapper deviceChannelMapper; + + @Autowired + private IVideoManagerStorage storage; + @Autowired private ISIPCommander commander; @@ -292,6 +302,10 @@ public class DeviceServiceImpl implements IDeviceService { removeMobilePositionSubscribe(deviceInStore); } } + // 坐标系变化,需要重新计算GCJ02坐标和WGS84坐标 + if (!deviceInStore.getGeoCoordSys().equals(device.getGeoCoordSys())) { + updateDeviceChannelGeoCoordSys(device); + } String now = DateUtil.getNow(); device.setUpdateTime(now); @@ -299,6 +313,32 @@ public class DeviceServiceImpl implements IDeviceService { device.setUpdateTime(DateUtil.getNow()); if (deviceMapper.update(device) > 0) { redisCatchStorage.updateDevice(device); + } } + + /** + * 更新通道坐标系 + */ + private void updateDeviceChannelGeoCoordSys(Device device) { + List 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 6db08d1b..5c46fb92 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 @@ public interface DeviceChannelMapper { @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 = {" "}) int update(DeviceChannel channel); @@ -138,7 +142,8 @@ public interface DeviceChannelMapper { "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 " + " " + "('${item.channelId}', '${item.deviceId}', '${item.name}', '${item.manufacture}', '${item.model}', " + @@ -146,7 +151,8 @@ public interface DeviceChannelMapper { "'${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}')" + " " + "ON DUPLICATE KEY UPDATE " + "updateTime=VALUES(updateTime), " + @@ -173,7 +179,11 @@ public interface DeviceChannelMapper { "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) " + "") int batchAdd(List addChannels); @@ -207,7 +217,11 @@ public interface DeviceChannelMapper { ", hasAudio=${item.hasAudio}" + ", longitude=${item.longitude}" + ", latitude=${item.latitude}" + - "WHERE deviceId=#{item.deviceId} AND channelId=#{item.channelId}"+ + ", longitudeGcj02=${item.longitudeGcj02}" + + ", latitudeGcj02=${item.latitudeGcj02}" + + ", longitudeWgs84=${item.longitudeWgs84}" + + ", latitudeWgs84=${item.latitudeWgs84}" + + "WHERE deviceId='${item.deviceId}' AND channelId='${item.channelId}'"+ "" + ""}) int batchUpdate(List updateChannels); @@ -261,4 +275,6 @@ public interface DeviceChannelMapper { @Select("SELECT * FROM device_channel WHERE length(trim(streamId)) > 0") List getAllChannelInPlay(); + @Select("select * from device_channel where longitude*latitude > 0 and deviceId = #{deviceId}") + List 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 37d951e2..3e15b739 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 @@ public interface DeviceMapper { "mobilePositionSubmissionInterval," + "subscribeCycleForAlarm," + "ssrcCheck," + + "geoCoordSys," + "online" + ") VALUES (" + "#{deviceId}," + @@ -61,6 +62,7 @@ public interface DeviceMapper { "#{mobilePositionSubmissionInterval}," + "#{subscribeCycleForAlarm}," + "#{ssrcCheck}," + + "#{geoCoordSys}," + "#{online}" + ")") int add(Device device); @@ -87,6 +89,7 @@ public interface DeviceMapper { ", mobilePositionSubmissionInterval=${mobilePositionSubmissionInterval}" + ", subscribeCycleForAlarm=${subscribeCycleForAlarm}" + ", ssrcCheck=${ssrcCheck}" + + ", geoCoordSys=#{geoCoordSys}" + "WHERE deviceId='${deviceId}'"+ " "}) 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 d313c6b0..4c895378 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 class DeviceQuery { public ResponseEntity> updateDevice(Device device){ if (device != null && device.getDeviceId() != null) { - - - // TODO 报警订阅相关的信息 - deviceService.updateDevice(device); -// cmder.deviceInfoQuery(device); } WVPResult 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 d4928ec7..3be4be3e 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 @@ public class ApiDeviceController { // 2-基于口令的双向认证, // 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 1233a890..9dedcb14 100644 --- a/src/main/resources/all-application.yml +++ b/src/main/resources/all-application.yml @@ -32,7 +32,7 @@ spring: 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 35314314..35ddc86c 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -20,7 +20,7 @@ spring: 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 1653a586..53a86356 100644 --- a/src/main/resources/application-docker.yml +++ b/src/main/resources/application-docker.yml @@ -20,7 +20,7 @@ spring: 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 b4dd2855..233fa567 100644 --- a/web_src/src/components/dialog/deviceEdit.vue +++ b/web_src/src/components/dialog/deviceEdit.vue @@ -36,6 +36,12 @@ + + + + + + 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 db196779..caf36d4a 100644 --- a/web_src/src/components/devicePosition.vue +++ b/web_src/src/components/map.vue @@ -49,7 +49,7 @@ import devicePlayer from './dialog/devicePlayer.vue' import queryTrace from './dialog/queryTrace.vue' export default { - name: "devicePosition", + name: "map", components: { MapComponent, DeviceTree, @@ -183,12 +183,27 @@ export default { 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 @@ export default { 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 88448621..2f44fd85 100644 --- a/web_src/src/router/index.js +++ b/web_src/src/router/index.js @@ -7,7 +7,7 @@ import deviceList from '../components/DeviceList.vue' 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 @@ export default new VueRouter({ 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 @@ export default new VueRouter({ }, { path: '/map', - name: 'devicePosition', - component: devicePosition, + name: 'map', + component: map, }, ] },