计算距一个坐标的新坐标 x 米和 y 度 [英] Calculate new coordinate x meters and y degree away from one coordinate

查看:26
本文介绍了计算距一个坐标的新坐标 x 米和 y 度的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一定在文档中遗漏了一些东西,我认为这应该很容易......

I must be missing somthing out in the docs, I thought this should be easy...

如果我有一个坐标并且想要在某个方向上得到一个 x 米外的新坐标.我该怎么做?

If I have one coordinate and want to get a new coordinate x meters away, in some direction. How do I do this?

我正在寻找类似的东西

-(CLLocationCoordinate2D) translateCoordinate:(CLLocationCoordinate2D)coordinatetranslateMeters:(int) 米translateDegrees:(double)degrees;

谢谢!

推荐答案

遗憾的是,API 中没有提供此类功能,因此您必须自己编写.

Unfortunately, there's no such function provided in the API, so you'll have to write your own.

这个网站给出了几个涉及纬度/经度和样本的计算JavaScript 代码.具体来说,标题为从起点给定距离和方位的目的地点"部分展示了如何计算您所要求的内容.

This site gives several calculations involving latitude/longitude and sample JavaScript code. Specifically, the section titled "Destination point given distance and bearing from start point" shows how to calculate what you're asking.

JavaScript 代码位于该页面的底部,这是将其转换为 Objective-C 的一种可能方法:

The JavaScript code is at the bottom of that page and here's one possible way to convert it to Objective-C:

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

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

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

在 JS 代码中,它包含 this link 显示了更准确的计算对于大于地球周长 1/4 的距离.

In the JS code, it contains this link which shows a more accurate calculation for distances greater than 1/4 of the Earth's circumference.

另请注意,上述代码接受以公里为单位的距离,因此请务必在通过前将米除以 1000.0.

Also note the above code accepts distance in km so be sure to divide meters by 1000.0 before passing.

这篇关于计算距一个坐标的新坐标 x 米和 y 度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆