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

1513
6
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
6 Replies
BernSzukalski
Esri Frequent 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 II

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)
NicolasGrapsas
New Contributor

Hi guys, I need to generate raster tiles for fema floodzones

wondering which software/tool have u used to process the entire United States and how much computing power do I need (ram, cores, etc)

 

do u process it all at once or some chunk strategy ? Do u simplify the poligons in some way ?

 

thanks !

 

0 Kudos
Michael_Dangermond_Content
New Contributor II

Hi Nicolas, we already have a raster service of the flood zones in the Living Atlas you can just connect to and use. It's available in three resolutions, 10m, 30m, and 90m. Besides resolution you can symbolize the rasters in three ways. One is the recommended display method by FEMA, the default cartographic renderer. A second way displays only areas where flood insurance is required. The third way simply symbolizes on the FLD_ZONE field in case you want to break things out with that category.

If you really want to generate these yourself, I would recommend doing it in pieces (Alaska, Alaska in the eastern hemisphere, Hawaii, CONUS, PR/USVI, and so on). We used the dice geoprocessing tool in ArcGIS Pro with FEMA's polygons to limit the number of vertices in the input polygons to 50,000. This makes polygons a bit simpler and more compact for raster processing. We also run repair geometry in ArcGIS Pro before making rasters.

Good luck! I would check with our raster layer in the Living Atlas and see if it meets your needs. That's what we're here for is so nobody else has to do this. Also the Living Atlas raster layer is updated once a year. If you use the online layer it will magically be updated next year without you having to do a thing. Just like it was this year.

NicolasGrapsas
New Contributor

Hi Michael, thanks for the quick reply and detailed information, it was very helpful !

I've been able to generate the raster tiles for a given subset of texas.

While i was reviewing the results, i've noted there are some missing polygons (compared to redfin.com floodzone map)

I think the living atlas has the same problem as my version (attaching screenshot: redfin vs living atlas)

Do u know if its due a processing error or if its a fema probelm and redfin may have a different source of data ?

Screenshot 2023-01-27 at 14.28.27.png

0 Kudos
Michael_Dangermond_Content
New Contributor II

Hi Nicolas! It looks like their source begins with FEMA as a point of departure and models flood risk for the rest of the USA. Their map says their data source is risk factor. For a reality check to see if a flood zone you see matches FEMA I would use the agency's own flood hazard viewer found on this page. Living Atlas team knows that there are a lot of ways to work with flood risk and we appreciate the efforts to model flood risk around the USA, but in this layer we stick close to FEMA because our customers also want to know what's legally required of them by these flood zones, at as high resolution as is practicable. Living Atlas Team also serve a layer put out by NRCS the soils people called USA SSURGO Flooding Frequency, which shows how often a soil map unit polygon is expected to flood. This has better temporal resolution than FEMA, but less spatial resolution, as detailed in this blog.