从Google地图获取经过解析且格式正确的地址

Jay*_*127 3 google-maps google-maps-api-3 ios

我正在尝试在我的iOS应用中使用Google的Maps API服务,将包含地址的字符串转换为正确解析的合法地址.我了解Google的API不会验证该地址是否有效; 我只需要它将字符串解析为一个完整的逻辑地址.

在API的网站上进行了一些挖掘之后,我发现这样做的唯一方法是使用地理编码功能将输入字符串转换为坐标,然后使用反向地理编码将其转换回我可以解析的内容.有没有办法用更少的开销来做到这一点?这样做似乎有点倒退.

示例:347 N佳能博士Beverly Hills,CA 90210.谷歌地图似乎是直观地分离地址不同部分的最佳选择.否则,我冒着处理1040街8号街道成为104街道等问题的风险.我希望能够输入一个大部分格式正确的地址,并让谷歌使用API​​来纠正它并返回一些我可以传递给web服务的东西.

Jos*_*ell 5

我想你想要的NSDataDetector,它是内置于Cocoa Touch的.

它有一个子类型,NSTextCheckingTypeAddress它会尝试为您解析地址.

在示例字符串上使用一个:

NSString * address = @"347 N Canon Dr Beverly Hills, CA 90210";
NSError * err;
NSDataDetector * addrParser = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeAddress
                                                              error:&err];
__block NSDictionary * addressParts;
if( addrParser ){
    [addrParser enumerateMatchesInString:address
                                 options:0
                                   range:(NSRange){0, [address length]}
                              usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) {
                                  addressParts = [result addressComponents];
    }];
}

NSLog(@"%@", addressParts);
Run Code Online (Sandbox Code Playgroud)

生成这本词典:

2014-09-25 20:26:57.747 ParseAddress[56154:60b] {
    City = "Beverly Hills";
    State = CA;
    Street = "347 N Canon Dr";
    ZIP = 90210;
}
Run Code Online (Sandbox Code Playgroud)

文档中列出的可能键.