问题描述
我一定是在文档中遗漏了一些东西,我认为这应该很容易......
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)坐标translateMeters:(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 代码中,它包含 这个链接 显示更准确的计算距离大于地球周长的 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 度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!