From df7b409920210fa920f99516450001827db92ddc Mon Sep 17 00:00:00 2001 From: xuhy <3313886187@qq.com> Date: 星期四, 03 七月 2025 19:06:19 +0800 Subject: [PATCH] bug修改 --- UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ElectricFenceUtil.java | 123 +++++++++++++++++++++++++++++++++++++++++ UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java | 4 UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java | 9 +-- UserOKTravel/guns-admin/src/main/resources/application.yml | 3 + 4 files changed, 131 insertions(+), 8 deletions(-) diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java index bf29d11..3aef32f 100644 --- a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java +++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java @@ -7,6 +7,7 @@ import com.stylefeng.guns.modular.crossCity.model.Site; import com.stylefeng.guns.modular.crossCity.server.ISiteService; import com.stylefeng.guns.modular.crossCity.warpper.SiteWarpper; +import com.stylefeng.guns.modular.system.util.ElectricFenceUtil; import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -106,12 +107,8 @@ } } if(Integer.valueOf(map.get("type").toString()) == 2){//电子围栏 - String gid = map.get("gid").toString(); - List<String> list1 = gdMapElectricFenceUtil.monitorElectricFenc("", lonLat); - if(list1.contains(gid)){ - return true; - } - continue; + String coordinate = map.get("coordinate").toString(); + return ElectricFenceUtil.monitorElectricFenc(coordinate, lonLat); } } return false; diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ElectricFenceUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ElectricFenceUtil.java new file mode 100644 index 0000000..3a4b007 --- /dev/null +++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/ElectricFenceUtil.java @@ -0,0 +1,123 @@ +package com.stylefeng.guns.modular.system.util; + +import java.util.ArrayList; +import java.util.List; + +/** + * 电子围栏工具类 + */ +public class ElectricFenceUtil { + + + + /** + * @return + */ + public static boolean monitorElectricFenc(String coordinate, String locations){ + return areaMonitoring(coordinate, locations); + } + public static boolean areaMonitoring(String coordinate, String lonLat){ + boolean flag = false; + String[] split = coordinate.split(";"); + List<Double> pointsX = new ArrayList<>(); + List<Double> pointsY = new ArrayList<>(); + for (String s : split) { + pointsX.add(Double.valueOf(s.split(",")[0])); + pointsY.add(Double.valueOf(s.split(",")[1])); + } + String lon1 = lonLat.split(",")[0]; + String lat1 = lonLat.split(",")[1]; + boolean inPolygon = isInPolygon(Double.valueOf(lon1), Double.valueOf(lat1), pointsX, pointsY); + if (inPolygon){ + flag = true; + } + return flag; + } + + + /** + // * 判断点是否在多边形内 + // * @param px 测试点 + // * @param polygonXA 多边形的点 + // * @return boolean true:在多边形内, false:在多边形外 + // * @throws + // * @Title: IsPointInPoly + // */ + public static boolean isInPolygon(double px, double py,List<Double> polygonXA, List<Double> polygonYA) { + boolean isInside = false; + double ESP = 1e-9; + int count = 0; + double linePoint1x; + double linePoint1y; + double linePoint2x = 180; + double linePoint2y; + + linePoint1x = px; + linePoint1y = py; + linePoint2y = py; + + for (int i = 0; i < polygonXA.size() - 1; i++) { + double cx1 = polygonXA.get(i); + double cy1 = polygonYA.get(i); + double cx2 = polygonXA.get(i + 1); + double cy2 = polygonYA.get(i + 1); + if (isPointOnLine(px, py, cx1, cy1, cx2, cy2)) { + return true; + } + if (Math.abs(cy2 - cy1) < ESP) { + continue; + } + + if (isPointOnLine(cx1, cy1, linePoint1x, linePoint1y, linePoint2x, + linePoint2y)) { + if (cy1 > cy2) + count++; + } else if (isPointOnLine(cx2, cy2, linePoint1x, linePoint1y, + linePoint2x, linePoint2y)) { + if (cy2 > cy1) + count++; + } else if (isIntersect(cx1, cy1, cx2, cy2, linePoint1x, + linePoint1y, linePoint2x, linePoint2y)) { + count++; + } + } + if (count % 2 == 1) { + isInside = true; + } + + return isInside; + } + public static double Multiply(double px0, double py0, double px1, double py1, + double px2, double py2) { + return ((px1 - px0) * (py2 - py0) - (px2 - px0) * (py1 - py0)); + } + + public static boolean isPointOnLine(double px0, double py0, double px1, + double py1, double px2, double py2) { + boolean flag = false; + double ESP = 1e-9; + if ((Math.abs(Multiply(px0, py0, px1, py1, px2, py2)) < ESP) + && ((px0 - px1) * (px0 - px2) <= 0) + && ((py0 - py1) * (py0 - py2) <= 0)) { + flag = true; + } + return flag; + } + + public static boolean isIntersect(double px1, double py1, double px2, double py2, + double px3, double py3, double px4, double py4) { + boolean flag = false; + double d = (px2 - px1) * (py4 - py3) - (py2 - py1) * (px4 - px3); + if (d != 0) { + double r = ((py1 - py3) * (px4 - px3) - (px1 - px3) * (py4 - py3)) + / d; + double s = ((py1 - py3) * (px2 - px1) - (px1 - px3) * (py2 - py1)) + / d; + if ((r >= 0) && (r <= 1) && (s >= 0) && (s <= 1)) { + flag = true; + } + } + return flag; + } + +} diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java index d3f4a9e..12f6dff 100644 --- a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java +++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/GDMapElectricFenceUtil.java @@ -304,11 +304,12 @@ diu = "B78F99DD-2496-4A43-843B-172CDA2D9798"; } locations = locations + "," + (new Date().getTime() / 1000); - String url = "https://restapi.amap.com/v4/geofence/status?key=" + key + "&diu=" + diu + "&locations=" + locations; + String url = "https://api.map.baidu.com/directionlite/v1/geofence/status?key=" + key + "&diu=" + diu + "&locations=" + locations; String forObject = restTemplate.getForObject(url, String.class); JSONObject jsonObject = JSON.parseObject(forObject); List<String> ids = new ArrayList<>(); JSONObject data = jsonObject.getJSONObject("data"); + System.err.println(data); int status = data.getIntValue("status"); if(0 == status){ JSONArray fencingEventList = data.getJSONArray("fencing_event_list"); @@ -434,6 +435,5 @@ } return null; } - } diff --git a/UserOKTravel/guns-admin/src/main/resources/application.yml b/UserOKTravel/guns-admin/src/main/resources/application.yml index 1bb9937..d6ba043 100644 --- a/UserOKTravel/guns-admin/src/main/resources/application.yml +++ b/UserOKTravel/guns-admin/src/main/resources/application.yml @@ -61,6 +61,9 @@ # url: jdbc:mysql://127.0.0.1:3306/xianning?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true # username: root # password: 123456 +# url: jdbc:mysql://36.134.221.234:10633/xianning?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true +# username: xianning +# password: XianNing@2024! url: jdbc:mysql://127.0.0.1:10633/xianning?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=CONVERT_TO_NULL&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true username: root password: XianNing@2024! -- Gitblit v1.7.1