<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic FRAGSTATS says Reclassify created non-square grids for some of my IMG rasters in Data Management Questions</title>
    <link>https://community.esri.com/t5/data-management-questions/fragstats-says-reclassify-created-non-square-grids/m-p/127507#M7321</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm running ArcGIS 10.2 with an advanced license (student eval).&amp;nbsp; I have a set of 1188 shapefiles, each containing polygons delineating land cover on a given study site.&amp;nbsp; I used the &lt;/SPAN&gt;&lt;STRONG&gt;PolygonToRaster_conversion&lt;/STRONG&gt;&lt;SPAN&gt; tool to convert each shapefile into an IMG raster.&amp;nbsp; If it matters, each polygon shapefile was split out from a single shapefile that originally contained all of the 1188 sites, and was digitized in ArcMap 9.3.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;arcpy.PolygonToRaster_conversion(feature, 'CoverType', 'S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_ftr\\' + feature[:-4] + ".img", 'MAXIMUM_AREA', "#", 0.50)&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So far so good.&amp;nbsp; Next, I used &lt;/SPAN&gt;&lt;STRONG&gt;Reclassify&lt;/STRONG&gt;&lt;SPAN&gt; to change all the various land cover class values to '1', with NODATA for anything outside the external boundary of the study site.&amp;nbsp; This is because I was interested in doing something with just the shape of the study sites for a question I had.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;outReclass = Reclassify(raster, "Value", RemapRange ([[0,15,1]]), "NODATA")
outReclass.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Problem:&lt;/STRONG&gt;&lt;SPAN&gt; For 3 of the 1188 rasters, when I import them into FRAGSTATS 4.1, I get an error message saying that &lt;/SPAN&gt;&lt;STRONG&gt;FRAGSTATS &lt;/STRONG&gt;&lt;SPAN&gt;cannot handle a raster with cells that are non-square.&amp;nbsp; The other 1185 rasters don't exhibit the same issue.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried using &lt;/SPAN&gt;&lt;STRONG&gt;Con&lt;/STRONG&gt;&lt;SPAN&gt; instead of &lt;/SPAN&gt;&lt;STRONG&gt;Reclassify&lt;/STRONG&gt;&lt;SPAN&gt;, but got the same error message in FRAGSTATS.&amp;nbsp; I tried making TIF rasters instead of IMG, but got the same non-square cell error.&amp;nbsp; I also tried &lt;/SPAN&gt;&lt;STRONG&gt;Resample_management&lt;/STRONG&gt;&lt;SPAN&gt; to resize the cells, same problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;outCon = Con(raster, 1, "", "VALUE &amp;gt; 0")
outCon.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;FRAGSTATS will accept the original (non-reclassified) rasters for those 3 sites.&amp;nbsp; What I ended up doing was using the &lt;/SPAN&gt;&lt;STRONG&gt;PolygonToRaster&lt;/STRONG&gt;&lt;SPAN&gt; tool, but using the site ID number as the class, basically skipping the conversion step.&amp;nbsp; But I'm still bothered by why the non-square cell error appeared.&amp;nbsp; I assume it's some kind of rounding issue, but if the initial raster was ok, why would &lt;/SPAN&gt;&lt;STRONG&gt;Con&lt;/STRONG&gt;&lt;SPAN&gt; or &lt;/SPAN&gt;&lt;STRONG&gt;Reclassify&lt;/STRONG&gt;&lt;SPAN&gt; change the raster cells themselves instead of just reassigning values to each cell?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's my entire python code.&amp;nbsp; I'm new at python, and I may not be doing everything optimally, but I don't think I've made an actual error here.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;print ('\n' * 2)
import datetime
import arcpy

"""
ftr()
Reads a directory containing each management unit's land cover shapefile (one shapefile per MU).
Converts all shapefiles into grids (ERDAS IMG format) of a specified cell size.
"""

def ftr():

&amp;nbsp;&amp;nbsp;&amp;nbsp; # ---------------------------------
&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing started."
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')

&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy import env
&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy.sa import *
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckOutExtension ('spatial')
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = "S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\split_shapefiles_2013_0512"
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.cellsize = '0.50'

&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; #featurelist can either look up all features in the workspace, or it can be set to a specific list of features.
&amp;nbsp;&amp;nbsp;&amp;nbsp; featurelist = arcpy.ListFeatureClasses()
&amp;nbsp;&amp;nbsp;&amp;nbsp; #featurelist = ['M0072.shp', 'M0098.shp', 'M0422.shp']&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for feature in featurelist:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if count &amp;lt; 1189:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": " + feature
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.PolygonToRaster_conversion(feature, 'SiteNum_MP', 'S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_ftr\\' + feature[:-4] + ".img", 'MAXIMUM_AREA', "#", 0.50)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing completed."

&amp;nbsp;&amp;nbsp;&amp;nbsp; except KeyboardInterrupt:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ': Run interrupted by user!'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckInExtension ('spatial')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 


"""
rascon()
Takes rasters containing land cover and converts anything with land cover into a value of 1 and 
everything else as a nodata.&amp;nbsp; Essentially, makes a solid raster of each MU that can be used in 
fragstats to calculate SHAPE INDEX for each management unit's external bounds.
"""

def rascon():
&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing started."
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')

&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy import env
&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy.sa import *
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckOutExtension ('spatial')
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = "S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_ftr"
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.cellsize = '0.50'
&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; #raslist can either look up all rasters in the workspace, or it can be set to a specific list of rasters.
&amp;nbsp;&amp;nbsp;&amp;nbsp; raslist = arcpy.ListRasters()
&amp;nbsp;&amp;nbsp;&amp;nbsp; #raslist = ['M0072.img', 'M0098.img', 'M0422.img']&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for raster in raslist:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if count &amp;lt; 4:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": " + raster
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #outCon = Con(raster, 1.0,)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #outCon = Con(raster, 1, "", "VALUE &amp;gt; 0")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #outCon.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outReclass = Reclassify(raster, "Value", RemapRange ([[0,15,1]]), "NODATA")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outReclass.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing completed."

&amp;nbsp;&amp;nbsp;&amp;nbsp; except KeyboardInterrupt:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ': Run interrupted by user!'


&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckInExtension ('spatial')

ftr()
rascon()
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 07:13:36 GMT</pubDate>
    <dc:creator>MParrish</dc:creator>
    <dc:date>2021-12-11T07:13:36Z</dc:date>
    <item>
      <title>FRAGSTATS says Reclassify created non-square grids for some of my IMG rasters</title>
      <link>https://community.esri.com/t5/data-management-questions/fragstats-says-reclassify-created-non-square-grids/m-p/127507#M7321</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm running ArcGIS 10.2 with an advanced license (student eval).&amp;nbsp; I have a set of 1188 shapefiles, each containing polygons delineating land cover on a given study site.&amp;nbsp; I used the &lt;/SPAN&gt;&lt;STRONG&gt;PolygonToRaster_conversion&lt;/STRONG&gt;&lt;SPAN&gt; tool to convert each shapefile into an IMG raster.&amp;nbsp; If it matters, each polygon shapefile was split out from a single shapefile that originally contained all of the 1188 sites, and was digitized in ArcMap 9.3.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;arcpy.PolygonToRaster_conversion(feature, 'CoverType', 'S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_ftr\\' + feature[:-4] + ".img", 'MAXIMUM_AREA', "#", 0.50)&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;So far so good.&amp;nbsp; Next, I used &lt;/SPAN&gt;&lt;STRONG&gt;Reclassify&lt;/STRONG&gt;&lt;SPAN&gt; to change all the various land cover class values to '1', with NODATA for anything outside the external boundary of the study site.&amp;nbsp; This is because I was interested in doing something with just the shape of the study sites for a question I had.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;outReclass = Reclassify(raster, "Value", RemapRange ([[0,15,1]]), "NODATA")
outReclass.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;Problem:&lt;/STRONG&gt;&lt;SPAN&gt; For 3 of the 1188 rasters, when I import them into FRAGSTATS 4.1, I get an error message saying that &lt;/SPAN&gt;&lt;STRONG&gt;FRAGSTATS &lt;/STRONG&gt;&lt;SPAN&gt;cannot handle a raster with cells that are non-square.&amp;nbsp; The other 1185 rasters don't exhibit the same issue.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I tried using &lt;/SPAN&gt;&lt;STRONG&gt;Con&lt;/STRONG&gt;&lt;SPAN&gt; instead of &lt;/SPAN&gt;&lt;STRONG&gt;Reclassify&lt;/STRONG&gt;&lt;SPAN&gt;, but got the same error message in FRAGSTATS.&amp;nbsp; I tried making TIF rasters instead of IMG, but got the same non-square cell error.&amp;nbsp; I also tried &lt;/SPAN&gt;&lt;STRONG&gt;Resample_management&lt;/STRONG&gt;&lt;SPAN&gt; to resize the cells, same problem.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;outCon = Con(raster, 1, "", "VALUE &amp;gt; 0")
outCon.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)
&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;FRAGSTATS will accept the original (non-reclassified) rasters for those 3 sites.&amp;nbsp; What I ended up doing was using the &lt;/SPAN&gt;&lt;STRONG&gt;PolygonToRaster&lt;/STRONG&gt;&lt;SPAN&gt; tool, but using the site ID number as the class, basically skipping the conversion step.&amp;nbsp; But I'm still bothered by why the non-square cell error appeared.&amp;nbsp; I assume it's some kind of rounding issue, but if the initial raster was ok, why would &lt;/SPAN&gt;&lt;STRONG&gt;Con&lt;/STRONG&gt;&lt;SPAN&gt; or &lt;/SPAN&gt;&lt;STRONG&gt;Reclassify&lt;/STRONG&gt;&lt;SPAN&gt; change the raster cells themselves instead of just reassigning values to each cell?&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Here's my entire python code.&amp;nbsp; I'm new at python, and I may not be doing everything optimally, but I don't think I've made an actual error here.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;print ('\n' * 2)
import datetime
import arcpy

"""
ftr()
Reads a directory containing each management unit's land cover shapefile (one shapefile per MU).
Converts all shapefiles into grids (ERDAS IMG format) of a specified cell size.
"""

def ftr():

&amp;nbsp;&amp;nbsp;&amp;nbsp; # ---------------------------------
&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing started."
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')

&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy import env
&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy.sa import *
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckOutExtension ('spatial')
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = "S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\split_shapefiles_2013_0512"
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.cellsize = '0.50'

&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; #featurelist can either look up all features in the workspace, or it can be set to a specific list of features.
&amp;nbsp;&amp;nbsp;&amp;nbsp; featurelist = arcpy.ListFeatureClasses()
&amp;nbsp;&amp;nbsp;&amp;nbsp; #featurelist = ['M0072.shp', 'M0098.shp', 'M0422.shp']&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for feature in featurelist:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if count &amp;lt; 1189:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": " + feature
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.PolygonToRaster_conversion(feature, 'SiteNum_MP', 'S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_ftr\\' + feature[:-4] + ".img", 'MAXIMUM_AREA', "#", 0.50)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing completed."

&amp;nbsp;&amp;nbsp;&amp;nbsp; except KeyboardInterrupt:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ': Run interrupted by user!'
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckInExtension ('spatial')
&amp;nbsp;&amp;nbsp;&amp;nbsp; 


"""
rascon()
Takes rasters containing land cover and converts anything with land cover into a value of 1 and 
everything else as a nodata.&amp;nbsp; Essentially, makes a solid raster of each MU that can be used in 
fragstats to calculate SHAPE INDEX for each management unit's external bounds.
"""

def rascon():
&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing started."
&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')

&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy import env
&amp;nbsp;&amp;nbsp;&amp;nbsp; from arcpy.sa import *
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckOutExtension ('spatial')
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.workspace = "S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_ftr"
&amp;nbsp;&amp;nbsp;&amp;nbsp; env.cellsize = '0.50'
&amp;nbsp;&amp;nbsp;&amp;nbsp; count = 0
&amp;nbsp;&amp;nbsp;&amp;nbsp; #raslist can either look up all rasters in the workspace, or it can be set to a specific list of rasters.
&amp;nbsp;&amp;nbsp;&amp;nbsp; raslist = arcpy.ListRasters()
&amp;nbsp;&amp;nbsp;&amp;nbsp; #raslist = ['M0072.img', 'M0098.img', 'M0422.img']&amp;nbsp; 

&amp;nbsp;&amp;nbsp;&amp;nbsp; try:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for raster in raslist:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if count &amp;lt; 4:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": " + raster
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #outCon = Con(raster, 1.0,)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #outCon = Con(raster, 1, "", "VALUE &amp;gt; 0")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #outCon.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outReclass = Reclassify(raster, "Value", RemapRange ([[0,15,1]]), "NODATA")
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; outReclass.save("S:\\perpetual\\fragstats_grids\\ext_bounds_grids\\out_rascon\\MU_" + raster)

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; count = count + 1

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ('\n')
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ": Geoprocessing completed."

&amp;nbsp;&amp;nbsp;&amp;nbsp; except KeyboardInterrupt:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print str(datetime.datetime.now())&amp;nbsp; + ': Run interrupted by user!'


&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.CheckInExtension ('spatial')

ftr()
rascon()
&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/PRE&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 07:13:36 GMT</pubDate>
      <guid>https://community.esri.com/t5/data-management-questions/fragstats-says-reclassify-created-non-square-grids/m-p/127507#M7321</guid>
      <dc:creator>MParrish</dc:creator>
      <dc:date>2021-12-11T07:13:36Z</dc:date>
    </item>
  </channel>
</rss>

