Как найти ближайшие места, такие как банки, ресторан в iPhone - PullRequest
0 голосов
/ 29 июля 2011

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

Ответы [ 3 ]

2 голосов
/ 29 июля 2011

Вы можете использовать сервис 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/

0 голосов
/ 29 июля 2011

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

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

Например:

- (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] будет близко к вашему местоположению.

0 голосов
/ 29 июля 2011

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

...