【问题标题】:How to combine individual parts of address within a place dictionary for geocoding?如何在地理编码的地方字典中组合地址的各个部分?
【发布时间】:2013-09-10 05:52:09
【问题描述】:

目前,我有一个地方字典,其中包含典型地址的所有不同部分的值,然后我通过地理编码器传递。它看起来像这样:

[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;
    }
}];

我可以将它们合并为一个字符串以通过地理编码器,而不是为地址的每个单独部分设置一个单独的字典条目吗?这种效果的东西:

[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]; 
}

【问题讨论】:

  • 这也行..
  • 它在终端中给了我“位置错误”。

标签: ios objective-c geocoding


【解决方案1】:

在为 Street、City、State 和 Zip 键获取四个值后,您可以手动创建一个附加键并将完整地址存储在其中,否则您可以将所有这四个值存储在四个不同的字符串中,然后将它们集中保存以用于任何键字典。

【讨论】:

    【解决方案2】:

    我想通了。我只是简单地使用了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]; 
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-29
      • 1970-01-01
      • 2021-07-19
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多