iphone - 使用距离位置 : on none CLLocation objects?

标签 iphone objective-c cocoa-touch

我定义了一个名为 FGLocation 的类,它符合 MKAnnotation 协议(protocol),我想要做的是测量其中两个对象之间的距离。我注意到我可以使用 distanceFromLocation: 方法,该方法被定义为 CLLocation 类的方法。正如您在下面看到的,我正在创建两个临时 CLLocation 对象来进行计算,但我不禁认为我可能错过了更好/更简单的方法。有人对我正在做的事情或者我如何做得更好有任何意见吗?

// IS THERE A BETTER WAY TO DO THIS?
FGLocation *root = [annotations objectAtIndex:counter-1];
FGLocation *leaf = [annotations objectAtIndex:counter];

CLLocation *rootLocation = [[CLLocation alloc] initWithLatitude:[root coordinate].latitude longitude:[root coordinate].longitude];
CLLocation *leafLocation = [[CLLocation alloc] initWithLatitude:[leaf coordinate].latitude longitude:[leaf coordinate].longitude];                                
CLLocationDistance thisDistance = [rootLocation distanceFromLocation:leafLocation];
[rootLocation release];
[leafLocation release];

注意:我的 FGLocation 对象定义为(见下文),我在文档中注意到我不应该子类化 CLLocation。

@interface FGLocation : NSObject <MKAnnotation> {

最佳答案

我认为您正在做的事情是一种公平的方法,但可能存在异常(exception),如果您经常或在很多点上这样做,您可能希望实现某种缓存机制/阈值以进行重新计算。精确计算距离涉及非欧几里得几何,并且计算量大。 http://en.wikipedia.org/wiki/Haversine_formula

根据点在地球上的位置以及精度是否非常重要,您还可以通过假装在欧几里得空间中工作并利用毕达哥拉斯定理来捏造事实。我已经使用这种方案在大型数据集上创建了一个粗略过滤器,然后对通过过滤器的点进行了更精确的计算。

关于iphone - 使用距离位置 : on none CLLocation objects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796996/

相关文章:

iphone - 使用 iPhone 加速度计模拟摩托车加速度

iphone - 如何根据时间延迟停止主线程序列?

ios - GCD 异步串行队列 - 可以限制队列大小吗?

ios - 将图像从 UIImagePickerController 传递到另一个 ViewController

ios - 在 UITableView 中激活时调整 UISearchBar

iphone - 获取 NSUserDefaults 时崩溃

objective-c - 限制UIPageViewController(带TransitionStyleScroll)平移手势到某个区域

iphone - 如何检测 "would like to use your current location"选择 Action ?

iphone - 为什么我的代码会泄露?

iphone - 如何处理这个NSString?