]> git.openstreetmap.org Git - nominatim.git/commitdiff
move zoom_to_rank computation to extra file
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 18 May 2023 16:29:41 +0000 (18:29 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 18 May 2023 16:29:41 +0000 (18:29 +0200)
nominatim/api/v1/helpers.py [new file with mode: 0644]
nominatim/api/v1/server_glue.py
nominatim/clicmd/api.py

diff --git a/nominatim/api/v1/helpers.py b/nominatim/api/v1/helpers.py
new file mode 100644 (file)
index 0000000..e16a22a
--- /dev/null
@@ -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))]
index fb91a0cd1b11737edb184cd981dd41379ffddbc3..ccf8f7d104b33b7672d2e9241ddc563c3f003401 100644 (file)
@@ -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
 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',
 
 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())
     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 = 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)
     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]
 
 
 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),
 ROUTES = [
     ('status', status_endpoint),
     ('details', details_endpoint),
index c4120599167479a6d9099b480d2ff05e38504b8a..82ebb2c109af3b6a8582e83422140cd3b7359dc6 100644 (file)
@@ -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.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
 
 # 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),
         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(),
                              layers=args.get_layers(napi.DataLayer.ADDRESS | napi.DataLayer.POI),
                              address_details=True, # needed for display name
                              geometry_output=args.get_geometry_output(),