我遇到了getDistanceFrom和distanceFromLocation的问题.不推荐使用getDistanceFrom iOS 4.1和distanceFromLocation在3.1.3中不可用,我该如何解决这个问题.
还有其他人遇到过这个问题吗?
我的代码目前是:
CLLocationDistance kilometers;
if ([currentLocation respondsToSelector: @selector(distanceFromLocation:)])
{
kilometers = [currentLocation distanceFromLocation:previousLocation] / 1000;
}
else
{
//kilometers = [currentLocation getDistanceFrom:previousLocation] / 1000;
kilometers = [currentLocation performSelector: @selector(getDistanceFrom:) withObject: previousLocation] / 1000;
}
Run Code Online (Sandbox Code Playgroud)
根据我编译的iOS,我会在行上获得"无效的二进制操作数":
kilometers = [currentLocation distanceFromLocation:previousLocation] / 1000;
kilometers = [currentLocation performSelector: @selector(getDistanceFrom:) withObject: previousLocation] / 1000;
Run Code Online (Sandbox Code Playgroud)
问候,斯蒂芬
Tom*_*ing 14
CédricLuthi 有一篇博文,对此有很好的解决方案.
简而言之,您需要在main.m中输入以下内容并确保#import <objc/runtime.h>
:
Method getDistanceFrom = class_getInstanceMethod([CLLocation class], @selector(getDistanceFrom:));
class_addMethod([CLLocation class], @selector(distanceFromLocation:), method_getImplementation(getDistanceFrom), method_getTypeEncoding(getDistanceFrom));
Run Code Online (Sandbox Code Playgroud)
然后,您可以distanceFromLocation:
在任何操作系统上使用
Pav*_*eev 11
我用自己的方法.它速度更快,可以在iOS 3.x和iOS 4.x上使用.
- (double)distanceFrom:(CLLocationCoordinate2D)locationA to:(CLLocationCoordinate2D)locationB
{
double R = 6368500.0; // in meters
double lat1 = locationA.latitude*M_PI/180.0;
double lon1 = locationA.longitude*M_PI/180.0;
double lat2 = locationB.latitude*M_PI/180.0;
double lon2 = locationB.longitude*M_PI/180.0;
return acos(sin(lat1) * sin(lat2) +
cos(lat1) * cos(lat2) *
cos(lon2 - lon1)) * R;
}
归档时间: |
|
查看次数: |
5827 次 |
最近记录: |