FEMA - USA Flood Hazard Reduced Set. Is the ESRI Symbology different from FEMA Flood zone type?

274
2
08-04-2021 05:48 PM
RobertSiri
New Contributor

Hi I have noticed that ESRI has its own attribute called "ESRI Symbology" for categorizing the FEMA Flood zones in this Living atlas service: https://www.arcgis.com/home/item.html?id=2b245b7f816044d7a779a61a5844be23

I filtered the dataset for only 0.2% Annual Chance Flood Hazard, but I am still noticing Flood Zone Subtypes that are not a 0.2% Annual Chance still within the service after this filter is applied and I am wonder how ESRI + FEMA decided on this?

I did some digging an noticed that when the filter below is applied, Flood Zone Subtypes still shows areas of 1 Percent Depth Less Than 1 Foot, Area of Special Consideration and 1 Percent Drainage Area Less Than 1 Square Mile as an ESRI symbology of 0.2% Annual Chance Flood Hazard.

"esri_symbology = '0.2% Annual Chance Flood Hazard' And ZONE_SUBTY NOT IN ('0.2 PCT ANNUAL CHANCE FLOOD HAZARD IN COMBINED RIVERINE AND COASTAL ZONE', '0.2 Percent Annual Chance Flood Hazard', '0.2 Percent Annual Chance Flood Hazard Contained in Channel', '0.2 Percent Annual Chance Flood Hazard Contained in Structure', '0.2 Percent Annual Chance Flood Hazard in Coastal Zone')"

RobertSiri_0-1628124167997.png

This seems incorrect to what documentation FEMA has on their site. https://www.fema.gov/glossary/flood-zones

Again I am just looking for some clarity as to how the "esri_symbology" category was curated. 

Thanks!!

 

 

 

 

0 Kudos
2 Replies
BernSzukalski
Esri Regular Contributor

I've connected with the Living Atlas team on this question, a response will be forthcoming... Thanks!

0 Kudos
Michael_Dangermond_Content
New Contributor

Hi Robert,

In 2018 I reached out to FEMA for advice on symbology. They sent me two MXDs they used to symbolize the layer for their own services. In that, they used combinations from two categories in the FEMA flood zones to create a symbol: FLD_ZONE and ZONE_SUBTY. Some of the combinations seemed contraintuitive so I reconfirmed with them, and the result is what you see in the feature and image layers in the Living Atlas.

Every year, sometimes twice a year, a script is run against the FEMA flood layer update to assign the esri_symbology field from these fields: FLD_ZONE, ZONE_SUBTY. Then the layer is updated with that.

You found some of the more unusual combinations which led to symbols receiving a 0.2% flood hazard color, it seemed strange to me too but I got confirmation from the agency August 1, 2018.

The symbols they recommended seemed more about people understanding the layer more than simply assigning a color to a code, so the symbology was well received as a "front end" to the dataset.

Every polygon is put through the following decision tree to determine its esri_symbology value (row[2]). The result is an integer between 0 and 15 and that value is also rasterized to create the image layer:

    print("Cursoring through copy of FEMA feature class and populating esri_symbology...")
    with arcpy.da.UpdateCursor(incodedfema,["FLD_ZONE","ZONE_SUBTY","esri_symbology"]) as cursor:
        for row in cursor:
            if row[0] == "A":
                if row[1] == 'ADMINISTRATIVE FLOODWAY':
                    row[2] = 2 #Regulatory Floodway
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "A99":
                if row[1] == "AREA WITH REDUCED FLOOD RISK DUE TO LEVEE":
                    row[2] = 7 #Area with Reduced Risk Due to Levee
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "AE":
                if row[1] == 'AREA OF SPECIAL CONSIDERATION':
                    row[2] = 3 ##Special Floodway
                elif row[1] == 'COLORADO RIVER FLOODWAY':
                    row[2] = 3 ##Special Floodway
                elif row[1] == "FLOODWAY CONTAINED IN STRUCTURE":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "STATE ENCROACHMENT AREA":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "FLOODWAY":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "1 PCT CONTAINED IN STRUCTURE, COMMUNITY ENCROACHMENT":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "1 PCT CONTAINED IN STRUCTURE, FLOODWAY":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "FLOODWAY CONTAINED IN CHANNEL":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "COMMUNITY ENCROACHMENT AREA":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "COMMUNITY ENCROACHMENT":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "ADMINISTRATIVE FLOODWAY":
                    row[2] = 2 #Regulatory Floodway
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "AH":
                if row[1] == 'FLOODWAY':
                    row[2] = 2 #Regulatory Floodway
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "AO":
                if row[1] == 'FLOODWAY':
                    row[2] = 2 #Regulatory Floodway
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "AREA NOT INCLUDED":
                row[2] = 15 #nodata

            elif row[0] == "D":
                row[2] = 4 #Area of Undetermined Flood Hazard

            elif row[0] == "NP":
                row[2] = 15 #nodata

            elif row[0] == "OPEN WATER":
                row[2] = 15 #nodata

            elif row[0] == "V":
                if row[1] == "COMMUNITY ENCROACHMENT AREA":
                    row[2] = 2 #Regulatory Floodway
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "VE":
                if row[1] == "COMMUNITY ENCROACHMENT AREA":
                    row[2] = 2 #Regulatory Floodway
                else:
                    row[2] = 1 #1% Annual Chance Flood Hazard

            elif row[0] == "X":
                if row[1] == "AREA WITH REDUCED FLOOD RISK DUE TO LEVEE":
                    row[2] = 7 #Area with Reduced Risk Due to Levee
                elif row[1] == "1 PCT FUTURE CONDITIONS":
                    row[2] = 6 #Future Conditions 1% Annual Chance Flood Hazard
                elif row[1] == "1 PCT FUTURE CONDITIONS, FLOODWAY":
                    row[2] = 6 #Future Conditions 1% Annual Chance Flood Hazard
                elif row[1] == "1 PCT FUTURE CONDITIONS, COMMUNITY ENCROACHMENT":
                    row[2] = 6 #Future Conditions 1% Annual Chance Flood Hazard
                elif row[1] == "1 PCT FUTURE CONDITIONS CONTAINED IN STRUCTURE":
                    row[2] = 6 #Future Conditions 1% Annual Chance Flood Hazard
                elif row[1] == "1 PCT FUTURE IN STRUCTURE, COMMUNITY ENCROACHMENT":
                    row[2] = 6 #Future Conditions 1% Annual Chance Flood Hazard
                elif row[1] == "1 PCT FUTURE IN STRUCTURE, FLOODWAY":
                    row[2] = 6 #Future Conditions 1% Annual Chance Flood Hazard
                elif row[1] == "0.2 PCT ANNUAL CHANCE FLOOD HAZARD":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "0.2 PCT ANNUAL CHANCE FLOOD HAZARD CONTAINED IN CHANNEL":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "0.2 PCT ANNUAL CHANCE FLOOD HAZARD CONTAINED IN STRUCTURE":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "1 PCT CONTAINED IN STRUCTURE, COMMUNITY ENCROACHMENT":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "1 PCT DEPTH LESS THAN 1 FOOT":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "1 PCT DRAINAGE AREA LESS THAN 1 SQUARE MILE":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "AREA OF SPECIAL CONSIDERATION":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "1 PCT CONTAINED IN STRUCTURE, FLOODWAY":
                    row[2] = 2 #Regulatory Floodway
                elif row[1] == "0.2 PCT ANNUAL CHANCE FLOOD HAZARD IN COASTAL ZONE":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                elif row[1] == "0.2 PCT ANNUAL CHANCE FLOOD HAZARD IN COMBINED RIVERINE AND COASTAL ZONE":
                    row[2] = 5 #0.2% Annual Chance Flood Hazard
                else:
                    row[2] = 8 #AREA OF MINIMAL FLOOD HAZARD

            else:
                row[2] = 15
                print("missing category in dataset, please check the logic in the script")
            cursor.updateRow(row)