add python implementation of reverse

This adds an additional layer parameter and slightly changes the
queries to do more efficient lookups for large area features.
This commit is contained in:
Sarah Hoffmann
2023-03-22 00:07:17 +01:00
parent ebcf8c2b6b
commit 41da298b18
6 changed files with 650 additions and 7 deletions

View File

@@ -19,7 +19,7 @@ import datetime as dt
import sqlalchemy as sa
from nominatim.typing import SaSelect, SaRow
from nominatim.api.types import Point, LookupDetails
from nominatim.api.types import Point, Bbox, LookupDetails
from nominatim.api.connection import SearchConnection
from nominatim.api.logging import log
@@ -46,6 +46,8 @@ class AddressLine:
names: Dict[str, str]
extratags: Optional[Dict[str, str]]
local_name: Optional[str] = None
admin_level: Optional[int]
fromarea: bool
isaddress: bool
@@ -136,6 +138,14 @@ class DetailedResult(BaseResult):
indexed_date: Optional[dt.datetime] = None
@dataclasses.dataclass
class ReverseResult(BaseResult):
""" A search result for reverse geocoding.
"""
distance: Optional[float] = None
bbox: Optional[Bbox] = None
def _filter_geometries(row: SaRow) -> Dict[str, str]:
return {k[9:]: v for k, v in row._mapping.items() # pylint: disable=W0212
if k.startswith('geometry_')}