2009-10-22 6 views
1

Je développe une application iphone qui utilise google API's.J'ai un ensemble de latitudes et de logitudes .J'ai besoin de trouver les points Sud-Ouest et Nord-Est à partir de ces points .Comment puis-je faire?Points SouthWest et NorthEast

merci à l'avance

Répondre

2

Étant donné:

 
    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 

Le point SW est:

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

Le point N'est:

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

Si vous utilisez miles comme unité de mesure utiliser 69 au lieu de 111 .

0

Ceci est le code C# si quelqu'un a besoin

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; 
     }} 

Notes:

  • MapPoint est une simple classe de données avec des propriétés Lat/Lon

  • j'utilisais miles ==> 69