操作方法

操作方法:使用 Portal for ArcGIS Map Viewer 中的 Arcade 计算弹出窗口中两个日期字段之间的差异

Last Published: January 30, 2024

描述

ArcGIS Arcade 是一种表达式语言,可用于在 Portal for ArcGIS Map Viewer 中配置弹出窗口。 Arcade 日期函数提供了创建日期对象和获取对象各种属性的方法。 例如,DateAdd() 和 DateDiff() 函数可用于根据指定的间隔调整所需的日期,而 Now() 函数可用于获取客户端当前的本地时间。

本文提供了计算 Portal for ArcGIS Map Viewer 弹出窗口中两个日期字段之间差异的步骤。 在此示例中,弹出窗口中显示的自上次消防栓检查以来的天数是通过引用“检查日期”字段中的字段值(如下图所示)和客户端当前的本地时间获得的。

弹出窗口突出显示了在计算自上次消防栓检查以来的天数时要引用的“检查日期”字段

解决方案或解决方法

  1. 在 Portal for ArcGIS Map Viewer 中打开地图。 单击内容(深色)工具栏上的图层,然后在弹出窗口中选择图层进行编辑。 在此示例中,选择了 Hydrant Painting for Collector 图层。
Map Viewer“内容”(深色)工具栏和“图层”选项卡
  1. 单击“设置”(浅色)工具栏上的弹出窗口,然后单击选项 > 属性表达式
用于导航到 Map Viewer 弹出窗口表达式窗格的 Map Viewer 弹出窗口窗格
  1. 单击 + 添加表达式以打开 Arcade 表达式编辑器窗口。
  2. 在编辑器窗口中,根据需要为新表达式指定名称。
  3. 表达式对话框中,插入以下 Arcade 表达式:
  1. 定义要引用的日期。
var <variableName> = Now()
var <variableName1> = $feature.<date_fieldName>;
  1. 计算年份中的日期差异。
var <variableName2> = Floor(DateDiff(<variableName>, <variableName1>, 'years'));
  1. 通过将年份添加到开始日期来创建新日期。
var <variableName3> = DateAdd(<variableName1>, <variableName2>, 'years');
  1. 计算这些日期之间的天数。
var <variableName4> = DateDiff(<variableName>, <variableName3>, 'days');
  1. 定义要在弹出窗口中显示的字段值的约束。
if (IsEmpty($feature.<date_fieldName>)){
    return "<textValue>";
} else if (<variableName2> >= <numberValue>) {
    return "<textValue1> " + <variableName2> + " <textValue2> " + Floor(<variableName4> , <numberValue1>) + " <textValue3>";
} else if (<variableName2> == <numberValue2>) {
    return "<textValue4> " + Floor(<variableName4> , <numberValue1>) + " <textValue3>";
} else if (<variableName2> == <numberValue1> && <variableName4> >= <numberValue>) {
    return "<textValue1> " + Floor(<variableName4> , <numberValue1>) + " <textValue3>";
} else if (<variableName2> == <numberValue1> && <variableName4> >= <numberValue2>) {
    return "<textValue1> " + Floor(<variableName4> , <numberValue1>) + " <textValue5>";
} else if (<variableName2> == <numberValue1> && <variableName4> < <numberValue2>) {
    return "<textValue6>";
}

以下代码块演示了完整的工作 Arcade 脚本。

var timeNow = Now();
var survey = $feature.DATEINSPECTED;
var y = Floor(DateDiff(timeNow, survey, 'years'));
var date1a = DateAdd(survey, y, 'years');
var d = DateDiff(timeNow, date1a, 'days');

if (IsEmpty($feature.DATEINSPECTED)){
    return "-";
} else if (y >= 2) {
    return "Last Inspection: " + y + " years and " + Floor(d , 0) + " days ago.";
} else if (y == 1) {
    return "Last Inspection: 1 year and " + Floor(d , 0) + " days ago.";
} else if (y == 0 && d >= 2) {
    return "Last Inspection: " + Floor(d , 0) + " days ago.";
} else if (y == 0 && d >= 1) {
    return "Last Inspection: " + Floor(d , 0) + " day ago.";
} else if (y == 0 && d < 1) {
    return "Last Inspection: today.";
}
  1. 单击测试以查看表达式结果的预览。 如果达到所需的结果,请单击确定
在 Portal for ArcGIS Map Viewer 编辑器窗口中指定 Arcade 表达式
  1. 单击属性表达式窗格中新创建的 Arcade 表达式上方的上一个按钮。
Portal for ArcGIS Map Viewer 弹出窗口表达式窗格包含新创建的表达式上方的“上一个”图标
  1. 单击字段列表以展开弹出窗口中显示的字段列表,然后单击选择字段
  2. 选中表达式部分下的表达式字段,然后单击完成

下图显示了使用 ArcGIS Arcade 在弹出窗口中新添加的“上次检查(天)”字段,用于提供自上次检查消防栓以来的天数或年数。

Portal for ArcGIS Map Viewer 中弹出窗口显示的最终结果

文章 ID: 000028205

接收通知并查找新问题或常见问题的解决方案

从我们全新的 AI 聊天机器人中获得简明答案和视频解决方案。

下载 Esri 支持应用程序

相关信息

发现关于本主题的更多内容

获取来自 ArcGIS 专家的帮助

联系技术支持部门

下载 Esri 支持应用程序

转至下载选项