0

アプリで以前に取得したLat/Long値からジオコードの場所を逆ジオコーディングしようとしています。この座標から、都市名、国名、ISOを検索したいと思います。

現在、CLLocationManagerを使用して、次のコードで実際の位置情報を取得しています。

//Auto geolocation and find city/country
locationManager.delegate=self;

//Get user location
[locationManager startUpdatingLocation];
[self.geoCoder reverseGeocodeLocation: locationManager.location completionHandler: 
 ^(NSArray *placemarks, NSError *error) {

     //Get nearby address
     CLPlacemark *placemark = [placemarks objectAtIndex:0];

     //String to hold address
     locatedAtcountry = placemark.country;
     locatedAtcity = placemark.locality;
     locatedAtisocountry = placemark.ISOcountryCode;

     //Print the location to console
     NSLog(@"Estas en %@",locatedAtcountry);
     NSLog(@"Estas en %@",locatedAtcity);
     NSLog(@"Estas en %@",locatedAtisocountry);

     [cityLabel setText:[NSString stringWithFormat:@"%@,",locatedAtcity]];
     [locationLabel setText:[NSString stringWithFormat:@"%@",locatedAtcountry]];

     //Set the label text to current location
     //[locationLabel setText:locatedAt];

 }];

それは完全に機能していますが、実際のコードのように現在の場所ではなく、デバイスにすでに保存したLong / Lat値から同じことを行うことは可能ですか?

更新と解決策:

答えてくれたMarkに感謝します。私はついに次のコードを使用して、保存された座標から情報を取得します。

 CLLocation *location = [[CLLocation alloc] initWithLatitude:37.78583400 longitude:-122.40641700];

[self.geoCoder reverseGeocodeLocation: location completionHandler: 
 ^(NSArray *placemarks, NSError *error) {

     //Get nearby address
     CLPlacemark *placemark = [placemarks objectAtIndex:0];

     //String to hold address
     locatedAtcountry = placemark.country;
     locatedAtcity = placemark.locality;
     locatedAtisocountry = placemark.ISOcountryCode;

     //Print the location to console
     NSLog(@"Estas en %@",locatedAtcountry);
     NSLog(@"Estas en %@",locatedAtcity);
     NSLog(@"Estas en %@",locatedAtisocountry);

     [cityLabel setText:[NSString stringWithFormat:@"%@",locatedAtcity]];
     [locationLabel setText:[NSString stringWithFormat:@"%@",locatedAtcountry]];

     //Set the label text to current location
     //[locationLabel setText:locatedAt];

 }];
4

1 に答える 1

2

はい。CLLocation保存したlat/lon値を使用してメソッドを使用してオブジェクトを作成しinitWithLatitude:longitude:、それをに渡しreverseGeocodeLocation:ます。

startUpdatingLocationを呼び出すと、CLLocationManagerDelegateメソッドの実装が呼び出されるため、これが機能していると言って驚いています(ただし、シミュレーターを使用している場合は、位置情報サービスがシミュレートされます。これが理由である可能性があります)locationManager:didUpdateToLocation:fromLocation:。(これらの権利を実装しましたか?)この(および他の)デリゲートメソッドが呼び出された場合にのみ、ユーザーの場所を正常に判別できたと確信できます。

CLLocationManagerDelegateAppleが文書化したプロトコルと位置情報サービスのベストプラクティスを確認することをお勧めします。

于 2012-09-06T19:04:42.277 に答える