Iphone 在非CLLocation对象上使用distanceFromLocation:?

Iphone 在非CLLocation对象上使用distanceFromLocation:?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我已经定义了一个名为FGLocation的类,它符合MKAnnotation协议,我试图做的是测量这两个对象之间的距离。我注意到我可以使用distanceFromLocation方法:它被定义为CLLocation类的方法。正如您在下面看到的,我正在创建两个temp CLLocation对象来进行计算,但我不禁想,我可能缺少了一个更好/更简单的方法。有没有人对我正在做什么或我如何做得更好有任何评论 // IS THERE A BETTER WAY TO DO THIS? FGLocation *

我已经定义了一个名为FGLocation的类,它符合MKAnnotation协议,我试图做的是测量这两个对象之间的距离。我注意到我可以使用distanceFromLocation方法:它被定义为CLLocation类的方法。正如您在下面看到的,我正在创建两个temp 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> {
@接口位置:NSObject{

我认为您所做的是一种公平的方法,但可能的例外是,如果您经常这样做或在很多点上这样做,您可能希望实现某种缓存机制/阈值来重新计算。精确计算距离涉及非欧几何学,并且计算成本很高。


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

嗨,这是一个公平的点,在这个阶段,只有很少的点,大概总共36个。你的权利是,我不需要担心地球的曲率,因为这些点都是非常局部的(在大约50公里的范围内)公平地说,我不会为超精确而烦恼,100米以内就可以了。我主要担心的是,我是在以一种迂回的方式进行计算,缺少了一些专业技术,我可以直接在FGLocation对象上调用distanceFromLocation,而无需创建两个临时CLLocation对象。非常感谢。