From bf6eb01d68704cde4fa85a94ac3a0344d70b9779 Mon Sep 17 00:00:00 2001 From: Itz-Agasta Date: Wed, 28 Jan 2026 12:16:43 +0530 Subject: [PATCH 1/2] Adds layer filtering option to search command Introduces a cli argument to restrict search results to specified data layers, enabling more targeted queries. --- src/nominatim_db/clicmd/api.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/nominatim_db/clicmd/api.py b/src/nominatim_db/clicmd/api.py index 3644a2f5..dd1baf37 100644 --- a/src/nominatim_db/clicmd/api.py +++ b/src/nominatim_db/clicmd/api.py @@ -173,6 +173,10 @@ class APISearch: help='Preferred area to find search results') group.add_argument('--bounded', action='store_true', help='Strictly restrict results to viewbox area') + group.add_argument('--layer', metavar='LAYER', + choices=[n.name.lower() for n in napi.DataLayer if n.name], + action='append', required=False, dest='layers', + help='Restrict results to one or more layers (may be repeated)') group.add_argument('--no-dedupe', action='store_false', dest='dedupe', help='Do not remove duplicates from the result list') _add_list_format(parser) @@ -189,6 +193,8 @@ class APISearch: raise UsageError(f"Unsupported format '{args.format}'. " 'Use --list-formats to see supported formats.') + layers = _get_layers(args, napi.DataLayer.ADDRESS | napi.DataLayer.POI) + try: with napi.NominatimAPI(args.project_dir) as api: params: Dict[str, Any] = {'max_results': args.limit + min(args.limit, 10), @@ -199,6 +205,7 @@ class APISearch: 'excluded': args.exclude_place_ids, 'viewbox': args.viewbox, 'bounded_viewbox': args.bounded, + 'layers': layers, 'entrances': args.entrances, } From 6ad87db1ebb4b48b5c12b063a15888c344f147cf Mon Sep 17 00:00:00 2001 From: Itz-Agasta Date: Thu, 29 Jan 2026 11:33:21 +0530 Subject: [PATCH 2/2] Updates layer selection to allow optional default - Modifies layer argument handling to permit no default layers appropriate. - Update the help text for the layer parameter in the reverse command --- src/nominatim_db/clicmd/api.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/nominatim_db/clicmd/api.py b/src/nominatim_db/clicmd/api.py index dd1baf37..7b715a27 100644 --- a/src/nominatim_db/clicmd/api.py +++ b/src/nominatim_db/clicmd/api.py @@ -104,7 +104,7 @@ def _get_locales(args: NominatimArgs, config: Configuration) -> napi.Locales: return napi.Locales() -def _get_layers(args: NominatimArgs, default: napi.DataLayer) -> Optional[napi.DataLayer]: +def _get_layers(args: NominatimArgs, default: Optional[napi.DataLayer]) -> Optional[napi.DataLayer]: """ Get the list of selected layers as a DataLayer enum. """ if not args.layers: @@ -193,7 +193,7 @@ class APISearch: raise UsageError(f"Unsupported format '{args.format}'. " 'Use --list-formats to see supported formats.') - layers = _get_layers(args, napi.DataLayer.ADDRESS | napi.DataLayer.POI) + layers = _get_layers(args, None) try: with napi.NominatimAPI(args.project_dir) as api: @@ -262,7 +262,7 @@ class APIReverse: group.add_argument('--layer', metavar='LAYER', choices=[n.name.lower() for n in napi.DataLayer if n.name], action='append', required=False, dest='layers', - help='OSM id to lookup in format (may be repeated)') + help='Restrict results to one or more layers (may be repeated)') _add_api_output_arguments(parser) _add_list_format(parser)