mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
move zoom_to_rank computation to extra file
This commit is contained in:
31
nominatim/api/v1/helpers.py
Normal file
31
nominatim/api/v1/helpers.py
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
#
|
||||||
|
# This file is part of Nominatim. (https://nominatim.org)
|
||||||
|
#
|
||||||
|
# Copyright (C) 2023 by the Nominatim developer community.
|
||||||
|
# For a full list of authors see the git log.
|
||||||
|
"""
|
||||||
|
Helper function for parsing parameters and and outputting data
|
||||||
|
specifically for the v1 version of the API.
|
||||||
|
"""
|
||||||
|
|
||||||
|
REVERSE_MAX_RANKS = [2, 2, 2, # 0-2 Continent/Sea
|
||||||
|
4, 4, # 3-4 Country
|
||||||
|
8, # 5 State
|
||||||
|
10, 10, # 6-7 Region
|
||||||
|
12, 12, # 8-9 County
|
||||||
|
16, 17, # 10-11 City
|
||||||
|
18, # 12 Town
|
||||||
|
19, # 13 Village/Suburb
|
||||||
|
22, # 14 Hamlet/Neighbourhood
|
||||||
|
25, # 15 Localities
|
||||||
|
26, # 16 Major Streets
|
||||||
|
27, # 17 Minor Streets
|
||||||
|
30 # 18 Building
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def zoom_to_rank(zoom: int) -> int:
|
||||||
|
""" Convert a zoom parameter into a rank according to the v1 API spec.
|
||||||
|
"""
|
||||||
|
return REVERSE_MAX_RANKS[max(0, min(18, zoom))]
|
||||||
@@ -17,6 +17,7 @@ from nominatim.config import Configuration
|
|||||||
import nominatim.api as napi
|
import nominatim.api as napi
|
||||||
import nominatim.api.logging as loglib
|
import nominatim.api.logging as loglib
|
||||||
from nominatim.api.v1.format import dispatch as formatting
|
from nominatim.api.v1.format import dispatch as formatting
|
||||||
|
from nominatim.api.v1 import helpers
|
||||||
|
|
||||||
CONTENT_TYPE = {
|
CONTENT_TYPE = {
|
||||||
'text': 'text/plain; charset=utf-8',
|
'text': 'text/plain; charset=utf-8',
|
||||||
@@ -319,10 +320,9 @@ async def reverse_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
|
|||||||
debug = params.setup_debugging()
|
debug = params.setup_debugging()
|
||||||
coord = napi.Point(params.get_float('lon'), params.get_float('lat'))
|
coord = napi.Point(params.get_float('lon'), params.get_float('lat'))
|
||||||
locales = napi.Locales.from_accept_languages(params.get_accepted_languages())
|
locales = napi.Locales.from_accept_languages(params.get_accepted_languages())
|
||||||
zoom = max(0, min(18, params.get_int('zoom', 18)))
|
|
||||||
|
|
||||||
details = params.parse_geometry_details(fmt)
|
details = params.parse_geometry_details(fmt)
|
||||||
details['max_rank'] = REVERSE_MAX_RANKS[zoom]
|
details['max_rank'] = helpers.zoom_to_rank(params.get_int('zoom', 18))
|
||||||
details['layers'] = params.get_layers()
|
details['layers'] = params.get_layers()
|
||||||
|
|
||||||
result = await api.reverse(coord, **details)
|
result = await api.reverse(coord, **details)
|
||||||
@@ -374,22 +374,6 @@ async def lookup_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
|
|||||||
|
|
||||||
EndpointFunc = Callable[[napi.NominatimAPIAsync, ASGIAdaptor], Any]
|
EndpointFunc = Callable[[napi.NominatimAPIAsync, ASGIAdaptor], Any]
|
||||||
|
|
||||||
REVERSE_MAX_RANKS = [2, 2, 2, # 0-2 Continent/Sea
|
|
||||||
4, 4, # 3-4 Country
|
|
||||||
8, # 5 State
|
|
||||||
10, 10, # 6-7 Region
|
|
||||||
12, 12, # 8-9 County
|
|
||||||
16, 17, # 10-11 City
|
|
||||||
18, # 12 Town
|
|
||||||
19, # 13 Village/Suburb
|
|
||||||
22, # 14 Hamlet/Neighbourhood
|
|
||||||
25, # 15 Localities
|
|
||||||
26, # 16 Major Streets
|
|
||||||
27, # 17 Minor Streets
|
|
||||||
30 # 18 Building
|
|
||||||
]
|
|
||||||
|
|
||||||
|
|
||||||
ROUTES = [
|
ROUTES = [
|
||||||
('status', status_endpoint),
|
('status', status_endpoint),
|
||||||
('details', details_endpoint),
|
('details', details_endpoint),
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ from nominatim.errors import UsageError
|
|||||||
from nominatim.clicmd.args import NominatimArgs
|
from nominatim.clicmd.args import NominatimArgs
|
||||||
import nominatim.api as napi
|
import nominatim.api as napi
|
||||||
import nominatim.api.v1 as api_output
|
import nominatim.api.v1 as api_output
|
||||||
from nominatim.api.v1.server_glue import REVERSE_MAX_RANKS
|
from nominatim.api.v1.helpers import zoom_to_rank
|
||||||
|
|
||||||
# Do not repeat documentation of subcommand classes.
|
# Do not repeat documentation of subcommand classes.
|
||||||
# pylint: disable=C0111
|
# pylint: disable=C0111
|
||||||
@@ -164,7 +164,7 @@ class APIReverse:
|
|||||||
api = napi.NominatimAPI(args.project_dir)
|
api = napi.NominatimAPI(args.project_dir)
|
||||||
|
|
||||||
result = api.reverse(napi.Point(args.lon, args.lat),
|
result = api.reverse(napi.Point(args.lon, args.lat),
|
||||||
max_rank=REVERSE_MAX_RANKS[max(0, min(18, args.zoom or 18))],
|
max_rank=zoom_to_rank(args.zoom or 18),
|
||||||
layers=args.get_layers(napi.DataLayer.ADDRESS | napi.DataLayer.POI),
|
layers=args.get_layers(napi.DataLayer.ADDRESS | napi.DataLayer.POI),
|
||||||
address_details=True, # needed for display name
|
address_details=True, # needed for display name
|
||||||
geometry_output=args.get_geometry_output(),
|
geometry_output=args.get_geometry_output(),
|
||||||
|
|||||||
Reference in New Issue
Block a user