Как найти ближайшие места, такие как банки, ресторан в iPhone

Я создаю приложение, в котором я получаю текущее местоположение, имя и адрес, широту и долготу, но как найти ближайшие места, такие как банки, ресторан, автобусная остановка, рядом с моим текущим местоположением в iPhone.


person user748001    schedule 29.07.2011    source источник


Ответы (3)


Вы можете использовать сервис Google таким образом и вызывать его в цикле, каждый раз меняя строку pointOfInterest:

CLLocationCoordinate2D coordinate = location.coordinate;
NSString *pointOfInterest = @"banks";
NSString *URLString = [NSString stringWithFormat:@"http://ajax.googleapis.com/ajax/services/search/local?v=1.0&rsz=small&sll=%f,%f&q=%@",coordinate.latitude,coordinate.longitude, pointOfInterest];

URLString = [URLString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLString]];

// Perform request and get JSON back as a NSData object
NSError *error = nil;
NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];
if(error != nil) {
UIAlertView *alert = [[[UIAlertView alloc] initWithTitle:@"Error" 
                                                         message:[error localizedDescription] 
                                                        delegate:self 
                                               cancelButtonTitle:@"Done" 
                                               otherButtonTitles:nil] autorelease]; 
        [alert show];
}
else {
// Get JSON as a NSString from NSData response
    NSString *jsonString = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];
    //Return the values in NSDictionary format  
    SBJsonParser *parser = [[SBJsonParser alloc] init];

    NSDictionary *jsonResponse = [parser objectWithString:jsonString error:nil];
    NSDictionary *responseData = [jsonResponse objectForKey:@"responseData"];
    NSArray *results = [responseData objectForKey:@"results"];
}

Вы можете получить JSON API здесь:

https://github.com/stig/json-framework/

person Bushra Shahid    schedule 29.07.2011

Вам понадобится API, который предоставит вам все это, его нет в стандартном SDK.

person rckoenes    schedule 29.07.2011

У вас должен быть объект, представляющий банк, ресторан или автобус (в примере - вокзал). Вы, вероятно, захотите, чтобы он реализовал протокол MKAnnotation, поскольку вы можете добавить их в MKMapView. Каждому из этих объектов требуется свойство координаты (CLLocationCoordinate2D). Когда я делаю подобные вещи, я также добавляю свойство расстояния (CLLocationDistance). Создавая экземпляры этих объектов в вашем контроллере просмотра, вы должны добавить их в массив.

Теперь, когда приложение пользователя обновляется, вы позволяете каждому объекту вычислять расстояние от этого места до самого себя.

Например:

- (void)calculateDistance:(CLLocation *)location {
    CLLocation *stationLocation = [[CLLocation alloc] initWithLatitude:coordinate.latitude longitude:coordinate.longitude];
    distance = [location distanceFromLocation:stationLocation];
    [stationLocation release];
}

После того, как вы позволите каждому объекту вычислить расстояние, теперь вы можете отсортировать массив с объектами по расстоянию.

[stations sortUsingSelector:@selector(compareDistance:)]

Для этого необходимо, чтобы в ваших объектах был реализован этот метод:

- (NSComparisonResult)compareDistance:(Station *)aStation {
    if (distance < aStation.distance) return NSOrderedAscending;
    if (distance > aStation.distance) return NSOrderedDescending;
    return NSOrderedSame;
}

Теперь у вас должен быть массив с объектами, представляющими банки и т. Д., Отсортированными по расстоянию.

[stations objectAtIndex:0] будет рядом с вашим местоположением.

person Cedric Vandendriessche    schedule 29.07.2011