mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
add support for custom per-country postcode extents
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
# This file is part of Nominatim. (https://nominatim.org)
|
# This file is part of Nominatim. (https://nominatim.org)
|
||||||
#
|
#
|
||||||
# Copyright (C) 2024 by the Nominatim developer community.
|
# Copyright (C) 2025 by the Nominatim developer community.
|
||||||
# For a full list of authors see the git log.
|
# For a full list of authors see the git log.
|
||||||
"""
|
"""
|
||||||
Functions for formatting postcodes according to their country-specific
|
Functions for formatting postcodes according to their country-specific
|
||||||
@@ -67,12 +67,15 @@ class PostcodeFormatter:
|
|||||||
self.country_without_postcode: Set[Optional[str]] = {None}
|
self.country_without_postcode: Set[Optional[str]] = {None}
|
||||||
self.country_matcher = {}
|
self.country_matcher = {}
|
||||||
self.default_matcher = CountryPostcodeMatcher('', {'pattern': '.*'})
|
self.default_matcher = CountryPostcodeMatcher('', {'pattern': '.*'})
|
||||||
|
self.postcode_extent: dict[Optional[str], int] = {}
|
||||||
|
|
||||||
for ccode, prop in country_info.iterate('postcode'):
|
for ccode, prop in country_info.iterate('postcode'):
|
||||||
if prop is False:
|
if prop is False:
|
||||||
self.country_without_postcode.add(ccode)
|
self.country_without_postcode.add(ccode)
|
||||||
elif isinstance(prop, dict):
|
elif isinstance(prop, dict):
|
||||||
self.country_matcher[ccode] = CountryPostcodeMatcher(ccode, prop)
|
self.country_matcher[ccode] = CountryPostcodeMatcher(ccode, prop)
|
||||||
|
if 'extent' in prop:
|
||||||
|
self.postcode_extent[ccode] = int(prop['extent'])
|
||||||
else:
|
else:
|
||||||
raise UsageError(f"Invalid entry 'postcode' for country '{ccode}'")
|
raise UsageError(f"Invalid entry 'postcode' for country '{ccode}'")
|
||||||
|
|
||||||
@@ -113,3 +116,9 @@ class PostcodeFormatter:
|
|||||||
`match()`
|
`match()`
|
||||||
"""
|
"""
|
||||||
return self.country_matcher.get(country_code, self.default_matcher).normalize(match)
|
return self.country_matcher.get(country_code, self.default_matcher).normalize(match)
|
||||||
|
|
||||||
|
def get_postcode_extent(self, country_code: Optional[str]) -> int:
|
||||||
|
""" Return the extent (in m) to use for the given country. If no
|
||||||
|
specific extent is set, then the default of 5km will be returned.
|
||||||
|
"""
|
||||||
|
return self.postcode_extent.get(country_code, 5000)
|
||||||
|
|||||||
Reference in New Issue
Block a user