使用wifi和3G给出两点之间的不同距离

时间:2015-02-17 13:57:10

标签: ios iphone cllocationmanager cllocationdistance

我正在计算下面两个位置之间的距离

             CLLocation *locA = [[CLLocation alloc] initWithLatitude:lat longitude:lon];

            CLLocationCoordinate2D coordinate = [self getLocation];

            CLLocation *locB = [[CLLocation alloc] initWithLatitude:coordinate.latitude   longitude:coordinate.longitude];

            CLLocationDistance distance = [locA distanceFromLocation:locB];


            CLLocationDistance kilometers = distance / 1000.0;

但是当我连接到wifi和3G网络时它给出了不同的结果。如何为两者获得相同的结果。

2 个答案:

答案 0 :(得分:2)

你们两个都不会获得相同的位置。事实上,如果你明天回到完全相同的位置并启用位置服务,即使你使用相同的技术,也可能无法获得相同的纬度和经度。

您从CLLocationManager获得的纬度和经度并不是一门精确的科学。实际上,如果您查看收到的原始CLLocation个对象,您会注意到有一个horizontalAccuracy属性可以反映坐标的精确度/准确度。当您第一次启动位置服务时,您甚至会看到多个位置进入,通常会提高准确性。

但它永远不会是完美的,你不应该期待它。这是为什么在真实设备上测试位置感知代码很重要的原因之一,因为模拟器将使一个人陷入绝对准确性的错误感,这在现实世界中是不存在的。你应该编写预期的代码。而且,如果不出意外,您应该开始考虑从位置管理器收到的对象的horizontalAccuracy

答案 1 :(得分:0)

您发布的代码行没有错, 唯一可以让你在2种情况(wifi和3g)中出现差异的行就是你的方法[self getLocation]

我想你会得到设备位置。

在这种情况下,您的设备可能会同时使用gps和wifi访问来计算其位置,因此可能会出现很小的差异(您可能已经注意到某些地图应用程序建议您打开wifi以获得更高的准确度)

反正 在您的getLocation方法中,尝试在使用时添加更精确的准确度 CLLocationManager

我试过这个:

- (CLLocationCoordinate2D )getLocation {
    self.locationManager = [[CLLocationManager alloc] init];
    locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];
    CLLocationCoordinate2D startCoord = CLLocationCoordinate2DMake(locationManager.location.coordinate.latitude, locationManager.location.coordinate.longitude);

    return startCoord;
}

并且准确性足以使3G / wifi之间没有差异 但你可以把它设置为

kCLLocationAccuracyBestForNavigation;
kCLLocationAccuracyBest;
kCLLocationAccuracyNearestTenMeters;

PS 我希望你使用带GPS的设备,当然......