1.首先定義一個點與點之間測算距離的方法
2.然后定義找出基本點和集合中最近的一個點的方法
3.取第一條數據即是最近的點的坐標
1 public class Location 2 { 3 public int id { set; get; }//地點的id 4 public double lat { set; get; } 5 public double lng { set; get; } 6 public double distance { set; get; }//地點的距離 7 }
1 private const double EARTH_RADIUS = 6378.137;//地球半徑 2 private double rad(double d) 3 { 4 return d * Math.PI / 180.0; 5 } 6 //根據兩個點的左邊測算出距離 7 public double GetDistance(Location location1, Location location2) 8 { 9 double radLat1 = rad(location1.lat); 10 double radLat2 = rad(location2.lat); 11 double a = radLat1 - radLat2; 12 double b = rad(location1.lng) - rad(location2.lng); 13 14 double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2) + 15 Math.Cos(radLat1) * Math.Cos(radLat2) * Math.Pow(Math.Sin(b / 2), 2))); 16 s = s * EARTH_RADIUS; 17 s = Math.Round(s * 10000) / 10000; 18 return s; 19 } 20 //找出基本點和數組中最近的一個點 21 public List<Location> GetDistance(Location location1, List<Location> location2) 22 { 23 Location lo=new Location(); 24 foreach (var item in location2) 25 { 26 lo.lat=item.lat; 27 lo.lng=item.lng; 28 item.distance = GetDistance(location1, lo); 29 } 30 return location2.OrderBy(c=>c.distance).ToList(); 31 }