2014-09-25 18 views
3

我正嘗試在iOS應用中使用Google的Maps API服務,將包含地址的字符串轉換爲正確解析的合法地址。我明白Google的API沒有驗證這個地址是有效的;我只是需要它將字符串解析爲完整的邏輯地址。從谷歌地圖獲取已解析並格式正確的地址

經過一番對API的網站周圍挖,唯一的辦法我發現這樣做是使用地理編碼功能,輸入字符串轉換成座標,然後用反向地理編碼將其轉換回東西我可以解析。有沒有辦法以較少的開銷做到這一點?這樣做似乎有點倒退。

例如:347 N Canon Dr Beverly Hills,CA 90210.谷歌地圖似乎是直觀分隔地址不同部分的最佳選擇。否則,我冒着處理1040第8街變成104 08街等問題的風險。我希望能夠輸入一個大部分格式正確的地址,並且讓谷歌使用API​​來糾正它,並返回一些我可以傳入web服務的東西。

+0

嗯,這很棘手。我不認爲有另一種方式比etha toyu描述...:/ – nburk 2014-09-25 20:04:10

+1

你能舉一個你開始的字符串的例子嗎?你需要使用谷歌地圖,還是隻是目前看來最好的解決方案? – 2014-09-25 20:05:36

+0

示例w /放置在問題末尾的細節 – JayB127 2014-09-25 20:06:26

回答

5

我認爲你想要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; 
} 

可能的密鑰對這些上市in the docs