Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
05655b2c14
|
|
@ -52,4 +52,17 @@ public class TbTowerController {
|
|||
public ServerResponse getTbTowerById(EncryptedReq<TbTowerVo> dto) {
|
||||
return tbTowerService.getTbTowerById(dto.getData());
|
||||
}
|
||||
|
||||
/**
|
||||
* 杆塔管理-新增
|
||||
* @param dto
|
||||
* @return
|
||||
*/
|
||||
@PostMapping(value = "addTbTower")
|
||||
@DecryptAndVerify(decryptedClass = TbTowerVo.class)//加解密统一管理
|
||||
@LogAnnotation(operModul = "杆塔管理-新增", operation = "新增", operDesc = "系统级事件",operType="查询")
|
||||
public ServerResponse addTbTower(EncryptedReq<TbTowerVo> dto) {
|
||||
return tbTowerService.addTbTower(dto.getData());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,4 +8,8 @@ public interface TbTowerMapper {
|
|||
List<TbTowerVo> getTbProjectList(TbTowerVo data);
|
||||
|
||||
TbTowerVo getTbTowerById(TbTowerVo data);
|
||||
|
||||
void addTbTower(TbTowerVo data);
|
||||
|
||||
TbTowerVo getTbTowerBySort(TbTowerVo data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,4 +17,11 @@ public interface TbTowerService {
|
|||
* @return
|
||||
*/
|
||||
ServerResponse getTbTowerById(TbTowerVo data);
|
||||
|
||||
/**
|
||||
* 杆塔管理-新增
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
ServerResponse addTbTower(TbTowerVo data);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,12 +4,17 @@ import com.bonus.digitalSignage.basic.dao.TbTowerMapper;
|
|||
import com.bonus.digitalSignage.basic.service.TbTowerService;
|
||||
import com.bonus.digitalSignage.basic.vo.TbProjectVo;
|
||||
import com.bonus.digitalSignage.basic.vo.TbTowerVo;
|
||||
import com.bonus.digitalSignage.utils.CoordinateConverter;
|
||||
import com.bonus.digitalSignage.utils.ServerResponse;
|
||||
import com.bonus.digitalSignage.utils.StrUtil;
|
||||
import com.bonus.digitalSignage.utils.UserUtil;
|
||||
import com.bonus.digitalSignage.webResult.StringUtils;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
|
|
@ -55,4 +60,41 @@ public class TbTowerServiceImpl implements TbTowerService {
|
|||
return ServerResponse.createErroe("杆塔管理-查询详情失败");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 杆塔管理-新增
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public ServerResponse addTbTower(TbTowerVo data) {
|
||||
try {
|
||||
//判断经纬度是否合法
|
||||
if(!StrUtil.isValidLongitude(Double.parseDouble(data.getLon())) || !StrUtil.isValidLatitude(Double.parseDouble(data.getLat()))){
|
||||
return ServerResponse.createErroe("请输入正确经纬度");
|
||||
}
|
||||
TbTowerVo tbTower = tbTowerMapper.getTbTowerBySort(data);
|
||||
if (StringUtils.isNotNull(tbTower)){
|
||||
return ServerResponse.createErroe("排序已存在");
|
||||
}
|
||||
//判断新增塔杆的坐标系 1.WGS-84地心坐标系 2.2000国家大地坐标系
|
||||
if ("1".equals(data.getUploadType())){
|
||||
double[] bd09 =CoordinateConverter.wgs84ToBd09(Double.parseDouble(data.getLat()),Double.parseDouble(data.getLon()));
|
||||
data.setBaiduLat(String.valueOf(bd09[0]));
|
||||
data.setBaiduLon(String.valueOf(bd09[1]));
|
||||
}else {
|
||||
double[] bd09 =CoordinateConverter.cgcs2000ToBd09(Double.parseDouble(data.getLat()),Double.parseDouble(data.getLon()));
|
||||
data.setBaiduLat(String.valueOf(bd09[0]));
|
||||
data.setBaiduLon(String.valueOf(bd09[1]));
|
||||
}
|
||||
Long userId = UserUtil.getLoginUser().getId();
|
||||
data.setCreateUserId(userId);
|
||||
data.setCreateTime(new Date());
|
||||
tbTowerMapper.addTbTower(data);
|
||||
return ServerResponse.createSuccess("杆塔管理-新增成功");
|
||||
} catch (Exception e) {
|
||||
log.error(e.toString(), e);
|
||||
return ServerResponse.createErroe("杆塔管理-新增失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,147 @@
|
|||
package com.bonus.digitalSignage.utils;
|
||||
|
||||
/**
|
||||
* @author 马三炮
|
||||
* @date 2025/4/25
|
||||
*/
|
||||
public class CoordinateConverter {
|
||||
private static final double PI = 3.14159265358979324;
|
||||
private static final double X_PI = PI * 3000.0 / 180.0;
|
||||
private static final double A = 6378245.0;
|
||||
private static final double EE = 0.00669342162296594323;
|
||||
|
||||
/**
|
||||
* 判断是否在中国范围内
|
||||
* @param lat 纬度
|
||||
* @param lon 经度
|
||||
* @return 如果在中国范围内返回 true,否则返回 false
|
||||
*/
|
||||
private static boolean outOfChina(double lat, double lon) {
|
||||
if (lon < 72.004 || lon > 137.8347)
|
||||
return true;
|
||||
if (lat < 0.8293 || lat > 55.8271)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换纬度
|
||||
* @param x 经度
|
||||
* @param y 纬度
|
||||
* @return 转换后的纬度
|
||||
*/
|
||||
private static double transformLat(double x, double y) {
|
||||
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.sqrt(Math.abs(x));
|
||||
ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;
|
||||
ret += (20.0 * Math.sin(y * PI) + 40.0 * Math.sin(y / 3.0 * PI)) * 2.0 / 3.0;
|
||||
ret += (160.0 * Math.sin(y / 12.0 * PI) + 320 * Math.sin(y * PI / 30.0)) * 2.0 / 3.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* 转换经度
|
||||
* @param x 经度
|
||||
* @param y 纬度
|
||||
* @return 转换后的经度
|
||||
*/
|
||||
private static double transformLon(double x, double y) {
|
||||
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.sqrt(Math.abs(x));
|
||||
ret += (20.0 * Math.sin(6.0 * x * PI) + 20.0 * Math.sin(2.0 * x * PI)) * 2.0 / 3.0;
|
||||
ret += (20.0 * Math.sin(x * PI) + 40.0 * Math.sin(x / 3.0 * PI)) * 2.0 / 3.0;
|
||||
ret += (150.0 * Math.sin(x / 12.0 * PI) + 300.0 * Math.sin(x / 30.0 * PI)) * 2.0 / 3.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* WGS - 84 转换为 GCJ - 02
|
||||
* @param wgLat WGS - 84 纬度
|
||||
* @param wgLon WGS - 84 经度
|
||||
* @return 包含 GCJ - 02 纬度和经度的数组
|
||||
*/
|
||||
public static double[] wgs84ToGcj02(double wgLat, double wgLon) {
|
||||
/* if (outOfChina(wgLat, wgLon)) {
|
||||
return new double[]{wgLat, wgLon};
|
||||
}*/
|
||||
double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
|
||||
double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
|
||||
double radLat = wgLat / 180.0 * PI;
|
||||
double magic = Math.sin(radLat);
|
||||
magic = 1 - EE * magic * magic;
|
||||
double sqrtMagic = Math.sqrt(magic);
|
||||
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI);
|
||||
dLon = (dLon * 180.0) / (A / sqrtMagic * Math.cos(radLat) * PI);
|
||||
double mgLat = wgLat + dLat;
|
||||
double mgLon = wgLon + dLon;
|
||||
return new double[]{mgLat, mgLon};
|
||||
}
|
||||
|
||||
/**
|
||||
* GCJ - 02 转换为 BD - 09
|
||||
* @param ggLat GCJ - 02 纬度
|
||||
* @param ggLon GCJ - 02 经度
|
||||
* @return 包含 BD - 09 纬度和经度的数组
|
||||
*/
|
||||
public static double[] gcj02ToBd09(double ggLat, double ggLon) {
|
||||
double x = ggLon;
|
||||
double y = ggLat;
|
||||
double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * X_PI);
|
||||
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * X_PI);
|
||||
double bdLon = z * Math.cos(theta) + 0.0065;
|
||||
double bdLat = z * Math.sin(theta) + 0.006;
|
||||
return new double[]{bdLat, bdLon};
|
||||
}
|
||||
|
||||
/**
|
||||
* WGS - 84 转换为 BD - 09
|
||||
* @param wgLat WGS - 84 纬度
|
||||
* @param wgLon WGS - 84 经度
|
||||
* @return 包含 BD - 09 纬度和经度的数组
|
||||
*/
|
||||
public static double[] wgs84ToBd09(double wgLat, double wgLon) {
|
||||
double[] gcj02 = wgs84ToGcj02(wgLat, wgLon);
|
||||
return gcj02ToBd09(gcj02[0], gcj02[1]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* CGCS2000 转换为 GCJ - 02
|
||||
* @param cgLat CGCS2000 纬度
|
||||
* @param cgLon CGCS2000 经度
|
||||
* @return 包含 GCJ - 02 纬度和经度的数组
|
||||
*/
|
||||
public static double[] cgcs2000ToGcj02(double cgLat, double cgLon) {
|
||||
if (outOfChina(cgLat, cgLon)) {
|
||||
return new double[]{cgLat, cgLon};
|
||||
}
|
||||
double dLat = transformLat(cgLon - 105.0, cgLat - 35.0);
|
||||
double dLon = transformLon(cgLon - 105.0, cgLat - 35.0);
|
||||
double radLat = cgLat / 180.0 * PI;
|
||||
double magic = Math.sin(radLat);
|
||||
magic = 1 - EE * magic * magic;
|
||||
double sqrtMagic = Math.sqrt(magic);
|
||||
dLat = (dLat * 180.0) / ((A * (1 - EE)) / (magic * sqrtMagic) * PI);
|
||||
dLon = (dLon * 180.0) / (A / sqrtMagic * Math.cos(radLat) * PI);
|
||||
double mgLat = cgLat + dLat;
|
||||
double mgLon = cgLon + dLon;
|
||||
return new double[]{mgLat, mgLon};
|
||||
}
|
||||
|
||||
/**
|
||||
* CGCS2000 转换为 BD - 09
|
||||
* @param cgLat CGCS2000 纬度
|
||||
* @param cgLon CGCS2000 经度
|
||||
* @return 包含 BD - 09 纬度和经度的数组
|
||||
*/
|
||||
public static double[] cgcs2000ToBd09(double cgLat, double cgLon) {
|
||||
double[] gcj02 = cgcs2000ToGcj02(cgLat, cgLon);
|
||||
return gcj02ToBd09(gcj02[0], gcj02[1]);
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
double wgLat = 31.230416;
|
||||
double wgLon = 121.473701;
|
||||
double[] bd09 = wgs84ToBd09(wgLat, wgLon);
|
||||
System.out.println("BD - 09 Latitude: " + bd09[0]);
|
||||
System.out.println("BD - 09 Longitude: " + bd09[1]);
|
||||
}
|
||||
}
|
||||
|
|
@ -50,4 +50,21 @@ public class StrUtil {
|
|||
return buffer.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验经度是否合法
|
||||
* @param longitude 经度值
|
||||
* @return 如果经度在合法范围内返回 true,否则返回 false
|
||||
*/
|
||||
public static boolean isValidLongitude(double longitude) {
|
||||
return longitude >= -180 && longitude <= 180;
|
||||
}
|
||||
|
||||
/**
|
||||
* 校验纬度是否合法
|
||||
* @param latitude 纬度值
|
||||
* @return 如果纬度在合法范围内返回 true,否则返回 false
|
||||
*/
|
||||
public static boolean isValidLatitude(double latitude) {
|
||||
return latitude >= -90 && latitude <= 90;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,37 @@
|
|||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.digitalSignage.basic.dao.TbTowerMapper">
|
||||
<insert id="addTbTower">
|
||||
insert into tb_tower
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
<if test="proId != null ">pro_id,</if>
|
||||
<if test="towerName != null ">tower_name,</if>
|
||||
<if test="lon != null ">lon,</if>
|
||||
<if test="lat != null ">lat,</if>
|
||||
<if test="baiduLon != null">baidu_lon,</if>
|
||||
<if test="baiduLat != null ">baidu_lat,</if>
|
||||
<if test="sort != null ">sort,</if>
|
||||
<if test="centralMeridian != null ">central_meridian,</if>
|
||||
<if test="uploadType != null ">upload_type,</if>
|
||||
<if test="createTime != null">create_time,</if>
|
||||
<if test="createUser != null ">create_user,</if>
|
||||
is_actvice
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="proId != null ">#{proId},</if>
|
||||
<if test="towerName != null ">#{towerName},</if>
|
||||
<if test="lon != null ">#{lon},</if>
|
||||
<if test="lat != null ">#{lat},</if>
|
||||
<if test="baiduLon != null ">#{baiduLon},</if>
|
||||
<if test="baiduLat != null ">#{baiduLat},</if>
|
||||
<if test="sort != null ">#{sort},</if>
|
||||
<if test="centralMeridian != null ">#{centralMeridian},</if>
|
||||
<if test="uploadType != null ">#{uploadType},</if>
|
||||
<if test="createTime != null ">#{createTime},</if>
|
||||
<if test="createUser != null ">#{createUser},</if>
|
||||
1
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<select id="getTbProjectList" resultType="com.bonus.digitalSignage.basic.vo.TbTowerVo">
|
||||
select id as id,pro_id as proId,tower_name as towerName,lon as lon,lat as lat,
|
||||
|
|
@ -14,4 +45,10 @@
|
|||
upload_type as uploadType
|
||||
from tb_tower where id = #{id}
|
||||
</select>
|
||||
<select id="getTbTowerBySort" resultType="com.bonus.digitalSignage.basic.vo.TbTowerVo">
|
||||
select id as id,pro_id as proId,tower_name as towerName,lon as lon,lat as lat,
|
||||
baidu_lon as baiduLon,baidu_lat as baiduLat,sort as sort,central_meridian as centralMeridian,
|
||||
upload_type as uploadType
|
||||
from tb_tower where id = #{id} and sort = #{sort}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ body {
|
|||
.scroll-box {
|
||||
top: 15px;
|
||||
left: 15px;
|
||||
width: 460px;
|
||||
height: 180px;
|
||||
width: 520px;
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.scroll-box-title,
|
||||
|
|
@ -64,13 +64,13 @@ body {
|
|||
}
|
||||
|
||||
.scroll-box-title {
|
||||
height: 30px;
|
||||
line-height: 30px;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.scroll-box-content {
|
||||
height: 150px;
|
||||
height: 160px;
|
||||
/* overflow-y: auto; */
|
||||
overflow: hidden;
|
||||
}
|
||||
|
|
@ -78,6 +78,7 @@ body {
|
|||
.flex-box {
|
||||
padding: 6px 0;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
|
|
@ -104,14 +105,31 @@ body {
|
|||
|
||||
.content-item span {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.content-item span img {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin-right: 4px;
|
||||
}
|
||||
|
||||
.content-item span:last-child {
|
||||
display: flex;
|
||||
flex-direction: column !important;
|
||||
justify-content: center !important;
|
||||
align-items: flex-start !important;
|
||||
}
|
||||
|
||||
.content-item span i {
|
||||
padding: 1px 0;
|
||||
font-style: normal;
|
||||
white-space: nowrap; /* 禁止换行 */
|
||||
overflow: hidden; /* 溢出隐藏 */
|
||||
text-overflow: ellipsis; /* 显示省略号 */
|
||||
display: inline-block; /* 必须设置宽度才能生效 */
|
||||
max-width: 100%; /* 限制最大宽度,防止撑开容器 */
|
||||
}
|
||||
|
||||
/* 左下角图例 */
|
||||
|
|
@ -163,6 +181,9 @@ body {
|
|||
font-size: 14px;
|
||||
}
|
||||
|
||||
.map-container-item-ropeway {
|
||||
display: flex;
|
||||
}
|
||||
.map-container-item span:first-child {
|
||||
width: 160px;
|
||||
}
|
||||
|
|
@ -174,10 +195,15 @@ body {
|
|||
/* 索道信息窗口样式 */
|
||||
.map-container-item-ropeway span:first-child {
|
||||
padding-left: 16px;
|
||||
width: 100px;
|
||||
}
|
||||
.map-container-item-ropeway span:last-child {
|
||||
margin-left: 4px;
|
||||
min-width: 120px;
|
||||
width: 140px;
|
||||
white-space: nowrap; /* 禁止换行 */
|
||||
overflow: hidden; /* 溢出隐藏 */
|
||||
text-overflow: ellipsis; /* 显示省略号 */
|
||||
display: inline-block; /* 必须设置宽度才能生效 */
|
||||
}
|
||||
|
||||
/* 交叉信息窗口样式 */
|
||||
|
|
@ -202,7 +228,7 @@ body {
|
|||
}
|
||||
|
||||
.map-container-cross .map-container-2 h4 {
|
||||
padding-left: 20px;
|
||||
/* padding-left: 20px; */
|
||||
}
|
||||
|
||||
/* 右侧抽屉 */
|
||||
|
|
@ -272,3 +298,11 @@ body {
|
|||
.layui-tree-line .layui-tree-entry:hover .layui-tree-txt {
|
||||
color: #dfd8d8 !important;
|
||||
}
|
||||
|
||||
.layui-tree-click {
|
||||
background-color: #54b4e2 !important; /* 浅蓝色背景 */
|
||||
color: #1890ff !important; /* 蓝色文字 */
|
||||
}
|
||||
.layui-icon {
|
||||
color: #fff !important;
|
||||
}
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.0 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
File diff suppressed because it is too large
Load Diff
|
|
@ -14,7 +14,7 @@
|
|||
<script src="../../js/openIframe.js"></script>
|
||||
<script src="../../js/my/aes.js"></script>
|
||||
<script src="../../js/ajaxRequest.js"></script>
|
||||
<script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=1.0&ak=cClgLBaLgGUdQDilX9dGvieL"></script>
|
||||
<script type="text/javascript" src="//api.map.baidu.com/api?type=webgl&v=3.0&ak=cClgLBaLgGUdQDilX9dGvieL"></script>
|
||||
<title>电子看板</title>
|
||||
|
||||
<style>
|
||||
|
|
|
|||
Loading…
Reference in New Issue