Related Tables in Arcgisonline

228
4
02-19-2021 01:26 PM
Labels (2)
GaryMorris
New Contributor II

I have a Parcel layer that includes zoning and a related table of zoning conditions.  I would like to add the count of zoning conditions and the conditions to my parcel layer popup.  I'm not sure where to start, any help would be appreciated.

0 Kudos
4 Replies
jcarlson
MVP Regular Contributor

It depends on how your layers are set up, but I like to use FeatureSetByPortalItem, as it is not dependent upon the second layer (in this case, zoning) actually being in the map.

Getting the count is simple enough, but getting the "conditions", which I assume means a list of the unique zoning types, is somewhat more complex, but still doable.

Count of Zoning Types

 

var yourPortal = Portal('your-portal-url') // This can be your org's AGOL url, too.

var zoning = FeatureSetByPortalItem(yourPortal, 'item-id-of-zoning-layer', 0)

var zones = Intersects($feature, zoning)
// Will grab any zoning shape which intersects with the given parcel, so alignment is critical.

return Count(zones)
// Returns the length of the 'zones' array, being the number of zoning features intersected.

 

As noted in the code, your alignment between layers will significantly impact the number of features returned by Intersects. In order to avoid false positives, it may be advisable to call "Buffer($feature, -5)" instead of "$feature", but test things out and see what results you get.

List of Zoning Types

Works the similarly to the code above, but uses the "zones" FeatureSet to assemble an output array.

 

var yourPortal = Portal('your-portal-url')

var zoning = FeatureSetByPortalItem(yourPortal, 'item-id-of-zoning-layer', 0)

var zones = Intersects($feature, zoning)

var zone_array = []
var zone_index = 0

for(var z in zones){
    zone_array[zone_index] = z.zoning_condition_field
// Adds the zoning condition of the given intersected feature to the zone_array object at the position zone_index
    ++ zone_index
// Ensures that if there are more than one zoning conditions, the next value is added at the next position in the list, otherwise the previous value would simple be overwritten
}

return zone_array

 

We use something like this to grab a parcel's intersected Flood Zones from FEMA's Flood Hazard Layer.

jcarlson_0-1613782173633.png

Of course, should you want the output array formatted a little more nicely, you could easily adjust your Arcade code to do that as well.

Example: Unique Floodway Zones with Count and Formatting

 

// Zones array
var z_arr = []
var z_ind = Number('0')

// Intersect feature and flood zones
var zones = Intersects($feature, FeatureSetByName($map,"USA Flood Hazard Areas"))

for (var z in zones){
    var zone = z.FLD_ZONE
    if (find(zone, z_arr)== -1){
// Only appends new value if it is not currently found in the index, i.e., no duplicates.
        z_arr[z_ind] = zone
        ++z_ind
    }
}

var out_str = Count(z_arr) + ' Floodway Zones:'
// Includes count in same expression as a "heading" to the list.

for (var n in z_arr){
    out_str += '\n' + z_arr[n]
}

return out_str

 

 

jcarlson_2-1613783159093.png

 

 

So as you can see, it's not that complicated, but does require some more advanced Arcade.

 

- Josh Carlson
Kendall County GIS
DerrickWestoby
New Contributor III

This was a very helpful post, Josh.  Thank you for taking the time to post those examples. 

0 Kudos
GaryMorris
New Contributor II

Thank you for your help Josh, I forgot to come back in here and tell you that this worked perfectly!

jcarlson
MVP Regular Contributor

Great! Glad to hear it!

- Josh Carlson
Kendall County GIS