From a170a2ecef6d5c87883ed552dbbc81cfb0358d13 Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期五, 19 十一月 2021 16:43:53 +0800
Subject: [PATCH] Merge branch 'WJC' into newBranch1

---
 HDL_ON/UI/UI2/3-Intelligence/Automation/CalculatedDistance.cs |   63 +++++++++++++++++++++++++++++++
 1 files changed, 63 insertions(+), 0 deletions(-)

diff --git a/HDL_ON/UI/UI2/3-Intelligence/Automation/CalculatedDistance.cs b/HDL_ON/UI/UI2/3-Intelligence/Automation/CalculatedDistance.cs
new file mode 100644
index 0000000..58e9b54
--- /dev/null
+++ b/HDL_ON/UI/UI2/3-Intelligence/Automation/CalculatedDistance.cs
@@ -0,0 +1,63 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Infrastructure.Service.Helper
+{
+    public class CalculatedDistance
+    {
+        private static double HaverSin(double theta)
+        {
+            var v = Math.Sin(theta / 2);
+            return v * v;
+        }
+
+        static double EARTH_RADIUS = 6371.0;//km 鍦扮悆鍗婂緞 骞冲潎鍊硷紝鍗冪背
+
+        /// <summary>
+        /// 缁欏畾鐨勭粡搴�1锛岀含搴�1锛涚粡搴�2锛岀含搴�2. 璁$畻2涓粡绾害涔嬮棿鐨勮窛绂汇��
+        /// </summary>
+        /// <param name="lat1">缁忓害1</param>
+        /// <param name="lon1">绾害1</param>
+        /// <param name="lat2">缁忓害2</param>
+        /// <param name="lon2">绾害2</param>
+        /// <returns>璺濈锛堝叕閲屻�佸崈绫筹級</returns>
+        public static int Distance(double lat1, double lon1, double lat2, double lon2)
+        {
+            //鐢╤aversine鍏紡璁$畻鐞冮潰涓ょ偣闂寸殑璺濈銆�
+            //缁忕含搴﹁浆鎹㈡垚寮у害
+            lat1 = ConvertDegreesToRadians(lat1);
+            lon1 = ConvertDegreesToRadians(lon1);
+            lat2 = ConvertDegreesToRadians(lat2);
+            lon2 = ConvertDegreesToRadians(lon2);
+
+            //宸��
+            var vLon = Math.Abs(lon1 - lon2);
+            var vLat = Math.Abs(lat1 - lat2);
+
+            //h is the great circle distance in radians, great circle灏辨槸涓�涓悆浣撲笂鐨勫垏闈紝瀹冪殑鍦嗗績鍗虫槸鐞冨績鐨勪竴涓懆闀挎渶澶х殑鍦嗐��
+            var h = HaverSin(vLat) + Math.Cos(lat1) * Math.Cos(lat2) * HaverSin(vLon);
+
+            var distance = (int)((2 * EARTH_RADIUS * Math.Asin(Math.Sqrt(h))) * 1000);
+
+            return distance;
+        }
+
+        /// <summary>
+        /// 灏嗚搴︽崲绠椾负寮у害銆�
+        /// </summary>
+        /// <param name="degrees">瑙掑害</param>
+        /// <returns>寮у害</returns>
+        private static double ConvertDegreesToRadians(double degrees)
+        {
+            return degrees * Math.PI / 180;
+        }
+
+        private static double ConvertRadiansToDegrees(double radian)
+        {
+            return radian * 180.0 / Math.PI;
+        }
+    }
+}

--
Gitblit v1.8.0