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

您建议哪种可靠的方法?

4

2 回答 2

2

如果您有坐标,请使用Google Reverse Geocoding API 。

如果您有地址,请使用Google Geocoding API 。

于 2013-07-06T01:52:41.707 回答
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/

于 2013-07-06T04:02:44.680 回答