10

から都市と国を取得する方法を見つけようとして、インターネットのいたるところにいましたCLGeocoder。経度と緯度は簡単に取得できますが、都市と国の情報が必要であり、非推奨のメソッドなどに遭遇し続けています。何かアイデアはありますか? 基本的には場所を取得する必要があり、次にNSString国とNSString都市を表す が必要なので、それらを使用して詳細情報を検索したり、ラベルに貼り付けたりできます。

4

2 に答える 2

18

用語を少し修正する必要があります。CLGeocoder (およびほとんどのジオコーダー) は「都市」自体を提供しません。「行政区域」、「準行政区域」などの用語を使用します。CLGeocoder オブジェクトは返されます。必要な情報を照会できる CLPlacemark オブジェクトの配列。CLGeocoder を初期化し、位置と完了ブロックを指定して reverseGeocodeLocation 関数を呼び出します。次に例を示します。

    if (osVersion() >= 5.0){

    CLGeocoder *reverseGeocoder = [[CLGeocoder alloc] init];

    [reverseGeocoder reverseGeocodeLocation:self.currentLocation completionHandler:^(NSArray *placemarks, NSError *error)
     {
         DDLogVerbose(@"reverseGeocodeLocation:completionHandler: Completion Handler called!");
         if (error){
             DDLogError(@"Geocode failed with error: %@", error);
             return;
         }

         DDLogVerbose(@"Received placemarks: %@", placemarks);


         CLPlacemark *myPlacemark = [placemarks objectAtIndex:0];
         NSString *countryCode = myPlacemark.ISOcountryCode;
         NSString *countryName = myPlacemark.country;
         DDLogVerbose(@"My country code: %@ and countryName: %@", countryCode, countryName);

     }];
    }

ここで、CLPlacemark には「city」プロパティがないことに注意してください。プロパティの完全なリストは、次の場所にあります: CLPlacemark クラス リファレンス

于 2013-01-29T06:07:49.183 に答える
0

これを使用して、都市、国、および iso 国コードを取得できます (Swift 5):

private func getAddress(from coordinates: CLLocation) {
    CLGeocoder().reverseGeocodeLocation(coordinates) { placemark, error in
        guard error == nil,
            let placemark = placemark
        else
        {
            // TODO: Handle error
            return
        }

        if placemark.count > 0 {
            let place = placemark[0]
            let city = place.locality
            let country = place.country
            let countryIsoCode = place.isoCountryCode
        }
    }
}
于 2019-10-01T18:06:42.367 に答える