<?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 Layers in Current Visible Extent in Python Questions</title>
    <link>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194819#M14954</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Greetings,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm looking to turn off all of the layers NOT in the current visible extent. I figured a Python Add-In would be the easiest way to achieve this functionality.&amp;nbsp; I've snooped around the arcpy classes and their methods, and I'm not seeing what I'm looking for (i.e. Layer.inVisibleExtent).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does this mean I'll have to create an add-in with .Net/ArcObjects? I've seen the powerpoint that's floating around about accessing Arc Objects with Python, but don't necessarily want to go that route.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Colin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Fri, 09 May 2014 14:50:42 GMT</pubDate>
    <dc:creator>ColinStief1</dc:creator>
    <dc:date>2014-05-09T14:50:42Z</dc:date>
    <item>
      <title>Layers in Current Visible Extent</title>
      <link>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194819#M14954</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;Greetings,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;I'm looking to turn off all of the layers NOT in the current visible extent. I figured a Python Add-In would be the easiest way to achieve this functionality.&amp;nbsp; I've snooped around the arcpy classes and their methods, and I'm not seeing what I'm looking for (i.e. Layer.inVisibleExtent).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Does this mean I'll have to create an add-in with .Net/ArcObjects? I've seen the powerpoint that's floating around about accessing Arc Objects with Python, but don't necessarily want to go that route.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Colin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 09 May 2014 14:50:42 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194819#M14954</guid>
      <dc:creator>ColinStief1</dc:creator>
      <dc:date>2014-05-09T14:50:42Z</dc:date>
    </item>
    <item>
      <title>Re: Layers in Current Visible Extent</title>
      <link>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194820#M14955</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I actually just answered a similar question in &lt;/SPAN&gt;&lt;A href="http://forums.arcgis.com/threads/109368-Analyze-Map-Extent-for-Visible-Layers?p=387391#post387391" rel="nofollow noopener noreferrer" target="_blank"&gt;this&lt;/A&gt;&lt;SPAN&gt; post.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Essentially my solution is to take the extent of the layer you want to test, convert it's extent box to a Polygon geometry object, and use the "overlaps" method of the &lt;/SPAN&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.1/index.html#//018z00000072000000" rel="nofollow noopener noreferrer" target="_blank"&gt;Extent&lt;/A&gt;&lt;SPAN&gt; arcpy object to test if that geometry is in your dataframe extent (visible).&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Code Example:&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# Get your Feature Layer extent
layer = arcpy.mapping.Layer("Your Feature Layer")
extent = arcpy.Describe(layer).extent

# Create a Polygon object from that extent
extentArray = arcpy.Array(i for i in (extent.lowerLeft,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.lowerRight,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.upperRight,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.upperLeft,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.lowerLeft))

extentPolygon = arcpy.Polygon(extentArray, arcpy.SpatialReference(4326))
del extentArray&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Now you have a Polygon Geometry object that represents the extent around the feature you want to test for visibility.&lt;/SPAN&gt;&lt;BR /&gt;&lt;SPAN&gt;All that's left now is to use the "overlaps" method of the Extent object to see if your feature layer is visible in your dataframe.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;# Get reference to your dataframe
mxd = arcpy.mapping.MapDocument("CURRENT") 
df = arcpy.mapping.ListDataFrames(mxd, "*")[0]

# Whenever appropriate, test if the layerframe overlaps the extent geometry of your feature layer
if df.extent.overlaps(extentPolygon) == False:
&amp;nbsp;&amp;nbsp;&amp;nbsp; layer.visible = False
&amp;nbsp;&amp;nbsp;&amp;nbsp; arcpy.RefreshActiveView()&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Depending how you want to implement this, you may want to use &lt;/SPAN&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.1/index.html#//00s30000002n000000" rel="nofollow noopener noreferrer" target="_blank"&gt;List Layers&lt;/A&gt;&lt;SPAN&gt; to do this with all your layers.&amp;nbsp; You may also need some logic to detect whether your layers are already visible or not, but this should give you the general idea.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Hope it helps!&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 09:45:43 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194820#M14955</guid>
      <dc:creator>MattEiben</dc:creator>
      <dc:date>2021-12-11T09:45:43Z</dc:date>
    </item>
    <item>
      <title>Re: Layers in Current Visible Extent</title>
      <link>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194821#M14956</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;eibenm,&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Thanks for the help, your logic worked great. I beefed it up a little to make sure that anything within the visible extent stays visible.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;STRONG&gt;One caution&lt;/STRONG&gt;&lt;SPAN&gt; to anybody that grabs this: it breaks for polygons or polylines whose actual extent meets the criteria, but visible extent does not. In other words, if your polygon is present just off screen to the left, and also just off screen to the top, for instance, it will still be left visible. In my case, this code suits my needs because I'm only using square rasters whose visible extent is the same as their actual extent.&lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;import arcpy

# Get reference to your dataframe
mxd = arcpy.mapping.MapDocument("CURRENT") 
df = arcpy.mapping.ListDataFrames(mxd, "*")[0]

# Loop through layers in first dataframe
for lyr in arcpy.mapping.ListLayers(mxd, "", df):
&amp;nbsp;&amp;nbsp;&amp;nbsp; extent = arcpy.Describe(lyr).extent
&amp;nbsp;&amp;nbsp;&amp;nbsp; extentArray = arcpy.Array(i for i in (extent.lowerLeft,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.lowerRight,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.upperRight,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.upperLeft,
&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;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; extent.lowerLeft))
&amp;nbsp;&amp;nbsp;&amp;nbsp; extentPolygon = arcpy.Polygon(extentArray, arcpy.SpatialReference(4269))

&amp;nbsp;&amp;nbsp;&amp;nbsp; # Check if the layer can be seen at all... if not, turn it off
&amp;nbsp;&amp;nbsp;&amp;nbsp; if (df.extent.overlaps(extentPolygon) == True or
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; df.extent.within(extentPolygon) == True or
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; df.extent.contains(extentPolygon) == True):
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyr.visible = True
&amp;nbsp;&amp;nbsp;&amp;nbsp; else:
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lyr.visible = False

&amp;nbsp;&amp;nbsp;&amp;nbsp; del extent
&amp;nbsp;&amp;nbsp;&amp;nbsp; del extentArray
&amp;nbsp;&amp;nbsp;&amp;nbsp; del extentPolygon

# Refresh the View&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
arcpy.RefreshActiveView()&lt;/PRE&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;Colin&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sun, 12 Dec 2021 16:10:08 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194821#M14956</guid>
      <dc:creator>ColinStief1</dc:creator>
      <dc:date>2021-12-12T16:10:08Z</dc:date>
    </item>
    <item>
      <title>Re: Layers in Current Visible Extent</title>
      <link>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194822#M14957</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;SPAN&gt;I'm glad that worked out for you Colin!&amp;nbsp; I did a little more research afterwards and found this method.&amp;nbsp; &lt;/SPAN&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;A href="http://resources.arcgis.com/en/help/main/10.2/index.html#//00170000003q000000"&gt;Minimum Bounding Geometry&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;SPAN&gt;You should definitely look into using this with "CONVEX_HULL" as your geometry type.&amp;nbsp; While my method works great for you due to your raster cells fitting my method well, this approach may work better for testing if other less rectangular vector types are visible.&lt;/SPAN&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 10 May 2014 14:05:39 GMT</pubDate>
      <guid>https://community.esri.com/t5/python-questions/layers-in-current-visible-extent/m-p/194822#M14957</guid>
      <dc:creator>MattEiben</dc:creator>
      <dc:date>2014-05-10T14:05:39Z</dc:date>
    </item>
  </channel>
</rss>

