mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
improve display name for postcodes
Don't add the postcode again in the list of address details and make sure that the result proper always comes before anything else independently of the address rank.
This commit is contained in:
@@ -11,7 +11,7 @@ Data classes are part of the public API while the functions are for
|
|||||||
internal use only. That's why they are implemented as free-standing functions
|
internal use only. That's why they are implemented as free-standing functions
|
||||||
instead of member functions.
|
instead of member functions.
|
||||||
"""
|
"""
|
||||||
from typing import Optional, Tuple, Dict, Sequence, TypeVar, Type, List, cast
|
from typing import Optional, Tuple, Dict, Sequence, TypeVar, Type, List, cast, Callable
|
||||||
import enum
|
import enum
|
||||||
import dataclasses
|
import dataclasses
|
||||||
import datetime as dt
|
import datetime as dt
|
||||||
@@ -501,15 +501,17 @@ def _get_address_lookup_id(result: BaseResultT) -> int:
|
|||||||
|
|
||||||
async def _finalize_entry(conn: SearchConnection, result: BaseResultT) -> None:
|
async def _finalize_entry(conn: SearchConnection, result: BaseResultT) -> None:
|
||||||
assert result.address_rows is not None
|
assert result.address_rows is not None
|
||||||
postcode = result.postcode
|
if result.category[0] not in ('boundary', 'place')\
|
||||||
if not postcode and result.address:
|
or result.category[1] not in ('postal_code', 'postcode'):
|
||||||
postcode = result.address.get('postcode')
|
postcode = result.postcode
|
||||||
if postcode and ',' not in postcode and ';' not in postcode:
|
if not postcode and result.address:
|
||||||
result.address_rows.append(AddressLine(
|
postcode = result.address.get('postcode')
|
||||||
category=('place', 'postcode'),
|
if postcode and ',' not in postcode and ';' not in postcode:
|
||||||
names={'ref': postcode},
|
result.address_rows.append(AddressLine(
|
||||||
fromarea=False, isaddress=True, rank_address=5,
|
category=('place', 'postcode'),
|
||||||
distance=0.0))
|
names={'ref': postcode},
|
||||||
|
fromarea=False, isaddress=True, rank_address=5,
|
||||||
|
distance=0.0))
|
||||||
if result.country_code:
|
if result.country_code:
|
||||||
async def _get_country_names() -> Optional[Dict[str, str]]:
|
async def _get_country_names() -> Optional[Dict[str, str]]:
|
||||||
t = conn.t.country_name
|
t = conn.t.country_name
|
||||||
@@ -551,7 +553,7 @@ def _setup_address_details(result: BaseResultT) -> None:
|
|||||||
extratags=result.extratags or {},
|
extratags=result.extratags or {},
|
||||||
admin_level=result.admin_level,
|
admin_level=result.admin_level,
|
||||||
fromarea=True, isaddress=True,
|
fromarea=True, isaddress=True,
|
||||||
rank_address=result.rank_address or 100, distance=0.0))
|
rank_address=result.rank_address, distance=0.0))
|
||||||
if result.source_table == SourceTable.PLACEX and result.address:
|
if result.source_table == SourceTable.PLACEX and result.address:
|
||||||
housenumber = result.address.get('housenumber')\
|
housenumber = result.address.get('housenumber')\
|
||||||
or result.address.get('streetnumber')\
|
or result.address.get('streetnumber')\
|
||||||
@@ -676,9 +678,12 @@ async def complete_address_details(conn: SearchConnection, results: List[BaseRes
|
|||||||
rank_address=row.rank_address, distance=0.0))
|
rank_address=row.rank_address, distance=0.0))
|
||||||
|
|
||||||
### Now sort everything
|
### Now sort everything
|
||||||
|
def mk_sort_key(place_id: Optional[int]) -> Callable[[AddressLine], Tuple[bool, int, bool]]:
|
||||||
|
return lambda a: (a.place_id != place_id, -a.rank_address, a.isaddress)
|
||||||
|
|
||||||
for result in results:
|
for result in results:
|
||||||
assert result.address_rows is not None
|
assert result.address_rows is not None
|
||||||
result.address_rows.sort(key=lambda a: (-a.rank_address, a.isaddress))
|
result.address_rows.sort(key=mk_sort_key(result.place_id))
|
||||||
|
|
||||||
|
|
||||||
def _placex_select_address_row(conn: SearchConnection,
|
def _placex_select_address_row(conn: SearchConnection,
|
||||||
|
|||||||
Reference in New Issue
Block a user