Search code examples
iosiphonecllocationmanagercllocationdistance

Giving the different distance between two points using wifi and 3G


I am calculating the distance between two locations like below

             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;

But it giving the different result when i connect to wifi and 3G network.how to get the same result for both.


Solution

  • You invariably will not get the same location for both. In fact, if you come back to the exact same location tomorrow and turn on location services, you might not get the same latitude and longitude even if you stayed with the same technology.

    The latitude and longitude you receive from a CLLocationManager is not an exact science. In fact, if you look at the original CLLocation objects you received, you'll notice that there is a horizontalAccuracy property that reflects how accurate/inaccurate the coordinate could be. When you first start location services, you'll even see multiple locations come in, generally with increasing accuracy.

    But it will never be perfect and you shouldn't expect it to be. This is one of the reasons why it's important to test location-aware code on a real device, because the simulator will lull one into a false sense of absolute accuracy which doesn't exist in the real world. You should write code that anticipates this. And, if nothing else, you should start considering horizontalAccuracy of the objects you receive from the location manager.