From 9583fb67f02d7480022db6aaed345d179246abc2 Mon Sep 17 00:00:00 2001 From: Guilhem Moulin Date: Thu, 28 Sep 2023 01:56:33 +0200 Subject: Add option --data-provider to filter by data provider. --- gis-observation-map | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'gis-observation-map') diff --git a/gis-observation-map b/gis-observation-map index effc4b2..ec6a020 100755 --- a/gis-observation-map +++ b/gis-observation-map @@ -98,6 +98,8 @@ parser.add_argument('--observation-format', default='GPKG', help='Format for the observation file (default: %(default)s)') parser.add_argument('--style', default=config['QGIS']['style'], type=ePath, help='QGIS Layer Style File (*.qml) to apply to the observation layer (default: %(default)s)') +parser.add_argument('--data-provider', nargs='*', default=[], + help='Data provider identifier (for instance "Artportalen,MVM")') args = parser.parse_args() @@ -450,6 +452,34 @@ def getObservations(taxonLists, taxonRedlistCategories, searchFilter): projectInstance.addMapLayer(layer) layerTreeRoot.findLayer(layer.id()).setItemVisibilityChecked(True) +def mapDataProviders(names): + # https://github.com/biodiversitydata-se/SOS/blob/master/Docs/DataProviders.md + params = { + 'cultureCode': 'sv-SE', + 'includeProvidersWithNoObservations': 'false', + } + resp = requests.get( + artDataBankenURL + '/species-observation-system/v1/DataProviders', + headers=artDataBankenHeaders + ) + resp.raise_for_status() + dataProviders = resp.json() + #print(json.dumps(dataProviders, indent=2, ensure_ascii=False)) + + ids = [] + for ns in names: + for name in ns.split(','): + i = None + for p in dataProviders: + if p['identifier'].lower() == name.lower(): + if i is not None: + raise Exception(f'multiple results found for provider "{name}"') + i = p['id'] + if i is None: + raise Exception(f'Unknown data provider "{name}"\nValid providers are {", ".join([p["identifier"] for p in dataProviders])}') + ids.append(i) + return ids + def getTaxonLists(): resp = requests.get( artDataBankenURL + '/species-observation-system/v1/TaxonLists?cultureCode=en-US', @@ -685,6 +715,11 @@ searchFilter['taxon'] = { 'taxonListOperator': 'Filter' } +if args.data_provider is not None: + searchFilter['dataProvider'] = { + 'ids': mapDataProviders(args.data_provider) + } + getObservations(taxonLists, taxonRedlistCategories, searchFilter) topo_maps = ['Topografi 10', 'Topografi 50', 'Topografi 100'] -- cgit v1.2.3