2013-05-31 108 views

回答

4

我使用的代码从Calculate new coordinate x meters and y degree away from one coordinate

- (CLLocationCoordinate2D)coordinateFromCoord:(CLLocationCoordinate2D)fromCoord 
           atDistanceKm:(double)distanceKm 
          atBearingDegrees:(double)bearingDegrees 
{ 
    double distanceRadians = distanceKm/6371.0; 
    //6,371 = Earth's radius in km 
    double bearingRadians = [self radiansFromDegrees:bearingDegrees]; 
    double fromLatRadians = [self radiansFromDegrees:fromCoord.latitude]; 
    double fromLonRadians = [self radiansFromDegrees:fromCoord.longitude]; 

    double toLatRadians = asin(sin(fromLatRadians) * cos(distanceRadians) 
           + cos(fromLatRadians) * sin(distanceRadians) * cos(bearingRadians)); 

    double toLonRadians = fromLonRadians + atan2(sin(bearingRadians) 
               * sin(distanceRadians) * cos(fromLatRadians), cos(distanceRadians) 
               - sin(fromLatRadians) * sin(toLatRadians)); 

    // adjust toLonRadians to be in the range -180 to +180... 
    toLonRadians = fmod((toLonRadians + 3*M_PI), (2*M_PI)) - M_PI; 

    CLLocationCoordinate2D result; 
    result.latitude = [self degreesFromRadians:toLatRadians]; 
    result.longitude = [self degreesFromRadians:toLonRadians]; 

    return result; 
} 

- (double)radiansFromDegrees:(double)degrees 
{ 
    return degrees * (M_PI/180.0); 
} 

- (double)degreesFromRadians:(double)radians 
{ 
    return radians * (180.0/M_PI); 
} 
0

您将在http://www.movable-type.co.uk/scripts/latlong.html

你需要的是(在JavaScript)的代码项下找到所有你可能需要的计算(包括解释等)“目标点一定距离,并从起始点轴承”。摘录:

var lat2 = Math.asin(Math.sin(lat1)*Math.cos(d/R) + 
      Math.cos(lat1)*Math.sin(d/R)*Math.cos(brng)); 
var lon2 = lon1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(lat1), 
       Math.cos(d/R)-Math.sin(lat1)*Math.sin(lat2)); 

其中R =半径大地的,d =距离(以相同的单位),和纬度/经度是弧度(因为这是所述sin函数需要什么)。你从度数到弧度与

radians = pi * degrees/180; 

你应该能够从这里拿它。请查看我提供的链接了解更多信息。

相关问题