I'm attempting to create a map series that references a polygon layer as the extent. I would like the area around the current page's polygon to have a gray tint over it so that the current polygon being displayed is the main focus. Any suggestions on how to do this?
Solved! Go to Solution.
You can use page queries to do this! A page query will update for each page in the map series. Any layer can have a page query as long as the layer has an attribute the corresponds to the name of the map series page. With a page query you can choose to show only the data that matches that attribute or the data that doesn't.
So if I had a map series going through all the counties in a state, I could add a layer that symbolizes all counties with a gray tint. Then I apply a page query to that layer to draw only the data that doesn't match the map series page name. This draws the tint over every polygon except the one for the current map series page, highlighting it.
You can learn more about page queries here: https://pro.arcgis.com/en/pro-app/latest/help/layouts/page-queries.htm
Duplicate the layer containing the polygons with the map sections. Symbolise one of these layers as the active section should look (e.g. only a black frame and without fill colour). The second layer is symbolised as the neighbouring sections should look (e.g. with a grey frame and light grey or white fill colour with 50% transparency, so that the map image behind it is less dominant).
While iterating through the FeatureClass with the map sections, you continuously update a DefinitionQuery on both layers: On one layer so that only the current polygon feature is loaded, on the other so that all except the current polygon features are loaded.
Unfortunately I don't have a corresponding script in Python 3 and with arcpy.mp-Package at hand, but here is an example in Python 2, i think the principle stays the same in APRO/Py3:
with arcpy.da.SearchCursor(fcMapextent, ["Sheet_Nr", "SHAPE@"]) as cursor:
for row in cursor:
# config. definition queries
queryActive = "Sheet_Nr = '" + row[0] + "'"
queryInactive = "Sheet_Nr <> '" + row[0] + "'"
# config. layers
lyrActive = arcpy.mapping.ListLayers(mxd, "Map_Extent_active")[0]
lyrInactive = arcpy.mapping.ListLayers(mxd, "Map_Extent_inactive")[0]
lyrActive.definitionQuery = queryActive
lyrInactive.definitionQuery = queryInactive
# pan and scale
df.extent = row[1].extent
df.scale = 2000
# export
arcpy.RefreshTOC
arcpy.RefreshActiveView
arcpy.mapping.ExportToPNG(mxd,path + r"\Output\\" + "Sheet_" + row[0] + ".png", resolution = 300)
Sorry that I can't provide a finished script for Arcgis Pro yet, but I hope this helps to at least get the idea.
Clip Layers might do it.
https://pro.arcgis.com/en/pro-app/latest/help/mapping/properties/clip-layers-in-a-map.htm
You can use page queries to do this! A page query will update for each page in the map series. Any layer can have a page query as long as the layer has an attribute the corresponds to the name of the map series page. With a page query you can choose to show only the data that matches that attribute or the data that doesn't.
So if I had a map series going through all the counties in a state, I could add a layer that symbolizes all counties with a gray tint. Then I apply a page query to that layer to draw only the data that doesn't match the map series page name. This draws the tint over every polygon except the one for the current map series page, highlighting it.
You can learn more about page queries here: https://pro.arcgis.com/en/pro-app/latest/help/layouts/page-queries.htm