From: Sarah Hoffmann Date: Thu, 18 May 2023 16:29:41 +0000 (+0200) Subject: move zoom_to_rank computation to extra file X-Git-Tag: v4.3.0~76^2~1 X-Git-Url: https://git.openstreetmap.org./nominatim.git/commitdiff_plain/32dbf83747e0339d93d6200ff43f73221e9e863c move zoom_to_rank computation to extra file --- diff --git a/nominatim/api/v1/helpers.py b/nominatim/api/v1/helpers.py new file mode 100644 index 00000000..e16a22a3 --- /dev/null +++ b/nominatim/api/v1/helpers.py @@ -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))] diff --git a/nominatim/api/v1/server_glue.py b/nominatim/api/v1/server_glue.py index fb91a0cd..ccf8f7d1 100644 --- a/nominatim/api/v1/server_glue.py +++ b/nominatim/api/v1/server_glue.py @@ -17,6 +17,7 @@ from nominatim.config import Configuration import nominatim.api as napi import nominatim.api.logging as loglib from nominatim.api.v1.format import dispatch as formatting +from nominatim.api.v1 import helpers CONTENT_TYPE = { 'text': 'text/plain; charset=utf-8', @@ -319,10 +320,9 @@ async def reverse_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> debug = params.setup_debugging() coord = napi.Point(params.get_float('lon'), params.get_float('lat')) 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['max_rank'] = REVERSE_MAX_RANKS[zoom] + details['max_rank'] = helpers.zoom_to_rank(params.get_int('zoom', 18)) details['layers'] = params.get_layers() 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] -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 = [ ('status', status_endpoint), ('details', details_endpoint), diff --git a/nominatim/clicmd/api.py b/nominatim/clicmd/api.py index c4120599..82ebb2c1 100644 --- a/nominatim/clicmd/api.py +++ b/nominatim/clicmd/api.py @@ -18,7 +18,7 @@ from nominatim.errors import UsageError from nominatim.clicmd.args import NominatimArgs import nominatim.api as napi 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. # pylint: disable=C0111 @@ -164,7 +164,7 @@ class APIReverse: api = napi.NominatimAPI(args.project_dir) 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), address_details=True, # needed for display name geometry_output=args.get_geometry_output(),