Select to view content in your preferred language

Remove Islands

6626
16
12-26-2014 12:16 PM
AndrewBivins
Regular Contributor

I have created a .shp file of slopes over a range land environment.  The goal is to identify any slope over 15% and remove it form the file to calculate graze-able acres.  The attached file show a zoomed in area where white no data area encircles flat land(basically a butt or plateau).  Obviously grazing animals can not get to the top of the butt to graze but its flat so it shows up as graze-able.  I need to find a way to identify and remove all these areas.

Any thoughts?

Thanks,

0 Kudos
16 Replies
DanielErklauer
Deactivated User

Are you trying to automate this or is it a one time deal?  you have several options

1.  Create contours based on gradient and then use clipping.

2.  Perform a slope analysis and clip based on the result or.

3.  Run the Cost Distance tool as Xander suggested.

0 Kudos
XanderBakker
Esri Esteemed Contributor

Options 1 and 2 do not account for the those areas that are flat but surrounded by inaccesible áreas...

0 Kudos
DanielErklauer
Deactivated User

Both the proposed solutions work if this is not going to be a programed task.  You could clip based on either the slope analysis or gradient contours and then interpretively analyze the result.  If you still have areas you want removed re-query the contours and clip again and calculate the total area based on the resultant.  All and all this should take you about 30 minutes.  This solution wont work if you are programmatically analyzing the data set because the question is more complicated than a straight forward if-then statement.

0 Kudos
ChrisDonohue__GISP
MVP Alum

Maybe  Daniels' idea 1 (contours) could be modified to make it workable?  An idea I'll toss out:

1. Create contours, but based on elevations (not gradient).

2. Derive the 15%+ slopes and convert to polygons.

3.  Now Dissolve the polygons.

4.  Clip the contours based on the Dissolved slope polygons to find only the contours in steep areas.

5.  Run Feature to Polygon to convert the clipped contours to polygons if they do indeed circle an area.  Not totally sure this last step would work, but may be worth a try.

Caveat:  Even if this works from a topological perspective, it won't work if the steep areas that encircle a butte vary in elevation as they encircle it.  So it will be limited by the morphology/geology of your study area.  For example, if the butte's are in a sandstone formation with a substantial dip (angle), this won' be effective.

Chris Donohue, GISP

0 Kudos
DarrenWiens2
MVP Alum

For me, the most straight-forward method would be:

1.) Reclassify your raster into 1 (slope <15%), NoData (slope >=15%).

2.) Use Region Group to group connected polygons. Your buttes should be relatively small groups compared to the surrounding matrix.

3.) Use Con (or other filtering method of your choice) to remove the identified islands from the original raster.

XanderBakker
Esri Esteemed Contributor

Indeed the region group tool is a method to obtain the result.+1 for that!

XanderBakker
Esri Esteemed Contributor

Yesterday I performed some steps on the dataset provided by Andrew. See them listed below:

# Create a hillshade for visualization
arcpy.gp.HillShade_sa("ned10m34101g3","C:/Forum/Pasture/gdb/Pasture.gdb/HillShade","315","45","NO_SHADOWS","1")


# Calculate the slope in percentage based on your DEM ("ned10m34101g3")
arcpy.gp.Slope_sa("ned10m34101g3","C:/Forum/Pasture/gdb/Pasture.gdb/Slope","PERCENT_RISE","1")


# Reclassify the slope in two classes 0-15% and >15%
arcpy.gp.Reclassify_sa("Slope","Value","0 15 1;15 159,99526977539062 2","C:/Forum/Pasture/gdb/Pasture.gdb/SlopeClfy","DATA")


# Set those areas to NoData that have a slope > 15% (value = 2)
arcpy.gp.SetNull_sa("SlopeClfy","SlopeClfy","C:/Forum/Pasture/gdb/Pasture.gdb/SlopeSetNull","Value = 2")


# Calculate the cost distance from the water points, using SlopeSetNull as cost raster (slopes > 15% are inaccessible)
arcpy.gp.CostDistance_sa("Water","SlopeSetNull","C:/Forum/Pasture/gdb/Pasture.gdb/CostWater")

The result looks something like this (accessibility calculated from water points are represented with blue area):

SampleResult.png