iOS中的位置之间的距离是否有误?

时间:2014-01-27 07:23:42

标签: ios objective-c mapkit cllocationdistance

瞄准使用以下方法找出我当前位置与NSMutableArray值中存储的位置(纬度和经度)之间的距离。

但是我的距离越来越远......请帮助..

我的代码

    -(void)getDistancetoShow:(NSMutableArray *)newArray{

    CLLocationCoordinate2D coordinateUser = [self getLocation];


    float _lat,_long;


  first_Loc = [[CLLocation alloc] initWithLatitude:coordinateUser.latitude longitude:coordinateUser.longitude];

    for(int p=0;p<[[newArray1 valueForKey:@"Name"] count];p++){

        _lat=[[[newArray1 valueForKey:@"Latitude"] objectAtIndex:p]floatValue];
         _long=[[[newArray1 valueForKey:@"Longitude"] objectAtIndex:p]floatValue];
        second_loc=[[CLLocation alloc] initWithLatitude:_lat longitude:_long];


        showDistance=[second_loc distanceFromLocation:first_Loc]/1000;

        [distanceToDispaly addObject:[NSString stringWithFormat:@"%.2f KM",showDistance]];
    }

     NSLog(@"first=%@, second=%@", first_Loc, second_loc);


}

阵列中的纬度

(     “47.0735010448824”     “47.0564688100431”     “47.0582514311038”,     “47.0587640538326”     “47.0569233603454”     “47.0541853132569”     “47.0542029215138”     “47.0544259594592”     “47.0560264547367”     “47.0576532159776”,     “47.0550023679218”,     “47.0342030007379”     “47.0746263896213”     “47.0740256635512”,     “47.0524765957921”     “47.0606287049051”     “47.0539691521825”     “47.0542799159057”     “47.0651001682846”     “47.0536948902097”     “47.0525973335309”     “47.0389265414812”     “47.0761811267051”     “47.0668801601942”     “47.0614859079241”     “47.0579433468181”     “47.0718998779465” )

和数组中的经度

(     “21.9154175327011”     “21.9312065669748”     “21.9337414545594”     “21.9346772505188”,     “21.9300587945685”,     “21.9363460105132”     “21.9362081709222”     “21.9343042603097”     “21.939485335992”     “21.9320057169724”     “21.9300799002643”     “21.9485373571669”     “21.9310667367526”     “21.9318507902135”     “21.9192195298473”     “21.9195273899529”     “21.9329595191441”     “21.9292015418841”     “21.9219452321208”     “21.9098849252041”     “21.9074768948561”     “21.9424499491422”     “21.9151458954504”     “21.9304346568769”     “21.9305973807911”     “21.9331511189507”     “21.9159872752442” )

但实际距离类似于9 * * ** ,但现在正在进行5 * **

3 个答案:

答案 0 :(得分:1)

CLLocation为您提供两个地方之间的乌鸦(直线)距离。我认为你的乌鸦距离很远。

首先取两个坐标的坐标,找出它们之间的距离。 然后在这两个坐标之间搜索乌鸦距离。

希望这会有所帮助

答案 1 :(得分:1)

获得两个坐标后,您可以使用这段代码计算它们之间的距离(取自here):

- (NSNumber*)calculateDistanceInMetersBetweenCoord:(CLLocationCoordinate2D)coord1 coord:(CLLocationCoordinate2D)coord2 {
    NSInteger nRadius = 6371; // Earth's radius in Kilometers
    double latDiff = (coord2.latitude - coord1.latitude) * (M_PI/180);
    double lonDiff = (coord2.longitude - coord1.longitude) * (M_PI/180);
    double lat1InRadians = coord1.latitude * (M_PI/180);
    double lat2InRadians = coord2.latitude * (M_PI/180);
    double nA = pow ( sin(latDiff/2), 2 ) + cos(lat1InRadians) * cos(lat2InRadians) * pow ( sin(lonDiff/2), 2 );
    double nC = 2 * atan2( sqrt(nA), sqrt( 1 - nA ));
    double nD = nRadius * nC;
    // convert to meters
    return @(nD*1000);
}

希望这有帮助!

答案 2 :(得分:0)

要在Swift中使用以下数据,请使用以下减少方法。

此处locationsCLLocation类型的数组。

 let calculatedDistance = locations.reduce((0, locations[0])) { ($0.0 + $0.1.distance(from: $1), $1)}.0