2013-07-06 56 views
0

我有德國不會忽略這樣獲取地址部分出地址字符串

Birkenweg 13 51491 Overath 
Emil-Hoffmann-Str. 13 50996 Köln 
Rolandstr. 65 50677 Köln 
Markusplatz 35 50968 Köln 
Bonner Str. 245 50968 Köln 
Aachener Str. 1590 50858 Köln 
Viersener Str. 122 50733 Köln 
Bergische Landstr. 219 51375 Leverkusen 
Josef Gladbach Platz 81-100 50259 Pulheim 
Hauptstr. 769 51399 Burscheid 
Bielsteiner Str. 117-119 51674 Wiehl 

而例如在

Birkenweg 13 51491 Overath 

我想整理到這些領域

Birkenweg = street 
13 = house number 
51491 = postcode 
Overath = city 

,並在

Emil-Hoffmann-Str. 13 50996 Köln 

Emil-Hoffmann-Str. = street 
13 = house number 
50996 = postcode 
Köln = city 

Josef Gladbach Platz 81-100 50259 Pulheim 

Josef Gladbach Platz = street 
81-100 = house number 
50259 = postcode 
Pulheim = city 

你建議哪一個可靠的方法?

+0

太糟糕了,它看起來像他們不是[美國地址](http://usaddress.codeplex.com/)。 –

回答

1

搜索5個連續數字(因爲這似乎是找到最可靠的東西),例如,使用正則表達式。這給你郵政編碼和城市。在那裏拆分字符串。在郵編之前搜索字符串末尾的門牌號碼。請注意,它可能包含字母,例如「Habsburgerstrasse 55a」。

與此類似:

function splitGermanAddress(s) { 
    var result = {}; 
    var parts = s.split(/\d\d\d\d\d/); 
    var address = parts[0]; 
    result.postcode = s.substr(address.length, 5); 
    result.city = parts[1].trim(); 

    var houseNo = /\d+\s*[a-z]?(\s*\-\s*\d+\s*[a-z]?)?\s*$/i 
    var match = address.match(houseNo); 
    if (match) { 
     result.houseNumber = match[0].trim(); 
     result.street = address.substr(
      0, address.length - match[0].length).trim(); 
    } else { 
     result.street = address; 
    } 
    return result; 
} 

演示:http://jsfiddle.net/99Lzm/2/

2

Google Reverse Geocoding API如果你有座標。

Google Geocoding API如果你有地址。

+0

好主意,但我說的是成千上萬的地址,這可能會觸發該API的限制。另外我沒有GPS座標,這是您的方法所必需的。 –

+0

編輯我的答案,但是如果你有成千上萬的地址,祝你好運,我搜索其他「地理編碼API」,這是你正在尋找的術語。或者,您可以購買來自Google的API費率限額,但不應太昂貴。 –