現時点では、典型的な住所のさまざまな部分すべての値を含む場所の辞書があり、それをジオコーダーに渡します。次のようになります。
[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];
}