Did you know that Geocortex Essentials now supports the Arcade scripting engine?
The Arcade expression language adds powerful scripting capabilities to the ArcGIS platform. By writing simple scripts, users can manipulate their map data on the fly in several ways. It’s now easier than ever to build a mapping application that pulls data from various sources and uses it creatively to improve decision making!
In this Geocortex Tech Tip, we’ll show you how to use an Arcade script to set up a range of simple to complex scripts that interact with mapping data, as well as how to execute those scripts in various different environments!
Video Transcript:
“Hi, my name is Jonathan. I’m the Lead Developer on the Geocortex Viewer for HTML5, and today I’d like to show you how you can use Esri’s new Arcade scripting language in your feature details templates in Essentials and GVH. Let’s get started!
Alright, so today we’re going to be talking about Arcade expressions.
Arcade is a scripting language that has been developed by Esri in order to allow people to write simple to complex scripts that interact with mapping data and execute those scripts in various different environments, on the web, up in your Esri API-based application, etc. The same script can be safely run in of these different places and it allows you to do a lot of things that either required custom code before or require you to do some complex set up in your data beforehand. This’ll probably all make sense if I show you some examples, so let’s dive in!
First of all, you should go to developers.arcgis.com/arcade for more in-depth information on this. There is a great guide here, it goes through every feature that’s available.
One thing I will touch on right now is that if you go to the guide, it will start giving you some very simple examples of Arcade script and it will talk about profiles. The profile that we use in GVH is very similar to the pop-up profile because we’re targeting a very similar use case where were displaying data here in map tips and future details which is very similar to the pop-up that you might see in ArcGIS Online. We’ve implemented all of these global variables, except for the data store.
Basically, what that means is you can access any layer that’s in your map, but if the layer is just in the service and not actually included in the map, we haven’t implemented this so you are not going to be able to access that layer, but everything else is available!
If we go to my copy of the LA County sample site, we will see I’m editing layer census tracts and there is a new tab here called ‘Arcade Expressions.’ If I go to this tab, can see I have some things, some of them are simple and some of them are quite complicated. Let’s take a look. I’ll edit this one, which is one of the simpler ones and this is calculating the area of a polygon. You can see here that I’ve got the global variable for the feature which is just whatever feature we’re operating on right now and I can call the Arcade function area that feature and say that I want a result in square kilometers. Then I can round that result to two decimal places and I can do this all on one line – I don’t have to write a big fancy script with a return statement, I can just have a one-liner just like that, very simple. That is configured with a replacement token that we will then use in the feature details configuration a little bit later on.
I’ll show you something that’s slightly more complex. Here is the calculation for the population density. We’re going to take the total population and we’re going to divide that by the area and then we’re going to take that around it to two decimal places because we don’t want a big ugly number, two decimal places is fine.
Moving up in complexity – here’s something that queries other data in the map that isn’t actually included in the feature that we are looking at right now. What we’re going to do here, is we’re going to find out the larger community that the census tract is within.
First, we’ll un this Arcade expression called a ‘FeatureSetByID,’ pass it the map variable, and we will pass it the ID of the map service that we want to look at. This has to be a feature layer, and then at the field that we want to return, and then I will get a feature set containing all of the communities on the map, and we will download the name field for each one will leave the other data on the server.
I will assign that the community’s variable (the syntax here is very much like JavaScript if you’re at all familiar with that). We’ll then find the first one that intersects our feature from that data set and if it’s not empty, if we got a result, we’ll return the name of that result otherwise we’ll just return unknown.
The most complicated one here, just to show you know this sky is really the limit you can have multiple functions and loops and a lot of different things going on. What this is doing is it’s going to — very quickly — it’s going to query a layer for intersecting items and the layer is a layer of communications facilities. Then it’s going to sort those by type and it’s going to take the top five by type because I’ve made it a little function called ‘topX,’ which takes a type category and the ID of a map service and a number of results that you want to return, and it will return the top five types of communication facilities located within that census tract, and this is all done on the fly, and is something that no longer requires either custom code or setting up your data beforehand. You can just do it on the fly in the viewer!
Let’s see what that looks like – here’s the LA County sample site. I’ll just Identify some features here, so we can get some census tracts and we’ll have a look at those census tracts. I’br got quite a few here so it’s going to take a little bit to load up and there we go.
I should mention that if you’re carrying another layer, that makes your result asynchronous, so if you’re doing a complex query with a lot of operations or you have simply a large collection of features, it may take some time for that sync operation to resolve.
Here we can see the results of the community or in the wholesale community here, which is kind of the warehousing area on the east side of Los Angeles. We can see that the population which we just grab from the feature, the area which we calculated on the fly, and the population density which we also calculated on the fly. And then we have the top five. Now, we didn’t actually have five separate types of communications infrastructure in the census tract, so it only returned three results and just gave us a little short little report on those things in our feature details, which would also show up in a map tip, if you had a map tip, the same way that feature details regularly works.
I should actually show you the configuration of that. The feature description here looks like that and you can see that your Arcade expressions now show up as replacement tokens that you can add here.
I’ll quickly show you a few more that have been configured here. Let’s take a look at ‘Service Requests’ – this is a little bit of a different one. Here we’ve actually queried for the attachments and we’ve taken those attachments and added them as clickable links directly to the feature descriptions. I can just click on one of the attachments here and view it just like that, right from the feature details or the map tip. That’s because there is an attachments method in Arcade that you can run that will query the server and bring you back information about the attachments on that feature.
Another one – let’s have a look at highways and major roads. Here road class that comes straight from the feature class but passing through a list of all the communities that this particular road passes through and that’s done again by querying the community’s layer, and seeing which features intersect with the linear future. Then we remove duplicates and sort them alphabetically, and that’s all done in the Arcade expression on the fly.
You can see this is very powerful; from very simple things like rounding a number up to more complicated things like determining a population density number or converting degrees Celsius to degrees Fahrenheit, anything like that can be done with Arcade expressions, the sky is really the limit.
These examples are now included in the LA County sample sites. We will be posting up examples of some of the more complex ones that have been included and these have been constructed in such a way that you can just insert the details of your own data and run these on your site pretty much as is. Look for that on our support site soon!
Looking forward to seeing what you guys do with this new feature!
Thanks very much for listening!”
Want to learn more about Geocortex Essentials? Click the button below to dive deeper into the product, or to schedule a personal demonstration.