Arcade表达式入门学习笔记

许多人在ArcGIS Desktop中使用过表达式、图层过滤、标注等。现在有一种新的跨平台的表达式,叫做Arcade表达式,可以在桌面的ArcGIS Pro、门户、网页端开发、移动端开发共同去使用的一种语言。主要用途有:可视化数据、标注要素、创建弹出窗口的内容。

特点:

    即拿即用 -- 通过ArcGIS 写、分享、执行 表达式

    轻量化 -- 以最小的影响运行在ArcGIS上

    安全 -- 没有可执行代码,该代码不能在ArcGIS以外运行,在ArcGIS程序上下文内使用时才会执行。

    表达式语言 -- 编写ArcGIS可以执行的语句

    为了ArcGIS使用 -- Esri开发的Arcade为了在ArcGIS中使用

总则:评估和理解表达式的上下文。一些总则提供多个全局变量,其他总则提供只有一个或不提供。

    Labeling、Popup、Visualization。Dashboard(2)。Attribute Rules(3)

全局变量:制定表达式里使用的变量

    $datastore $feature $layer $map $value $view.scale

    这些全局变量被表达式操纵,以生成想要的输出。

表达式的基本语法

    输出值、变量、常量、方法、文字、操作符

基本语法

使用模式(工作流)

Arcade工作流


Profile 评估和理解上下文决定提供给表达式的全局变量。Arcade语言提供工具构建表达式的方式有 变量和数据结构,条件语句、循环结构、数学、逻辑、和字符串操作符、用户定义的方法 和 以上所有的集合。

Arcade表达式的基本特征

1.不区分大小写

2.单行注释//多行注释/* */

3.语句可以跨多行。

4.多条语句以分号分隔,以分号结束语句

5.变量声明使用var

6.使用全局变量获取要素属性。$feature.attributeField

    (1)获得连接的数据 $feature.[TABLENAME.POP21] 连接由表格点字段名称组合周围的括号表示

    (2)访问图层中的所有要素 $layer

7.使用return返回结果。

相似的编程

数据类型

数组 [name,temp,wind,rh]

布尔 true

时间 Date(2022,3,2)

数据字典 Dictionary("Speed",10,"DIRECTION","southwest");

数值 65

文本 "你好"

操作符

数学运算符-- + - * /

增量运算符-- i++ j--

比较运算符-- == != > <

逻辑运算符-- &&  ||


编程语言加上一个全面的函数库,用于处理数据、处理日期、用于工作的几何函数.

数据、日期、几何、逻辑、数学、文本和跟踪的内置函数。

Sort()    Now()    Intersects()

isEmpty()    Mean()    Trim()

TrackCurrentSpeed


控制语句

条件语句

    if() when()

循环语句

    for(var i -0; i<MaxVal; i++){

    }

用户定义的方法

Function calculateWindSpeed(param1,param2){

}

视频字幕:

Time  Caption

0:01- [Rudy] Hello, and welcome to "ArcGIS Arcade: An Introduction."

0:05My name is Rudy Prosser and I'm here with my colleague Allison Rost

0:09to provide you with an overview of the ArcGIS Arcade expression language.

0:16We will introduce you to Arcade by describing

0:18what it is and how it can be used.

0:21I will describe what Arcade is, how the Arcade profiles determine where

0:25you can use Arcade, and the data you can use in your expressions.

0:30I'll then describe some of the basic characteristics of the

0:33Arcade expression language.

0:35Allison will show you how Arcade is used in ArcGIS by using it to visualize data,

0:41label features, and create content for pop-ups.

0:49The ArcGIS Arcade documentation describes Arcade as "...a portable, lightweight,

0:55and secure expression language written for use in ArcGIS."

1:00ArcGIS Arcade is portable because the Arcade expressions you write in one part

1:06of ArcGIS can be shared to the rest of ArcGIS.

1:10You can create an expression for labeling features in a web map layer,

1:14created in an ArcGIS Online or ArcGIS Enterprise, then copy and use that same

1:19expression in ArcGIS Pro for labeling features in a map layer.

1:23And finally, apply that same expression to a FeatureLayer in an

1:27ArcGIS API for JavaScript application.

1:32ArcGIS Arcade is lightweight in that you can use Arcade wherever ArcGIS runs.

1:37You can use it in desktops applications, such as ArcGIS Pro, in browser-based web

1:42applications created in ArcGIS Online or with the ArcGIS API for JavaScript,

1:47or in native applications built for mobile devices.

1:53ArcGIS Arcade is secure in that there's no executable code.

1:58The expressions you write with Arcade cannot be executed outside of ArcGIS.

2:03They only work within an ArcGIS application.

2:07The only time an Arcade expression executes is when it is used.

2:11For example, when you label features in a map, or generate the text for a pop-up,

2:16or check attribute values of a feature that was just edited.

2:20You can't use Arcade to build an application, or run an analysis,

2:24or automate a task.

2:27Arcade runs in specific, well-documented situations.

2:32It's an expression language.

2:34Arcade is used to write statements that when executed by ArcGIS

2:39return results that are used to create labels for features shown on a map, or

2:44provide values used for rendering those features, or to check a feature class

2:49in the geodatabase for valid and invalid attribute data, or to format the data

2:54shown in an ArcGIS dashboards element.

2:58ArcGIS Arcade is a focused language for specifically defined uses in ArcGIS.

3:04Arcade was written to help you make better maps, better interactive apps,

3:09or to provide higher-quality data, or to make data easier to understand.

3:16Arcade does this through the use of profiles.

3:19A profile is a context in which an Arcade expression is evaluated and understood.

3:25Each profile provides specific inputs that you can use in the expression and

3:30expects specific outputs.

3:33Some profiles are generic and usable in more than one part of ArcGIS, for example,

3:38labeling, pop-up, and visualization.

3:41Other profiles are only available in specific parts of ArcGIS, for example,

3:46the dashboard profile is specific to ArcGIS dashboards.

3:51Currently, there are 15 profiles, with 2 profiles, attribute rules

3:56and dashboard, providing more than one sub-profile.

4:01Each profile makes data available to the expression using global variables.

4:06The number of global variables for use in an expression depends

4:09on the profile chosen.

4:12Some profiles supply multiple global variables, other profiles provide only

4:17one or none.

4:19And all these global variables are defined with a dollar sign

4:23as their first character.

4:26These global variables are the inputs which are manipulated by the expression

4:30to generate the desired output.

4:34An Arcade expression is a combination of these global variables

4:38along with constants, variables that you define,

4:42operators and functions organized into one or more ordered statements,

4:48instructions on the operations to perform and the order to perform them in,

4:53returning a value that you can use.

4:56For example, we need to label-able weather stations on our map with each station's

5:02name plus the current temperature and humidity.

5:06We can build an Arcade expression which will provide the text to do just that.

5:11The Arcade language sets the operators, functions, and some of the specific

5:15constants you can use.

5:17The Arcade profile determines the data your expression can manipulate.

5:22You write the expression and ArcGIS evaluates it, generating a

5:27result used to label the features.

5:31Like many of the tasks you perform using ArcGIS, there's a pattern or workflow you

5:36can use when building an Arcade expression.

5:40What you need to do determines the profile you will use, for example,

5:44labeling, or pop-up or, visualization.

5:48The profile identifies the context where the Arcade expression is

5:51evaluated and understood.

5:54The profile also determines the global variables available

5:57for use in the expression.

6:00The global variables provide the data for the expression.

6:03The Arcade language provides the tools for building the expression in the way

6:08of variables and data structures, conditional statements,

6:11looping structures, mathematical, logical, and string operators,

6:16user-defined functions, and the comprehensive collection

6:20of functions you can use to manipulate the data.

6:22The expression, when evaluated, returns the result you need.

6:29Let's take a look at some of the basic characteristics of the

6:32Arcade expression language.

6:35On the left, you see an Arcade expression used to label weather stations.

6:40Some characteristics of Arcade are, it's not case sensitive,

6:44it supports both single line and multiline comments,

6:47a single statement Arcade can span multiple lines, an Arcade expression can

6:54be multiple statements with each statement separated by a semicolon, and all

6:59statements are terminated by semicolons.

7:04Other characteristics are that all variables are declared using var.

7:10You can access feature attributes using the $feature global variable

7:14plus the name of the attribute field values are to be drawn from.

7:18You can access joined data using the $feature global variable

7:23plus the table and field name you're drawing values from.

7:28Joins are indicated by brackets around the table dot field name combination.

7:33You can also access all the features in a layer using the $layer

7:37global variable, and expression results are returned with a return statement.

7:45Another characteristic of Arcade is that it provides familiar programming

7:49data types, array, Boolean, data dictionary, number, and text

7:55as well as ArcGIS-specific data types such as attachments,

7:59FeatureSets, geometry, and portal.

8:04The ArcGIS Arcade language also provides standard operators used in most scripting

8:09and programming languages plus a comprehensive library of functions

8:14for manipulating data, working with dates, geometry functions for working

8:19with spatial data, logical functions, standard mathematical and

8:23statistical functions, and string manipulation functions as well

8:27as tracking functions.

8:31You also get the same flow of control statements you see in other programming

8:34and scripting languages, conditional statements

8:37for making comparisons, looping statements for iterating

8:41through arrays, dictionaries, and FeatureSets, plus you can define

8:45your own functions.

8:49This was a quick look at the Arcade expression language.

8:51You'll find details in the ArcGIS Arcade documentation on the

8:56ArcGIS developer website.

8:58Now, I'd like to turn the presentation over to Allison, so she can show us how

9:02ArcGIS Arcade is used by showing us it in use.

9:09- [Allison] Thanks, Rudy. Now that you understand

9:11the basic structure and logic of ArcGIS Arcade,

9:14I'm going to show you some of the different ways ArcGIS Arcade can be used

9:18to execute custom expressions across ArcGIS.

9:22First, we'll look at how you can start using the labeling and field calculate

9:26profiles in ArcGIS Pro.

9:29We're going to start with writing a custom label expression.

9:32In ArcGIS Pro, I select the layer, the Labeling tab, and then click Label

9:41to enable labels for my layer.

9:43My weather station points are currently being labeled by the OBJECTD field.

9:48I'm going to use the drop down to change the label field to STATION_NAME.

9:56Now you see all of the features of my map are labeled with their station name.

10:01I'm going to go ahead and use ArcGIS Arcade to create a custom expression that

10:05will stack the values from a second field below the station name

10:09for each of my points.

10:11I can do that by clicking on the Expression button.

10:16That opens the Label Class dialog where I can access the expression box.

10:20The expression box has already been populated with the global variable

10:25$feature.STATION_NAME.

10:27When this label expression is applied, the value for a station name is placed as

10:32a label next to each feature.

10:35To create our custom expression, I'm going to use an Arcade constant.

10:40I'm going to add a plus sign, and then I'm going to add the constant,

10:45TextFormatting.NewLine.

10:52This is what's going to force the values from the second field onto a new line

10:57beneath the station name.

11:00I'm going to add a second plus sign, and then I'm going to select the

11:04global variable, $feature.TEMP, from the field list.

11:11I'm going to go ahead and Verify my expression, and it comes back as valid,

11:17so I can Apply.

11:19And now you can see, I have a stacked label with station name

11:23appearing above the current temperature.

11:26Now, I don't really like how my temperature is being

11:28displayed for all my features.

11:31You can see that some of them go out in multiple decimal places.

11:34Instead of adding a new field to the attribute table of my weather

11:38stations layer, I'm going to go ahead and use an Arcade math function called

11:42Round to round my temperature values to zero decimal places.

11:48To do this, in the expression box, I'm going to add

11:52Round an open parenthesis.

11:57Then after the global variable, I'm going to add a comma and tell it,

12:02I want it to round to zero decimal places.

12:05Then I'm going to add a close parenthesis.

12:09I'm going to Verify and it says my expression is valid, so I'm going to go

12:14ahead and Apply.

12:17All right, so this is looking better, but it still isn't

12:20clear that the second value is a temperature.

12:23So I'm going to make one more modification to my expression.

12:27I'm going to go ahead and add some text to the end of my expression by adding a

12:33plus sign and then the text between two quotation marks.

12:41I'll Verify my expression again and then Apply.

12:47Now that we have a well-formed stacked label, I'm going to go ahead and share

12:52this web map to ArcGIS Online, so we can use it for another demo.

12:56I'll do this by clicking Share, Web Map, completing the required information...

13:14...analyzing, and then clicking Share.

13:21While this is publishing, we're going to look at another way we can

13:26label this map using text formatting tags.

13:30Here, we have a duplicate of the map we were just working on,

13:34we used Arcade to create a simple stacked label that we shared to ArcGIS Online.

13:40If you need to create complex labels for an ArcGIS Pro project,

13:45you could choose to use text formatting tags to set the font, font size, color,

13:52style, spacing, background color, and more,

13:55to different sections of your labels.

13:59If we go back to the labeling dialog...

14:06...we can add text formatting tags to the expression in the expression box.

14:11Let's say I want to change the color of the station name to red.

14:15I can do that by adding a color formatting tag around STATION_NAME.

14:40After I add the tag, at the end, I have to close the tag.

14:50Then I can Verify and my expression is valid so I can Apply.

14:55I like this better, but I think it would stand out more if I also made the

15:01station name bold.

15:03I can do this by adding a bold tag.

15:07So right before the color tag, I'm going to add bold, and then

15:15right after, I'm going to close it.

15:24My expression is valid so I can Apply. Okay.

15:30This is looking good for station names, but the temperature

15:33is getting a little lost.

15:35I'm going to resolve this by increasing the size of the font for the temperature

15:38using a font tag.

15:41I'm going to add it before I round the temperature value.

15:50And it's going to be font size equals, and I'm going to go ahead and

15:55make it 12.5. And then I'm going to close our tag.

16:11I'm going to Verify my expression, my expression is valid so now, I can Apply.

16:20I'm happy with these labels.

16:22Just keep in mind that the text formatting tags can only be used in ArcGIS Pro, so I

16:28don't want to share this version of my map as a web map.

16:31Now, before we leave ArcGIS Pro, I want to take a look at one more Arcade

16:35profile called field calculate.

16:39To do that, we're going to navigate to one more map.

16:44In this map, I have a polygon layer that I created from a land cover raster.

16:50I have the grid code from the raster, but I want to add a field to the attribute

16:54table with the land cover description of each code.

16:57When I open the Attribute Table, you see that I've already added a text

17:03field for the land cover description.

17:07I'm going to right-click on that field and click on Calculate Field to open

17:12the field calculator.

17:15I'm going to resize it, and then I'm going to change the expression type from

17:22Python 3 to Arcade.

17:27The first thing I'm going to do is I'm going to create a variable to hold a

17:32dictionary of name value pairs that represent the gridcode

17:37values and their associated descriptions.

17:46One thing to take note of, even though the name value is a number,

17:49in my dictionary, it's always treated as text.

17:53Since the gridcode field is a numeric field, I'll have to cast it into text

17:58in order to compare the two values.

18:00To handle this comparison, I'm going to use a series of if statements.

18:10My first if statement will tell the calculator what to do if the

18:13gridcode is null.

18:15If gridcode is null, I want it to just go ahead and continue.

18:24If gridcode equals equals null...

18:33...continue.

18:35And I'm going to close that expression.

18:39My second if statement will look for any numeric values that are less than 10.

18:44The reason I'm looking for any single digit values is because in order to use

18:49the text function to convert the numeric gridcode into text,

18:54I have to tell the function how to format the result.

18:57I do this by specifying how many digits to the left of the decimal place should be

19:02considered by placing a single zero at the end.

19:06This is what the expression looks like.

19:10If gridcode is less than 10, I'm going to have it return the dictionary

19:24value that matches the Text of gridcode...

19:40...to one decimal place.

19:47And then we're going to close our expression.

19:52I'm going to go ahead and Verify, and my expression is valid.

20:00My third statement will look for any numeric values that are 10 or greater.

20:04That way, I can set the format for these values to two digits

20:08to the left of the decimal place.

20:14I'm going to go ahead and copy my previous statement and change it to

20:22greater than or equal to 10.

20:24Then, I'm going to add a second zero to represent that second decimal place.

20:32I'm going to go ahead and Verify my expression again, and it's valid,

20:38so I'm going to go ahead and Apply it.

20:47And now, you can see the description field has been populated with the value that

20:51corresponds to the gridcode.

20:54If I do a sort descending, my woody wetlands are a gridcode 90.

20:59Sort ascending, my barren land is a gridcode of 31.

21:03These were just a few examples of how ArcGIS Arcade can be used in ArcGIS Pro.

21:08In my next demo, I'll show some examples of using the visualization and pop-up

21:13profiles in ArcGIS Online.

21:21In this demo, we transitioned from ArcGIS Pro to ArcGIS Online.

21:27I want to start by emphasizing that ArcGIS Arcade is portable,

21:32meaning it can be used across ArcGIS.

21:35This is the weather map of stations I shared from ArcGIS Pro to ArcGIS Online

21:39in my previous demo.

21:42As you can see, each station has an associated stacked label.

21:46We can review the Arcade expression used to label these features by clicking

21:51on Layers, selecting the layer, selecting Labels, opening our Custom label

22:02field expression, and reviewing the expression in the dialog.

22:09So as you can see, the same custom expression that we wrote in ArcGIS Pro is

22:15still being applied in an ArcGIS Online web map.

22:18If we wanted to change or modify our expression, we'd be able to do so

22:22in this dialog.

22:24Through it, you have access to your global variables, a list of Functions,

22:30and Constants, like TextFormatting.NewLine,

22:34that we're using in our current expression.

22:36I'm not going to change our expression right now,

22:38so I'm going to go ahead and tell it OK.

22:42Next, we're going to take a look at how you can use Arcade to create a custom

22:46style for the features in your map.

22:49Before we start styling our map, I'm going to go ahead and change the

22:52visible range for our labels to countries-small.

23:00Then I'm going to zoom out so we can see more of our features.

23:06Since our weather stations layer is still selected, I'm going to go ahead and click

23:10on Styles to open the Styles pane.

23:13The weather station points currently have a single symbol applied.

23:16I'm going to write a custom attribute expression in Arcade to help me style this

23:20layer so that it's easy to identify areas with cold, mild, and hot temperatures.

23:26To do that, I'm going to click on Expression to access the editor window.

23:30The first thing I like to do in the editor window is

23:33to create a name for the expression.

23:36This makes it easier to identify it if I end up writing more than one.

23:41So I'm going to go ahead and change the name to Temp Categories,

23:49and then I'm going to click Save.

23:53For this expression, I'm going to use a logic function called

23:56When to evaluate the value in the temp field and return a defined label.

24:02I'm going to start by defining a variable called tempcategory,

24:07which I'm going to set as equal to the result of When.

24:10So variable tempcategory equals to When.

24:17And to make this a little easier for you to read, I'm just going to

24:21go ahead and space it out a little.

24:23And so I'm going to get the Round of our global variable TEMP

24:31to the zero decimal place.

24:35And when that value is less than or equal to 32, I would like it to return

24:42"Below Freezing" and I'm going to go ahead and reuse.

24:53So if that value is greater than 32 and less than 60, then I'd like it to return

25:10"Cool to Mild."

25:17And finally, if the value is greater than or equal to 60, I'd like it to return

25:30"Warm to Hot."

25:34And with When, I need to provide a final value that will be returned in the event

25:40that none of these expressions return true.

25:43So I'm just going to make that null.

25:46So if none of these are true, I'm going to get null back.

25:53I'm going to return the result of When.

26:02There we go. And then I am going to Test to make sure that my expression is valid.

26:10So as you see, the result was below freezing so I know that my

26:15expression works successfully.

26:18So I'm going to go ahead and tell it OK.

26:20And as you can see, my expression is now accessible under choose attributes.

26:26And thanks to smart mapping, the weather stations now have a unique

26:31symbol style applied.

26:33So I'm just going to go ahead and click on Style options, and then I'm going to

26:37switch out the color ramp for something that is a little more

26:40representative of temperatures.

26:44Then I'm just going to tell it Done and Done, and my features look great.

26:49So I'm almost ready to share my map.

26:52There's one more option that I want to configure for my weather stations before I

26:56share this out, and that's going to be the pop-ups.

26:59I'm going to click on Configure pop-ups to open the pop-ups pane and an example of my

27:05current pop-up configuration.

27:07The {STATION_NAME} is currently being used as a title for my pop-up, but I'd

27:13like to improve it by adding the state.

27:15In the field list, by default, all the fields in my layer are listed.

27:19I have a lot of fields that aren't relevant for my audience like OBJECTID,

27:26that aren't formatted like TEMP, or that lack context like the ICAO field.

27:35So I'm going to go ahead and reconfigure the pop-ups using Arcade expressions.

27:39So only necessary and well-formatted fields appear in the pop-up window.

27:44The first thing I'm going to do is go ahead and remove all the fields from my

27:48pop-up by clicking Fields list, and then

27:51clicking X to remove the ones I don't want.

28:05Now I'm ready to start adding my expressions.

28:07I'm going to go ahead and close my field list, and I'm going to click

28:11on Manage expressions.

28:14This is where I can access the Add expression button and open up my editor.

28:21I'm going to go ahead and create an expression to use

28:23as the title of my pop-up.

28:25So I'm going to go ahead and edit the name, and I'm going to call this

28:31Station and State.

28:37Now we're ready to start writing our expression.

28:39But you may notice something different about some of the global variables

28:43that we now have access to.

28:45We've been working with $feature up to this point but we now have three

28:49additional options that I want to take a moment to discuss.

28:52The first is $layer.

28:55$layer is actually, in this case, a FeatureSet.

28:58A FeatureSet represents a connection to a set of features.

29:02So if I wanted to find the maximum value of an entire field,

29:07I'd use the $layer variable.

29:10The next I'm going to point to is $map.

29:13The $map variable is a FeatureSet collection which gives you access

29:18to FeatureLayers in the same map so you could access field values or geometry

29:25of other layers to use in the calculation of your expression.

29:29The last is $datastore. So a $datastore is also a type of FeatureSet collection,

29:35and this gives you access to layers in the same feature service or database as the

29:40layer whose pop-ups are being configured even

29:44if they haven't been added to the map.

29:46In this example, we're going to continue using our $feature global variable.

29:50So I'm just going to go ahead and click on the arrow to access my fields, and I'm

29:56going to go ahead and add my STATION_NAME.

30:03Now, the field that contains the state information also contains the country,

30:08and I'd like to remove the country because it makes the title a little too long.

30:12So I'm going to use a Replace function to remove

30:16the text that I'm not interested in.

30:18I'm going to do that by adding a plus sign, and then a comma and a space so my

30:23title is easy to read.

30:26I'm going to add another plus sign, and then Replace,

30:30and then I'm going to find my country field.

30:33Going to add COUNTRY, and then I'm going to tell it what text to remove,

30:40United States of America.

30:45And then I'm going to tell it what to replace it with, which in this instance,

30:49is going to be nothing. Make sure that's closed. All right.

30:54And now, let's go ahead and Test.

30:57Well, as you see, I have an extra comma.

31:00So let's go ahead and remove that.

31:05So it would be comma, space, United States of America.

31:09Let's try this one more time. There we go. Much better.

31:12So now, we have our title expression ready. I'm going to go ahead and click OK.

31:17And now, you can see that it's been added right here in our pop-up expressions pane.

31:24We're going to go ahead and add a few more expressions, and then we're going to apply

31:27these to our pop-up.

31:29So the first additional expression we're going to add,

31:32we're going to call Temperature.

31:40That's just going to Round our temperature like we've done

31:42before and add degree Fahrenheit.

31:45Let's get and Test it.

31:48So I'm going to go ahead and tell this one, OK.

31:52Our next expression, we're going to call Wind Chill.

32:01Okay.

32:05And we're just going to Round Wind_Chill and then add degrees Fahrenheit again.

32:08Let's Test it.

32:11Looks good, so we're going to tell this, OK.

32:14And then our last expression, we're going to call Wind Direction.

32:24I'm just going to tell this to Save, and we're going to write this expression

32:29similar to what we did in one of our previous expressions when

32:33we use the When function.

32:35So we're going to add two variables, one for wind direction,

32:39and one for WIND_SPEED, then we're going to create

32:42a variable for the wind function.

32:45In this case, we're first going to look at SPEED and if it's zero,

32:48we're not going to assign a direction.

32:50Then we're going to look at direction and to determine whether the wind is

32:53blowing north, northeast, east, southeast, south, southwest, etc.

32:59And if none of these are true, then we're just going to return, null.

33:03So the last thing we're going to do is return SPEED plus miles per hour,

33:15because we'd like it to have a label, and then the direction

33:19from our When function. Let's go ahead and give this a Test.

33:25Nine miles per hour west. That looks good to me.

33:27And we're going to tell it, OK.

33:30And now we're ready to configure our pop-ups by applying our expressions.

33:34So we're going to go back, and then we're going to first change our {STATION_NAME}.

33:40I'm going to remove the current title.

33:44I'm going to click on the option to open my field list.

33:48And as you go through the field list, you're going to see my expression,

33:52state and station is now available.

33:55I'm going to go ahead and click on state and station and apply that.

33:59All right. So that's looking a little better.

34:01And now when I click on my field list, I'm going to be able to click

34:06on Select fields.

34:08And again, you're going to see my expressions available.

34:11So here's Temperature, Wind Chill, and Wind Direction, and I can click Done.

34:16And now, my pop-up has been configured and I'm ready to share my map.

34:22For our next demo, we'll look at using ArcGIS Arcade to configure

34:27an ArcGIS dashboard.

34:31In this demo, we're going to take a look at how ArcGIS Arcade can be used to help

34:35configure an ArcGIS dashboard.

34:38I have a simple dashboard here that I created using our temperature labels map

34:42that we created and configured in the previous two demos.

34:46Right now, it's set with historic data, and there's an option to filter that data

34:51based on dates.

34:53I'm going to go ahead and select a date so we have some data to work with.

34:59Now, our points are available, and there's a list of areas that had a wind speed

35:05greater than 37 miles per hour and an average indicator.

35:10So the average on this day was 19.9 miles per hour.

35:14We're going to use Arcade to reformat these two elements.

35:17We're going to start with formatting the list element.

35:20My goal is to create an expression that sets the background color for each of the

35:24list items based on the wind speed.

35:27To do this, I'm going to hover over the list, select Configure, click on List,

35:34and then I can Enable advanced formatting.

35:38In the expression box, a return has already been set up for me

35:41that includes the default system-defined properties.

35:44In this instance, system-defined properties are settings you would

35:48otherwise configure in an element, such as text and background color.

35:53For this expression, I'm going to use a logic function

35:55called IIF, which is going to evaluate a condition and return one result if it's

36:00true and another if it's false.

36:04I'm going to make this a little larger and set up a variable called speedColor and

36:14set that equal to IIF WIND_SPEED is greater than or equal to 51.

36:29And then I just have two hex codes.

36:31So if it's greater than or equal to 51, it'll be red-orange,

36:34and if not, it will be yellow.

36:38So in order to apply my new speedColor variable, I'm going to take the variable

36:44name and place it next to backgroundColor. And let's just give this a Test.

36:52And now you see, when I look at my result, the value for backgroundColor

36:57is one of my hex codes.

36:59There's one more change that I want to make before we leave the advanced

37:02formatting editor, and that's going to be adding the state after the station name.

37:08To do that, I'm going to create one more variable for stateName.

37:12And as you remember, I was getting state name from

37:17the country which also included the country.

37:19So I'm going to use Replace to remove the COUNTRY

37:24so that I'm just sharing the state name.

37:29So I'm going to put United States of America, and then I'm going to set the

37:38result as blank because I don't want it to return anything.

37:41So now, we're going to go back over to my return, and you'll see there's no

37:46system-defined property for text.

37:49So what I need to do is add my variable as an attribute.

37:53So there's a predefined attribute dictionary.

37:57So I'm going to ho head and uncomment these lines,

38:00and it gives me this syntax here.

38:04I'm just going to remove this and put state, and then I would like state to be

38:10equal to my stateName.

38:14Okay? Let's go ahead and Test this. All right.

38:16So now we see my attributes return dictionary and my

38:19backgroundColor returns my hex.

38:21So I'm going to go ahead and go back over to my List options and then scroll

38:27down to my Line item template.

38:30So {STATION_NAME} is currently what's set for my line item.

38:34I'm going to add a comma and a space, and then I'm going

38:37to add the state attribute that I created.

38:40So expression/state. All right. So that's looking better.

38:45Now I have both the station name and the state.

38:48So I'm going to go ahead and say, Done.

38:51And now, you can see my list element shows weather stations with wind speeds greater

38:56than or equal to 37 miles per hour in yellow and weather stations reporting wind

39:01speeds greater than or equal to 51 miles per hour in red.

39:05And finally, we're going to configure this indicator so that the custom wind icon

39:09that I uploaded only appears when the average

39:12wind speed is over 10 miles per hour.

39:15To do that, we're going to start configuring our indicator.

39:20We're going to click on Indicator, and then we're going

39:23to Enable advanced formatting.

39:27If I scroll to the bottom of the indicator options pane, you'll see the custom icon

39:32I added, its name is icon1.

39:35So we're going to scroll back up, and we're going to write an expression that

39:40displays icon1 when the average wind speed is greater than or equal to

39:4510 miles per hour.

39:47To get a little more room, I'm going to go ahead and expand

39:49our editor, then I'm going to create a variable that's going to reference icon1.

39:59Next, I'm going to create an if statement.

40:02So if WIND_SPEED is less than 10...I would like icon to be blank.

40:16So now, we're ready to set the icon name in our system-defined properties

40:22to our icon variable.

40:26And now, I can do a couple of quick improvements.

40:28I'm going to go ahead and round the WIND_SPEED that appears in my indicator,

40:34and I'm also going to add some topText.

40:39So it's really easy to make changes by filling out the system-defined properties.

40:43So I'm just going to make this "Average Wind Speed" so folks understand what the

40:48indicator is meant to show.

40:51Now, whether the icon appears or not in our Test will depend on what wind speed is

40:57currently being considered.

40:59So just because it's not here doesn't mean it's not working.

41:02Let's go ahead and exit out of the expanded view, go back

41:06over to our indicator options.

41:08All right, and now we see 17 miles per hour for an average and I do see my icon.

41:13So let's go ahead and click Done. And we are going to test this out.

41:18So here, we have an average wind speed of 20 miles per hour.

41:21So let's go ahead and change the dates.

41:27And now, we have an average wind speed of 10 and you can see that my icon is gone.

41:32One last thing that I want to point out about this dashboard is I can click on a

41:37location and as you see, the labels that I set up in ArcGIS Pro,

41:45and if I click on one of the weather stations, the pop-up that I configured

41:49in Map Viewer is still accessible.

41:52For my last demo, I'm going to show some examples of using ArcGIS Arcade in a

41:56JavaScript application, and then show you where you can get

41:59started using ArcGIS Arcade.

42:05As you've seen in my prior demos, it's easy to use

42:08ArcGIS Arcade across ArcGIS.

42:11Now we're going to take a look at how you can use ArcGIS Arcade

42:14in a custom JavaScript application.

42:16On the left, I have the code for my application.

42:20It was written using the ArcGIS JavaScript API, Version 4.19.

42:25Currently, all it's doing is grabbing the WebMap and weather stations layer that I

42:30published from ArcGIS Pro in one of my prior demos.

42:34If we go over to the map, you'll see that we can interact

42:37with it just like we did the web map.

42:39I can click on a feature and return with the formatted pop-ups.

42:44If I zoom in on the map, you'll see that my labels appear.

42:51But what if my layer didn't currently have labels applied?

42:54I could use ArcGIS Arcade within my JavaScript application to create labels.

43:01I'm going to show you what that looks like.

43:03So I have a second demo here, and you see that I have labels that now appear

43:08for the entire United States.

43:11These labels look a little bit different because I've added the wind speed.

43:14And that was done in the JavaScript API by adding a script element,

43:22and I think the syntax is going to look familiar.

43:25We set our variable for wind direction, we set our variable for WIND_SPEED,

43:30and then we set a variable that calls the When function.

43:35These are all expressions that I demonstrated writing in my previous demos.

43:42In the end, we returned concatenated labels and we format it with

43:48TextFormatting.NewLine, then we close our script element, and we're

43:53going to call it within our script.

43:57Within labelingInfo, we're going to call labelExpressionInfo

44:03and then we're going to have that expression, getElementById,

44:07our label-expression.

44:09And it's as easy as that to relabel a map using Arcade in the JavaScript API.

44:16By now, you might be wondering, "How can I get started

44:18with ArcGIS Arcade?"

44:20So I want to point out that at developers.arcgis.com/arcade,

44:26you're going to find the ArcGIS Arcade documentation.

44:30We have a Guide that includes Getting Started and sections on Structure and

44:34Logic that explains some of the concepts that Rudy went over earlier.

44:40There's a Function Reference where you can look up the syntax for all of the

44:43different functions, and there's even an ArcGIS Arcade playground where you can

44:48access different profiles to test Arcade syntax and functions.

44:54This concludes the technical presentation.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350