From 83ff381c5c0e62c98cb9e3dd8e1d82771b1dc23f Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期四, 30 四月 2026 09:54:42 +0800
Subject: [PATCH] fix

---
 UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java |   26 +++++++++++++++++++-------
 1 files changed, 19 insertions(+), 7 deletions(-)

diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java
index 512d70a..5733e4c 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/SiteServiceImpl.java
@@ -200,25 +200,37 @@
         if (lon == null || lat == null) {
             return null;
         }
-        String adCode = getAdCodeByLonLat(lon, lat);
-        String lonLat = lon + "," + lat;
         List<Site> siteList = this.selectList(new EntityWrapper<Site>().eq("state", 1).orderBy("id", true));
         if (siteList == null || siteList.size() <= 0) {
             return null;
         }
+        Site nearest = null;
+        Double minDistance = null;
         for (Site site : siteList) {
             if (site == null || site.getId() == null) {
                 continue;
             }
-            List<Map<String, Object>> locations = queryLocation(site.getId());
-            if (locations == null || locations.size() <= 0) {
+            if (site.getDefaultPointLon() == null || site.getDefaultPointLat() == null) {
                 continue;
             }
-            if (matchAreaType1(locations, adCode) || matchAreaType2(site.getId(), lonLat)) {
-                return site;
+            double distance = calcDistanceMeters(lat, lon, site.getDefaultPointLat(), site.getDefaultPointLon());
+            if (minDistance == null || distance < minDistance) {
+                minDistance = distance;
+                nearest = site;
             }
         }
-        return null;
+        return nearest;
+    }
+
+    private double calcDistanceMeters(double lat1, double lon1, double lat2, double lon2) {
+        double earthRadius = 6371000D;
+        double dLat = Math.toRadians(lat2 - lat1);
+        double dLon = Math.toRadians(lon2 - lon1);
+        double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)
+                + Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2))
+                * Math.sin(dLon / 2) * Math.sin(dLon / 2);
+        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
+        return earthRadius * c;
     }
 
     private boolean matchAreaType1(List<Map<String, Object>> locations, String adCode) {

--
Gitblit v1.7.1