0

のメソッドで結果(、、など)を正常に取得できlocalityますISOcountryCode。 しかし、どうすれば場所を結果と一致させることができますか?CLGeocoderreverseGeocodeLocation:completionHandler:

例:結果の都市(地域)がの場合、Hangzhou Cityを使用するだけで一致させることができます

if ([placemark.locality isEqualToString:@"Hangzhou City"]) {...}

しかし、ご存知のように、何百万もの都市があり、都市名を1つずつ取得して、ハードコードをアプリに組み込むことは不可能です。

それで、この問題を解決する方法はありますか?または、フレームワークはありますか?または、いくつかのファイルに、の結果と一致する国と都市の名前が含まれていますCLGeocoderか?ファジー座標マッチングソリューションでも問題ありません(つまり、都市には独自の地域があり、座標だけで都市を特定できますが、現時点ではすべての都市の地域エリアを取得する必要があります)。


展開ターゲットiOS5.0

4

1 に答える 1

1

もっと簡単な方法があります。逆GeocodeLocationを使用して場所の情報を取得できます。これがすべての都市の考えで機能するとは限らないことを知っておく必要があります。詳細については、AppleのCLGeocoderクラスリファレンスジオコーディングロケーションデータのドキュメントを確認してください。

したがって、サービスを処理するオブジェクトを作成してオブジェクト化できます

#import <Foundation/Foundation.h>
#import <CoreLocation/CoreLocation.h>

@interface locationUtility : NSObject<CLLocationManagerDelegate>{
  CLLocationManager *locationManager;
  CLPlacemark *myPlacemark;
  CLGeocoder * geoCoder;
}

@property (nonatomic,retain) CLLocationManager *locationManager;

@end

と実装

#import "locationUtility.h"

@implementation locationUtility
@synthesize locationManager;

#pragma mark - Init
-(id)init {
  NSLog(@"locationUtility - init");
  self=[super init];

  locationManager = [[CLLocationManager alloc] init];
  locationManager.delegate = self;
  locationManager.desiredAccuracy = kCLLocationAccuracyBest;
  locationManager.distanceFilter = kCLDistanceFilterNone;
  [locationManager startMonitoringSignificantLocationChanges];
  geoCoder= [[CLGeocoder alloc] init];
  return self;
}

- (void) locationManager:(CLLocationManager *) manager didUpdateToLocation:(CLLocation *) newLocation
            fromLocation:(CLLocation *) oldLocation {
  [geoCoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
     CLPlacemark *placemark = [placemarks objectAtIndex:0];
     myPlacemark=placemark; 
     // Here you get the information you need  
     // placemark.country;
     // placemark.administrativeArea;
     // placemark.subAdministrativeArea;
     // placemark.postalCode];
    }];
}

-(void) locationManager:(CLLocationManager *) manager didFailWithError:(NSError *) error {
  NSLog(@"locationManager didFailWithError: %@", error.description);
}

@end
于 2012-05-03T23:34:51.730 に答える