是否有一种方法来列出和/或修改过滤器应用于一个web地图中的功能层使用ArcGIS API Python?
我在webmaps上有很多标准层,每一层都需要不同的过滤器,所以我维护了一个文件夹,其中包含与每一层相关的JSON文件,这样,如果过滤器发生变化,我只需要修改JSON文件,我就可以将更新后的过滤器应用到100多个地图上,作为标准维护。JSON文件的名称与webmap中的层相同(实际上与通过Python API访问时的层标题相同)。下面的代码将对一个WebMap应用过滤器,我已经注释了代码。
JSON文件过滤器的一个示例
"(status <> 2) AND (usage = 1)"
Python脚本
# -*- coding: utf-8 -*- from arcgis import GIS import json def listFilesInFolder(input_fldr, file_extension=None): """ Args: input_fldr the folderpath file_extension=None可选参数限制文件类型返回返回:文件夹"""中的文件名列表如果file_extension在[None, "", ""]:返回[filename for filename in os.listdir(input_fldr)] else:return [filename for filename in os.listdir(input_fldr) if filename.lower().endswith(file_extension)] ## JSON库的路径,JSON文件存储的位置json_fldr = r"path_to\JSON\Filters" ## webmap要更新的id这可以从webmap url中获得webmap_id = "wembap_id" ##连接到AGOL实例conn = GIS("home") ##通过提供的id引用webamp item = conn.content.get(webmap_id) ##引用webmap内容/config item_data = item.get_data() ##在jsnon_fldr中列出json文件json_list = listFilesInFolder(json_fldr, ".json") ##对于webmap中的每一层进行索引,i在enumerate(item_data["operationalLayers"]):##获取图层的标题-它是如何被命名为一个图层服务title = item_data[" operationallayer "][index]["title"] ##你可能想打印标题在这里看看标题是否匹配你的JSON文件的名称##如果标题有一个匹配如果"{0}. JSON ".format(title)在json_list: print("\tUpdating: {0}".format(title)) ##获取过滤器配置图层与开放("{0}\\{1}. JSON "。. format(json_fldr, title)) as json_data: filters = json_load (json_data) ##覆盖当前过滤器配置item_data[" operationallayer "][index]['layerDefinition']['definitionExpression'] = filters ##用新的过滤器配置item_properties= {"text":item_data} item.update(item_properties=item_properties) print("\t\ tupdate ")