【问题标题】:Getting a parsed and properly formatted address from Google Maps从 Google 地图获取已解析且格式正确的地址
【发布时间】:2014-11-20 17:03:52
【问题描述】:

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

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

示例:347 N Canon Dr Beverly Hills, CA 90210。Google 地图似乎是直观区分地址不同部分的最佳选择。否则,我冒着处理诸如 1040 8th street 变成 104 08th street 或类似问题的风险。我希望能够输入一个大部分格式正确的地址,并让谷歌使用 API 来更正它并返回一些我可以传递给网络服务的东西。

【问题讨论】:

  • 嗯,这很棘手。我认为没有比 on etha toyu 描述的其他方式...:/
  • 你能举一个你开始的字符串的例子吗?您需要使用 Google 地图,还是目前看来最好的解决方案?
  • 问题末尾有详细说明的示例
  • 我明白了,所以你希望得到一个包含地址部分的字典之类的东西。你知道NSDataDetector吗?
  • 我没有,这很有趣,但我看到它继承自 NSRegularExpression,我知道它很容易受到我在正确分隔地址部分时试图避免的那种错误的影响.也许这个物体更适合它,所以我要去研究它。感谢您的提示!

标签: ios google-maps google-maps-api-3


【解决方案1】:

我认为您需要 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 列出的可能键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-07
    • 1970-01-01
    • 1970-01-01
    • 2018-09-14
    • 2012-10-01
    • 2023-03-10
    • 2013-05-06
    • 1970-01-01
    相关资源
    最近更新 更多