我正在尝试在我的iOS应用中使用Google的Maps API服务,将包含地址的字符串转换为正确解析的合法地址。我了解Google的API不会验证该地址有效;我只需要它将字符串解析为一个完整的逻辑地址。
在API的网站上进行了一些挖掘之后,我发现这样做的唯一方法是使用地理编码功能将输入字符串转换为坐标,然后使用反向地理编码进行转换它回到我可以解析的东西。有没有办法用更少的开销来做到这一点?这样做似乎有点倒退。
示例:347 N佳能博士Beverly Hills,CA 90210.谷歌地图似乎是直观地分离地址不同部分的最佳选择。否则,我冒着处理1040街8号街道成为104街道等问题的风险。我希望能够输入一个大部分格式正确的地址,并让谷歌使用API来纠正它并返回一些我可以传递给web服务的东西。
答案 0 :(得分: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);
制作此词典:
2014-09-25 20:26:57.747 ParseAddress[56154:60b] {
City = "Beverly Hills";
State = CA;
Street = "347 N Canon Dr";
ZIP = 90210;
}
列出in the docs的可能键。