30 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			30 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			C#
		
	
	
	
| 
								 | 
							
								namespace LY.App.Common
							 | 
						|||
| 
								 | 
							
								{
							 | 
						|||
| 
								 | 
							
								    public static class GisHelper
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        /// <summary>
							 | 
						|||
| 
								 | 
							
								        /// 计算两点之间的距离
							 | 
						|||
| 
								 | 
							
								        /// </summary>
							 | 
						|||
| 
								 | 
							
								        /// <param name="lat1"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="lon1"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="lat2"></param>
							 | 
						|||
| 
								 | 
							
								        /// <param name="lon2"></param>
							 | 
						|||
| 
								 | 
							
								        /// <returns></returns>
							 | 
						|||
| 
								 | 
							
								        public static double HaversineDistance(double lat1, double lon1, double lat2, double lon2)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            const double R = 6371000.0; // 地球半径(单位:米)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            double dLat = ToRadians(lat2 - lat1);
							 | 
						|||
| 
								 | 
							
								            double dLon = ToRadians(lon2 - lon1);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            double a = Math.Sin(dLat / 2) * Math.Sin(dLat / 2) +
							 | 
						|||
| 
								 | 
							
								                       Math.Cos(ToRadians(lat1)) * Math.Cos(ToRadians(lat2)) *
							 | 
						|||
| 
								 | 
							
								                       Math.Sin(dLon / 2) * Math.Sin(dLon / 2);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));
							 | 
						|||
| 
								 | 
							
								            return R * c;
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								        static double ToRadians(double degrees) => degrees * Math.PI / 180.0;
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								}
							 |