CLLocationManager geocodeAddressString: inRegion не работает для ограничения области (ios5) - PullRequest
7 голосов
/ 15 декабря 2011

Я пытаюсь использовать (пересылать) геокодирование с использованием новых API-интерфейсов CLLocationManager в iOS 5, и мне не везет.

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

//CLLocation *currentloc is set to the current location when I get in here (<+37.78583400,-122.40641700>)
CLRegion *region = [[CLRegion alloc] initCircularRegionWithCenter:[currentloc coordinate] radius:5000 /*meters*/ identifier:@"You are here"];
// Region is now: (identifier You are here) <+37.78583400,-122.40641700> radius 5000.00m

NSString *addressString = @"Citibank"; //for example
[geoCoder geocodeAddressString:addressString inRegion:region completionHandler:^(NSArray* placemarks, NSError* error){
    for (CLPlacemark* aPlacemark in placemarks)
    {                    // Process the placemark.
        NSLog(@"Got Placemark : %@", aPlacemark);     

    }
}];

И все, что я получаю, это:

> 2011-12-14 15:50:49.882 [12377:12503] Got Placemark : Citibank, New
> Delhi, Delhi, India @ <+28.63470640,+77.22010140> +/- 100.00m, region
> (identifier <+28.63517750,+77.21878050> radius 154.35)
> <+28.63517750,+77.21878050> radius 154.35m
> 
> 2011-12-14 15:50:49.883[12377:12503] Got Placemark : CitiBank, Noida,
> Uttar Pradesh, India @ <+28.58157180,+77.32408380> +/- 100.00m, region
> (identifier <+28.58161950,+77.32315050> radius 154.41)
> <+28.58161950,+77.32315050> radius 154.41m
> 
> 2011-12-14 15:50:49.885 [12377:12503] Got Placemark : Citibank, New
> Delhi, Delhi, India @ <+28.53627320,+77.21128390> +/- 100.00m, region
> (identifier <+28.53630050,+77.21054050> radius 154.46)
> <+28.53630050,+77.21054050> radius 154.46m
> 
> ...

Любые идеи:

  1. Это думает, что я в Нью-Дели?(Я думаю, что ответ - нет, потому что поиск «Все звездные пончики» с тем же inRegion ставит меня в Таиланд

  2. Неужели я неправильно использую "inRegion"

  3. Работает ли это на кого-то? Потому что это будет здорово, если и когда это будет

1 Ответ

0 голосов
/ 21 декабря 2011

Хорошо, ответы.

  1. Нет, это не так. Он просто использует регион как место для поиска в первую очередь. Из API:

    Указание региона позволяет установить приоритет возвращаемого набора результатов для местоположений, которые близки к некоторой конкретной географической области, которая обычно является текущим местоположением пользователя.

  2. Все в порядке.

  3. По запросу "Starbucks" он возвращает меня

    Получил метку: Starbuck Dr, Sausalito CA 94965, США @ <+ 37.86315000, -122.57986000> +/- 100.00 м, регион (идентификатор <+ 37.86315000, -122.57986000> радиус 282.92) <+ 37.86315000, -122.57986000> радиус 282.92m

кажется, это работает.

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

...