从谷歌地图获取已解析和正确格式化的地址

3
我正在尝试在我的iOS应用程序中使用Google Maps API服务,将包含地址的字符串转换为经过适当解析和合法化的地址。我知道Google的API不会验证地址是否有效;我只需要将字符串解析成完整的、合乎逻辑的地址。
在API网站上搜索了一番后,我发现唯一的方法是使用地理编码功能将输入字符串转换为坐标,然后使用反向地理编码将其转换回我可以解析的东西。有没有更少的开销的方法呢?这种方式似乎有点反复无常。
例如:347 N Canon Dr Beverly Hills, CA 90210。Google地图似乎是直观地分离地址不同部分的最佳选择。否则,我可能会遇到像1040 8th street变成104 08th street之类的问题。我希望能够输入大部分格式正确的地址,并让google使用API进行校正并返回我可以传递给网络服务的内容。

嗯,这很棘手。我认为除了你描述的那种方法,没有其他的方式... :/ - nburk
1
你能给一个你正在使用的字符串的例子吗?你需要使用谷歌地图吗,还是这只是目前看起来最好的解决方案? - jscs
示例放置在问题末尾。 - JayB127
1
我明白了,所以你想最终得到一个包含地址部分的字典。你是否知道NSDataDetector - jscs
我还没有研究过这个,但是我发现它继承自NSRegularExpression,而我知道这种方法容易出现错误,而我正试图避免在正确分离地址部分时出现这种错误。也许这个对象更适合这个任务,所以我会进行研究。感谢您的提示! - JayB127
1个回答

5

我认为你需要使用内置于Cocoa Touch的NSDataDetector

它有一个子类型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;
}

可能的密钥列在文档中(链接)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接