作为@DavidPike建议,你可以让它作为一个表达式出现在弹出窗口或表在“经典”地图。有什么原因需要将派生值作为它自己的列吗?
无论如何,如果您熟悉一些Python,有一种方法可以自动更新它。
所以,你可以在AGOL笔记本上写一个这样的脚本:
从arcgis导入GIS #连接到门户,获取你的层GIS = GIS('your-org-url', 'user', 'password') lyr = GIS .content.get(' hosts -layer- itemid ') #计算字段lyr.layers[0]。计算(calc_expression = {'field': 'CONCAT -fieldname', 'value': 'CONCAT(第一个字段,第二个字段)'})
然后使用任务TAB在笔记本上安排它运行经常到能及时更新。计划运行确实会花费您的积分,但这样一个简短的脚本可能花费很少,即使频繁运行也可以。
这可能会变得相当复杂(可能比它的价值更麻烦),但只有当创建一个新功能时才会触发。要让这个工作确实需要你的图层以某种方式设置,所以这个选项可能是不可达到的。但值得一提的是。
首先,像上面那样准备一个笔记本,但要包括一个在哪里子句中的字段计算。设置变量在哪里到'1=1'之前的笔记本,然后使用注入参数让它被覆盖。
创建一个定期运行的任务,但暂时将其禁用。
Where = '1=1' lyr.layers[0]。计算(where = where…)
接下来,创建一个webhook在托管的特性服务上。将它定义为在您认为有必要时触发,可能是在添加或更新功能时。
现在,这是棘手的部分。你不能真正控制你的webhook的内容有效载荷所以你需要某种中介。很多Esri的例子使用integrmat,也许你有Microsoft Flows / Power automation。你也可以创建一个完全自定义的程序来做这件事,如果你知道你在做什么。
无论您怎么做,都要让中介捕获有效负载并获得所创建特性的objectID。然后可以将POST请求提交给https://kendall.maps.arcgis.com/sharing/rest/community/users/<用户名> /任务/ < your-task-ID > /更新安排你笔记本的运行。
POST请求的有效负载看起来像这样:
{“标题”:“单一运行”,“itemId”:“你的笔记本itemId”,“startDate可以”:“UNIX时间戳的当前时间”、“类型”:“ExecuteNotebook”,“参数”“{\“updatePortalItem \”:真的,\“saveInjectedParameters \”:假的,notebookParameters \” \':\'{\\\' 在\ \ \”:\ \ \ ' objectid = THEOBJECTID \\\'}\'}", " 分钟”:“*”、“小时”:“*”、“dayOfMonth”:“*”、“月”:“*”、“dayOfWeek”:“?”、“maxOccurrences”:“1”“f”:“json”}
您可能还需要计算出令牌部分。
值得注意的是:如果对您来说更容易的话,您还可以使用Python处理计划好的笔记本任务。
无论如何,这应该使您的任务重新设置为在当前时间运行,只需一次。通过从webhook导入创建/更新的目标,任务的“where”参数将过滤你的计算,只添加或更新那些功能。
我已经说得够久了。说到用大炮拍蚊子!简单的选择可能就是你想要的。
嗨@DavidPike——从我们用例的角度来看,Arcade属性表达式很棒,但是我们的用户总是需要能够将数据导出为.csv或类似的格式。由于map属性表达式只在运行中计算,并且只存在于Web map /App中,因此在数据中适当地使用它们是理想的。下面推荐的计划更新让我们更接近,但是在最终用户编辑数据的同时更新/填充属性将是最好的情况。
作为@DavidPike建议,你可以让它作为一个表达式出现在弹出窗口或表在“经典”地图。有什么原因需要将派生值作为它自己的列吗?
无论如何,如果您熟悉一些Python,有一种方法可以自动更新它。
所以,你可以在AGOL笔记本上写一个这样的脚本:
从arcgis导入GIS #连接到门户,获取你的层GIS = GIS('your-org-url', 'user', 'password') lyr = GIS .content.get(' hosts -layer- itemid ') #计算字段lyr.layers[0]。计算(calc_expression = {'field': 'CONCAT -fieldname', 'value': 'CONCAT(第一个字段,第二个字段)'})
然后使用任务TAB在笔记本上安排它运行经常到能及时更新。计划运行确实会花费您的积分,但这样一个简短的脚本可能花费很少,即使频繁运行也可以。
这可能会变得相当复杂(可能比它的价值更麻烦),但只有当创建一个新功能时才会触发。要让这个工作确实需要你的图层以某种方式设置,所以这个选项可能是不可达到的。但值得一提的是。
首先,像上面那样准备一个笔记本,但要包括一个在哪里子句中的字段计算。设置变量在哪里到'1=1'之前的笔记本,然后使用注入参数让它被覆盖。
创建一个定期运行的任务,但暂时将其禁用。
Where = '1=1' lyr.layers[0]。计算(where = where…)
接下来,创建一个webhook在托管的特性服务上。将它定义为在您认为有必要时触发,可能是在添加或更新功能时。
现在,这是棘手的部分。你不能真正控制你的webhook的内容有效载荷所以你需要某种中介。很多Esri的例子使用integrmat,也许你有Microsoft Flows / Power automation。你也可以创建一个完全自定义的程序来做这件事,如果你知道你在做什么。
无论您怎么做,都要让中介捕获有效负载并获得所创建特性的objectID。然后可以将POST请求提交给https://kendall.maps.arcgis.com/sharing/rest/community/users/<用户名> /任务/ < your-task-ID > /更新安排你笔记本的运行。
POST请求的有效负载看起来像这样:
{“标题”:“单一运行”,“itemId”:“你的笔记本itemId”,“startDate可以”:“UNIX时间戳的当前时间”、“类型”:“ExecuteNotebook”,“参数”“{\“updatePortalItem \”:真的,\“saveInjectedParameters \”:假的,notebookParameters \” \':\'{\\\' 在\ \ \”:\ \ \ ' objectid = THEOBJECTID \\\'}\'}", " 分钟”:“*”、“小时”:“*”、“dayOfMonth”:“*”、“月”:“*”、“dayOfWeek”:“?”、“maxOccurrences”:“1”“f”:“json”}
您可能还需要计算出令牌部分。
值得注意的是:如果对您来说更容易的话,您还可以使用Python处理计划好的笔记本任务。
无论如何,这应该使您的任务重新设置为在当前时间运行,只需一次。通过从webhook导入创建/更新的目标,任务的“where”参数将过滤你的计算,只添加或更新那些功能。
我已经说得够久了。说到用大炮拍蚊子!简单的选择可能就是你想要的。