隐藏

c# 经纬度距离2公里

发布:2024/3/11 22:27:33作者:管理员 来源:本站 浏览次数:399


在C#中,要计算两个经纬度点之间的距离是否小于2公里,你可以使用Haversine公式。以下是一个方法,它接受两个经纬度点作为参数,并返回它们之间的距离(以公里为单位)。如果这个距离小于2公里,方法将返回true,否则返回false。


using System;


public class GeoCalculator

{

   const double EARTH_RADIUS = 6371; // 地球半径,单位为公里


   public static bool IsWithin2Km(double lat1, double lon1, double lat2, double lon2)

   {

       double deltaLat = ToRadians(lat2 - lat1);

       double deltaLon = ToRadians(lon2 - lon2);


       double a = Math.Sin(deltaLat / 2) * Math.Sin(deltaLat / 2) +

                  Math.Cos(ToRadians(lat1)) * Math.Cos(ToRadians(lat2)) *

                  Math.Sin(deltaLon / 2) * Math.Sin(deltaLon / 2);

       double c = 2 * Math.Atan2(Math.Sqrt(a), Math.Sqrt(1 - a));

       double distance = EARTH_RADIUS * c;


       return distance < 2;

   }


   private static double ToRadians(double degrees)

   {

       return degrees * (Math.PI / 180);

   }

}


// 使用示例

// 经纬度1 (lat1, lon1)

// 经纬度2 (lat2, lon2)

bool isWithin2Km = GeoCalculator.IsWithin2Km(lat1, lon1, lat2, lon2);


在这个代码中,IsWithin2Km方法计算两点之间的大圆距离,如果小于2公里,则返回true。EARTH_RADIUS是地球半径,以公里为单位,常用值为6371公里。ToRadians方法将度数转换为弧度。Haversine公式用于计算大圆距离,这是因为地球是一个非完美的球形,而这个公式可以很好地逼近实际距离。