All,
On a web map, I want to symbolize a feature based on whether the value is greater than, less than, or equal to a set amount. What is the easiest way to achieve this? If I were to do it in an Arcade expression, what would the expression be?
I have a layer (water mains) that I need to highlight the mains with diameters 10 inches or greater. In our system, there are about 50 different pipe diameter sizes. Initially, I tried to do the symbols by pulling in each unique value and grouping the sizes. However, I can't seem to group them in the web map.
Next, I tried using unique symbols based on the evaluation of an Arcade expression. I have yet to get this to work as intended. First, I tried the simple expression:
$feature.DIAMETER >= 10,
Testing the expression returned no errors. However, all the mains evaluated as "other". None were 'True' (10-inch diameter or above) or "False" (diameter under 10 inches). All the mains should have evaluated as either "true" or "false". To address the issue, I tried the expression in an if-then statement:
IIf($feature.DIAMETER >= 10, "true", "false").
Again testing the statement returned no errors. When I saved and applied the expression, it came up with a warning that "the expression did not have enough information to change the display." I tried the if-then expression with numerical values for True and false. I.e.:
IIf($feature.DIAMETER >= 10, 10, 9).
That also had the same issue. I could not find documentation on the command/function to render a symbol.
After the if-then statement, I tried a "when" statement. Again the same thing happened, the test of the expression would no errors, but the warning the expression did not have enough information to change the display occurred.
I tried to research Arcade expressions, but I could not find much. I could not find any documentation pertaining to my situation or issue. Also, I could not find a list of the command/function for Arcade. If you could provide links to some resources on this issue or arcade functions, please do so.
I was working with a Feature Layer in the new map viewer on ArcGIS online.
Thanks for your help.
Laura.
Solved! Go to Solution.
If you use a sequence of if...else if... (plus an optional else), it's fairly straightforward, and a little easier to wrap your head around than nested IIf statements.
var d = $feature.DIAMETER
var breakpoint = 10
if(d > breakpoint){
return 'Class 1'
} else if(d == breakpoint){
return 'Class 2'
} else if(d < breakpoint){
return 'Class 3'
} else {
return 'Diameter expressions didn't evaluate! :('
}
The fact that your first attempt did not return either 'True' or 'False' is puzzling. Try including some console statements in your expression to test things.
console($feature.DIAMETER >= 10)
That can give you a way to see what's being evaluated.
Also, what kind of field is "DIAMETER"? I'd assume it's numeric, but the way the expression behaved has me wondering.
If you use a sequence of if...else if... (plus an optional else), it's fairly straightforward, and a little easier to wrap your head around than nested IIf statements.
var d = $feature.DIAMETER
var breakpoint = 10
if(d > breakpoint){
return 'Class 1'
} else if(d == breakpoint){
return 'Class 2'
} else if(d < breakpoint){
return 'Class 3'
} else {
return 'Diameter expressions didn't evaluate! :('
}
The fact that your first attempt did not return either 'True' or 'False' is puzzling. Try including some console statements in your expression to test things.
console($feature.DIAMETER >= 10)
That can give you a way to see what's being evaluated.
Also, what kind of field is "DIAMETER"? I'd assume it's numeric, but the way the expression behaved has me wondering.
Thank you, the un-nested if-then did the trick. Where can I find documentation like that? Also the field "DIAMETER"? was a double. I do not quite know how check it in the web layer.
Thanks for your help.
Laura.
The structure and logic page is very helpful.You can check a field type in the Data tab of the item's page in your Content.