按距离排序表(经度和纬度)

Fab*_*lva 2 sorting location distance tableview ios

我正在通过JSON获得这样的价值观:

{
        id = 1;
        latitude = "-23.0002";
        longitude = "-43.2438";
        name = Vips;
}

{
        id = 2;
        latitude = "-22.9283";
        longitude = "-43.1746";
        name = Elegance;
}
Run Code Online (Sandbox Code Playgroud)

...

我需要在tableview中显示这些值,按距离到用户位置排序.并且必须始终更新此值.我怎样才能做到这一点?

displayObject是一个NSMutableArray,我从WS中获取值.在viewWillappear我试图做:

NSArray *rawData = [NSArray arrayWithArray:displayObject];

rawData = [rawData sortedArrayUsingComparator: ^(id a, id b) {

    CLLocationDistance dist_a= [[a objectForKey:@"coordinate"] distanceFromLocation: locAtual];
    CLLocationDistance dist_b= [[b objectForKey:@"coordinate"] distanceFromLocation: locAtual];
    if ( dist_a < dist_b ) {
        return (NSComparisonResult)NSOrderedDescending;
    } else if ( dist_a > dist_b) {
        return (NSComparisonResult)NSOrderedDescending;
    } else {
        return (NSComparisonResult)NSOrderedSame;
    }
}];
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我只有纬度和经度.我没有"坐标".有人?

谢谢!!

Anu*_*das 5

如果要计算距离,请将其与存储在数组中的数据一起添加,然后根据距离进行排序.

for (int idx = 0; idx<[displayObject count];idx++) {

    NSMutableDictionary *dict = [displayObject[idx] mutableCopy];
    CLLocationDegrees latitude = [dict[@"latitude"] doubleValue];
    CLLocationDegrees longitude = [dict[@"longitude"] doubleValue];
    CLLocation *location = [[CLLocation alloc]initWithLatitude:latitude longitude:longitude];
    CLLocationDistance distance = [userLocation distanceFromLocation:location];
    //Storing as string since latitude and longitude is also string values
    //Since its a dictionary storing as NSNumber is better
    dict[@"distance"] = [@(distance) stringValue];

    displayObject[idx] = dict;

}

//sorting based on distance
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"distance" ascending:YES];
[displayObject sortUsingDescriptors:@[descriptor]];
Run Code Online (Sandbox Code Playgroud)