From 1c02d5f852efacc97b9ddedba1cd44934e228302 Mon Sep 17 00:00:00 2001 From: Zangzhipeng Date: Thu, 18 Jul 2024 00:11:59 +0800 Subject: [PATCH] =?UTF-8?q?0717-1=E9=97=AE=E9=A2=98=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/sqldialects.xml | 6 + .../controller/HighDangerController.java | 10 +- .../server_api/service/HighDangerService.java | 3 + .../impl/HighDangerBaseServiceImpl.java | 109 +++++++++++++++++ .../server_api/utils/CoordinateConverter.java | 115 ++++++++++++++++++ .../resources/sql-mapper/HighDangerMapper.xml | 6 +- .../model/common/ManualInvestigation.java | 2 +- log/monitor-info.log | 13 -- 8 files changed, 245 insertions(+), 19 deletions(-) create mode 100644 .idea/sqldialects.xml create mode 100644 hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CoordinateConverter.java delete mode 100644 log/monitor-info.log diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml new file mode 100644 index 0000000..8682f3c --- /dev/null +++ b/.idea/sqldialects.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java index 15953b4..d55c071 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/controller/HighDangerController.java @@ -8,6 +8,7 @@ import com.hisense.hiatmp.server_api.mapper.OperatorMapper; import com.hisense.hiatmp.model.common.DangerProblem; import com.hisense.hiatmp.server_api.service.HighDangerService; import com.hisense.hiatmp.model.dmr.Point; +import com.hisense.hiatmp.server_api.utils.CoordinateConverter; import com.hisense.hiatmp.server_api.utils.CoordinateUtils; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -354,11 +355,16 @@ public class HighDangerController { String[] split = roadInfo.getCoordinate().split(","); for(int i = 0; i < split.length; i+=2){ + CoordinateConverter coordinateConverter = new CoordinateConverter(); Map pointMap = new LinkedHashMap<>(); + float x = Float.parseFloat(split[i]); float y = Float.parseFloat(split[i + 1]); - pointMap.put("longitude", x); - pointMap.put("latitude", y); + + CoordinateConverter.AMap transform = highDangerService.transform(x, y); + + pointMap.put("longitude", transform.getLongitude()); + pointMap.put("latitude", transform.getLatitude()); coordinateMapTemporary.add(pointMap); } roadInfo.setCoordinateList(coordinateMapTemporary); diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java index 25b1a1b..0eab2b4 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/HighDangerService.java @@ -2,6 +2,7 @@ package com.hisense.hiatmp.server_api.service; import com.hisense.hiatmp.model.common.ThtDangerItems; import com.hisense.hiatmp.model.dmr.Point; +import com.hisense.hiatmp.server_api.utils.CoordinateConverter; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; @@ -25,5 +26,7 @@ public interface HighDangerService { Boolean isPicture(MultipartFile file); + CoordinateConverter.AMap transform(double wgLon, double wgLat); + // Map> sortMapByValue(HashMap unsortedMap); } diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java index 6d89d31..aefa4c8 100644 --- a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/service/impl/HighDangerBaseServiceImpl.java @@ -4,6 +4,7 @@ import com.hisense.hiatmp.server_api.mapper.HighDangerMapper; import com.hisense.hiatmp.server_api.service.HighDangerService; import com.hisense.hiatmp.model.common.ThtDangerItems; import com.hisense.hiatmp.model.dmr.Point; +import com.hisense.hiatmp.server_api.utils.CoordinateConverter; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -22,6 +23,19 @@ import java.util.stream.Collectors; @Service public class HighDangerBaseServiceImpl implements HighDangerService { + /** + * 椭球参数 + */ + private static double pi = 3.14159265358979324; + /** + * 卫星椭球坐标投影到平面地图坐标系的投影因子 + */ + private static double a = 6378245.0; + /** + * 椭球的偏心率 + */ + private static double ee = 0.00669342162296594323; + private static final double EARTH_RADIUS = 6378137; /*@Value("${file.path.local}") @@ -198,12 +212,107 @@ public class HighDangerBaseServiceImpl implements HighDangerService { img = null; } + // @Override // public Path saveMultipartFiles(MultipartFile multipartFiles) { // return null; // } } + + + @Override + public CoordinateConverter.AMap transform(double wgLon, double wgLat) { + if (outOfChina(wgLat, wgLon)) { + return new CoordinateConverter.AMap((float) wgLon, (float) wgLat); + } + + 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 transLat = wgLat + dLat; + double transLon = wgLon + dLon; + return new CoordinateConverter.AMap((float) transLon, (float) transLat); + } + + /** + * 判断是否为国外坐标,,不在国内不做偏移 + * + * @param lat + * @param lon + * @return + */ + 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; + } + + /** + * 高德经纬度类 + */ + public static class AMap { + /** + * 经度 + */ + private double longitude; + + /** + * 维度 + */ + private double latitude; + + public AMap(double longitude, double latitude) { + this.longitude = longitude; + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public double getLatitude() { + return latitude; + } + } + // public Map> sortMapByValue(HashMap unsortedMap) { // Map> sortedMap = new LinkedHashMap<>(); // Comparator valueComparator = Comparator.naturalOrder(); diff --git a/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CoordinateConverter.java b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CoordinateConverter.java new file mode 100644 index 0000000..7b1179b --- /dev/null +++ b/hiatmp-hidden-danger-server/src/main/java/com/hisense/hiatmp/server_api/utils/CoordinateConverter.java @@ -0,0 +1,115 @@ +package com.hisense.hiatmp.server_api.utils; + +public class CoordinateConverter { + + /** + * 椭球参数 + */ + private static double pi = 3.14159265358979324; + /** + * 卫星椭球坐标投影到平面地图坐标系的投影因子 + */ + private static double a = 6378245.0; + /** + * 椭球的偏心率 + */ + private static double ee = 0.00669342162296594323; + + /** + * 经纬度 GPS转高德 + * + * @param wgLon GPS经度 + * @param wgLat GPS维度 + * @return 转化后的经纬度坐标 + */ + public static AMap transform(double wgLon, double wgLat) { + if (outOfChina(wgLat, wgLon)) { + return new AMap((float) wgLon, (float) wgLat); + } + + 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 transLat = wgLat + dLat; + double transLon = wgLon + dLon; + return new AMap((float) transLon, (float) transLat); + } + + /** + * 判断是否为国外坐标,,不在国内不做偏移 + * + * @param lat + * @param lon + * @return + */ + 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; + } + + /** + * 高德经纬度类 + */ + public static class AMap { + /** + * 经度 + */ + private float longitude; + + /** + * 维度 + */ + private float latitude; + + public AMap(float longitude, float latitude) { + this.longitude = longitude; + this.latitude = latitude; + } + + public float getLongitude() { + return longitude; + } + + public float getLatitude() { + return latitude; + } + } +} \ No newline at end of file diff --git a/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml b/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml index 54ae93f..bd1f6a5 100644 --- a/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml +++ b/hiatmp-hidden-danger-server/src/main/resources/sql-mapper/HighDangerMapper.xml @@ -86,7 +86,7 @@ hdb.pc_end_time > CURRENT_TIMESTAMP - INTERVAL '3 days' and - hdb.pc_end_time <= + hdb.pc_end_time < CURRENT_TIMESTAMP THEN 1 ELSE 0 END) AS count FROM tht_hidden_danger_base hdb @@ -343,7 +343,7 @@ #{peakHours}, #{normalTraffic}, #{largeVehicleRate}, - #{vehicleTraffic}, + #{nonvehicleTraffic}, #{lastModeUser}, #{lastModeDate}) @@ -356,7 +356,7 @@ "PEAK_HOURS" = #{peakHours}, "NORMAL_TRAFFIC" = #{normalTraffic}, "LARGE_VEHICLE_RATE" = #{largeVehicleRate}, - "NONVEHICLE_TRAFFIC" = #{vehicleTraffic}, + "NONVEHICLE_TRAFFIC" = #{nonvehicleTraffic}, "LAST_MOD_USER" = #{lastModeUser}, "LAST_MOD_DATE" = #{lastModeDate} where "BUSINESS_ID" = #{businessId} diff --git a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java index 462ebdc..f5a771a 100644 --- a/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java +++ b/hiatmp-model/src/main/java/com/hisense/hiatmp/model/common/ManualInvestigation.java @@ -32,7 +32,7 @@ public class ManualInvestigation implements Serializable { String peakHours; String normalTraffic; String largeVehicleRate; - String vehicleTraffic; + String nonvehicleTraffic; String lastModeUser; Date lastModeDate; diff --git a/log/monitor-info.log b/log/monitor-info.log deleted file mode 100644 index c40240a..0000000 --- a/log/monitor-info.log +++ /dev/null @@ -1,13 +0,0 @@ -2024-07-10 01:10:47,770 [parallel-1] WARN de.codecentric.boot.admin.server.services.IntervalCheck - Unexpected error in status-check -reactor.core.Exceptions$OverflowException: Could not emit tick 4136 due to lack of requests (interval doesn't support small downstream requests that replenish slower than the ticks) - at reactor.core.Exceptions.failWithOverflow(Exceptions.java:234) ~[reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE] - at reactor.core.publisher.FluxInterval$IntervalRunnable.run(FluxInterval.java:130) [reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE] - at reactor.core.scheduler.PeriodicWorkerTask.call(PeriodicWorkerTask.java:59) [reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE] - at reactor.core.scheduler.PeriodicWorkerTask.run(PeriodicWorkerTask.java:73) [reactor-core-3.3.4.RELEASE.jar:3.3.4.RELEASE] - at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [?:1.8.0_411] - at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) [?:1.8.0_411] - at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) [?:1.8.0_411] - at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) [?:1.8.0_411] - at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_411] - at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_411] - at java.lang.Thread.run(Thread.java:750) [?:1.8.0_411]