2009-10-22 60 views
1

我正在开发一个使用谷歌API's的iphone应用程序。我有一套纬度和经度。我需要从这些点找到南西和东北点。我该怎么做?西南和东北点

在此先感谢

回答

2

考虑:

 
    A point (LAT, LNG) 
    A distance or radius DIST 
    1° of latitude ~= 69 miles ~= 111 kms 
    1° of longitude ~= cos(latitude)*69 ~= cos(latitude)*111 

的SW点是:

 
lng_sw = LNG - (DIST/abs(cos(radians(LAT))) * 111) 
lat_sw = LAT - (DIST/111) 

的NE的一点是:

 
lng_ne = LNG + (DIST/abs(cos(radians(LAT))) * 111) 
lat_ne = LAT + (DIST/111) 

如果您使用里程为您度量单位使用69而不是111 。

0

这是C#代码,如果有人需要

private double DegreeToRadian(double angle) { 
    return Math.PI * angle/180.0; 
} 

private bool CalculateNeSw(double distance, double lat, double lng, out MapPoint[] points) { 
     /* 
     * 1° of latitude ~= 69 miles ~= 111 kms, 1° of longitude ~= cos(latitude)*69 ~= cos(latitude)*111 
     * SW.LNG = LNG - (DIST/abs(cos(radians(LAT))) * 111), SW.LAT = LAT - (DIST/111) 
     * NE.LNG = LNG + (DIST/abs(cos(radians(LAT))) * 111), NE.LAT = LAT + (DIST/111) 
     */ 
     points = new MapPoint[2]; 
     try { 
      double deltaLat = distance/69; 
      double deltaLng = distance/Math.Abs(Math.Cos(DegreeToRadian(lat)) * 69); 

      /* South-West */ 
      points[1] = new MapPoint { 
       Lng = (lng - deltaLng).ToString(), 
       Lat = (lat - deltaLat).ToString(), 
       IsSet = true, 
       FormattedAddress = "South-West" 
      }; 

      /* North-East */ 
      points[0] = new MapPoint { 
       Lng = (lng + deltaLng).ToString(), 
       Lat = (lat + deltaLat).ToString(), 
       IsSet = true, 
       FormattedAddress = "North-East" 
      }; 

      return true; 
     } 
     catch (Exception ex) { 
      return false; 
     }} 

注:

  • 的MapPoint与纬度/经度属性

  • 我用英里一个简单的数据类==> 69