0

現時点では、典型的な住所のさまざまな部分すべての値を含む場所の辞書があり、それをジオコーダーに渡します。次のようになります。

[self.placeDictionary setValue:@"166 Bovet Rd" forKey:@"Street"];
[self.placeDictionary setValue:@"San Mateo"  forKey:@"City"];
[self.placeDictionary setValue:@"CA" forKey:@"State"];
[self.placeDictionary setValue:@"94402" forKey:@"ZIP"];

CLGeocoder *geocoder = [[CLGeocoder alloc] init];
[geocoder geocodeAddressDictionary:self.placeDictionary completionHandler:^(NSArray *placemarks, NSError *error) {
    if([placemarks count]) {
        CLPlacemark *placemark = [placemarks objectAtIndex:0];
        CLLocation *location = placemark.location;
        CLLocationCoordinate2D coordinate = location.coordinate;
        PFGeoPoint* userLocation = [PFGeoPoint geoPointWithLatitude:coordinate.latitude longitude:coordinate.longitude];
        NSLog(@"%f,%f", userLocation.latitude, userLocation.longitude); 
    } else {
        NSLog(@"location error");
        return;
    }
}];

住所の個々の部分ごとに個別の辞書エントリを用意する代わりに、それらを 1 つの文字列にマージして、ジオコーダを通過させることはできますか? この効果の何か:

[self.placeDictionary setValue:@"166 Bovet Rd San Mateo CA 94402" forKey:@"Address"]; 

これを行う理由は、ユーザーがジオコーディングのために場所を入力することになっている検索バーがあり、それを分割して住所の個々の部分を抽出することができないためです。ジオコーディングのために、そのように住所全体を渡すことができますか?

編集:次のコードを試してみましたが、端末は「位置エラー」を出力します:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    [self.placeDictionary setValue:@"166 Bovet Rd San Mateo CA 94402" forKey:@"Address"]; 

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressDictionary:self.placeDictionary completionHandler:^(NSArray *placemarks, NSError *error) {
        if([placemarks count]) {
            CLPlacemark *placemark = [placemarks objectAtIndex:0];
            CLLocation *location = placemark.location;
            CLLocationCoordinate2D coordinate = location.coordinate;
            PFGeoPoint* userLocation = [PFGeoPoint geoPointWithLatitude:coordinate.latitude longitude:coordinate.longitude];
            NSLog(@"%f,%f", userLocation.latitude, userLocation.longitude); 
        } else {
            NSLog(@"location error");
            return;
        }
    }];

    [self.view endEditing:YES]; 
}
4

2 に答える 2

0

キーStreet、City、State、Zipの4つの値を取得した後、追加のキーを手動で作成し、完全な住所をその中に保存することができます。それ以外の場合は、これら4つの値すべてを4つの異なる文字列に保存し、ディクショナリの任意のキーにまとめて保存できます.

于 2013-09-10T06:14:44.033 に答える
0

私はそれを考え出した。geocodeAddressString代わりにメソッドを使用しただけです。

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar{
    NSString* address = [NSString stringWithFormat:@"166 Bovet Road San Mateo CA 94402"];

    CLGeocoder *geocoder = [[CLGeocoder alloc] init];
    [geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {
        if([placemarks count]) {
            CLPlacemark *placemark = [placemarks objectAtIndex:0];
            CLLocation *location = placemark.location;
            CLLocationCoordinate2D coordinate = location.coordinate;
            PFGeoPoint* userLocation = [PFGeoPoint geoPointWithLatitude:coordinate.latitude longitude:coordinate.longitude];
            NSLog(@"%f,%f", userLocation.latitude, userLocation.longitude); 
        } else {
            NSLog(@"location error");
            return;
        }
    }];

    [self.view endEditing:YES]; 
}
于 2013-09-10T06:20:45.120 に答える