2011-12-15 16 views
7

Tôi đang cố gắng sử dụng (chuyển tiếp) mã hóa địa lý bằng cách sử dụng API CLLocationManager mới trong iOS 5 và không có bất kỳ may mắn nào.CLLocationManager geocodeAddressString: inRegion không hoạt động để hạn chế vùng (ios5)

Tôi đang chỉ định khu vực dựa trên vị trí hiện tại, nhưng nó cho tôi kết quả ở phía bên kia của thế giới.

//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);  

    } 
}]; 

Và tất cả tôi nhận được là:

> 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 
> 
> ... 

Bất kỳ ý tưởng:

  1. Liệu nó nghĩ tôi đang ở New Delhi? (Tôi nghĩ rằng câu trả lời là không - vì một tìm kiếm cho "All Star Donuts" với inRegion cùng đặt tôi ở Thái Lan

  2. Tôi lạm dụng "inRegion"

  3. Liệu tác phẩm này với bất cứ ai bởi vì nó sẽ là tuyệt vời nếu và khi nó

+0

Tôi tìm thấy một giải pháp cho vấn đề này bằng cách sử dụng phương pháp 'geocodeAddressString: completionHandler:' thay thế. Hãy xem [giải pháp của tôi] (http://stackoverflow.com/questions/10202550/clgeocoder-returning-locations-in-other-countries/13632049#13632049) với một câu hỏi rất giống nhau. – msoler

Trả lời

0

Ok, câu trả lời.

  1. không, nó không. nó chỉ sử dụng khu vực như nơi để tìm kiếm đầu tiên. Từ API:

    Chỉ định khu vực cho phép bạn ưu tiên tập hợp kết quả trả về cho vị trí gần một khu vực địa lý cụ thể, thường là vị trí hiện tại của người dùng.

  2. Tất cả đều ổn.

  3. Đối với yêu cầu "starbucks" nó trả tôi

    Got Dấu vị trí: Starbuck Dr, Sausalito CA 94.965, Hoa Kỳ @ < + 37,86315000, -122,57986000> +/- 100.00m, vùng (định danh < 37,86315000, -122.57986000> bán kính 282,92) < + 37.86315000, -122.57986000> bán kính 282.92m

vì vậy có vẻ như nó hoạt động.

Đề xuất của tôi là kiểm tra khoảng cách giữa trung tâm khu vực và giữa dấu vị trí của bạn, được trả về từ máy chủ.

+0

Cảm ơn - bạn biết nó hoạt động chính xác cho bạn; Tôi không thể nhận được bất kỳ kết quả tốt hơn và chuyển sang sử dụng API địa điểm Google thay thế (cuối cùng đã nhận được rằng để làm việc). Bất kỳ cơ hội nào bạn có thể thử "Citibank" thay vì Starbucks và xem bạn có nhận được một cái ở Sausalito (và không phải New Delhi?) – snarshad

+0

tôi đã cố gắng tìm kiếm Citibank, cùng một kết quả như của bạn –