The map series is useful if all layout details are essentially the same. If you need to annotate pages differently in a substantial fashion, a map series is overly restrictive.
If it were possible to export/convert a map series into individual maps and layouts, it would allow the user to do the majority of the work in the series, then edit the individual layouts separately.
I'm asking for the ability to convert a map series to individual maps and layouts.
Hello Greg,
Have you considered Python Map Automation?
https://pro.arcgis.com/en/pro-app/latest/arcpy/mapping/introduction-to-arcpy-mp.htm
I don't know the details of your project but I personally think creating a layout for each map series page can be a bit too much for the project and difficult to make the same updates to all layouts, if ever needed.
I'm not clear on how your need "annotate" from page to page but there could be a solution with a single layout. If you are using annotation, those layers could be duplicated, one for each layout, or use a definition query to control the visible anno features. By using python code along with your map series you can customize what happens from page to page. Arcpy.mp can easily control the visibility of layers or set properties like definition query, etc. If you are familiar with Python, we have a couple of samples you might want to evaluate:
Go to: https://esriurl.com/arcpy.mp/samples (for all our samples)
Then check out: Thematic Map Series and MultipleElementLayoutManager samples
The later is a bit more advances in that all information is persisted in a table that controls exactly what gets displayed on a layout.
Jeff - Layout and arcpy.mp teams.
@GregWyatt from your description, it sounds like this idea https://community.esri.com/t5/arcgis-pro-ideas/map-series-page-editing/idi-p/936412
Kory is correct. This is the same problem. I hadn't found that Idea when I posted. I was suggesting a means to this end of the same problem.
Although if I had a 256 page map and layout project like SarahParks, I would REALLY want to have the ArcGIS Pro equivalent of the MXD Doctor to save the project if it got corrupted. (Yes, I know, a separate Idea posting)🙂
Greg,
Thanks for the clarification. I personally wouldn't give up on python automation, but that's me, a Python automation guy. The second sample was based on a customer project I built for a customer with the exact issue you had. They had 400 individual MXDs and they had such a hard time managing those MXDs. I built a database solution where the misfit layouts configurations were persisted in a table. If the table record existed for that index feature, then the Python script would do its reconfiguration for that page, etc (all run from a single MXD).
Anyway, having a tool to create a layout / map for each page in a map series does NOT exist yet BUT at 3.1 implemented a way to createMap() and copyItem. This would allow you to copyItem(Layout) for each map series index feature and createMap for each mapframe, when needed.
This seams like a fun project to solve,
Jeff - Layout and arcpy.mp teams
@JeffBarrette I'm very interested in the update that should come with 3.1. As I proposed in an other similar Post idea, it would be just a matter of having the option to separately personalize each page of the map series. You can start with a basic common layout, but with the option to independently modify the pages as needed. I currently have an other issue related to this. I am trying to create a map series by bookmark, but in some pages I need a different scale of representation. The map series does not allow me to change the scale, nor the extent of the map frame if I need it.
I understand that with python automation almost everything can be done. But at this point we should start building our own alternative to ArcGIS, python script by python script, instead of relying on ArcGIS pro anymore 😉 - (And that's called Qgis)
I would be grateful to the ArcGIS team if they would consider implementing this function.
I'm going to close this issue. I think there is a very simple solution using arcpy.mp. I've made slight changes to the second code snippet from the MapSeries Class help topic:
https://pro.arcgis.com/en/pro-app/latest/arcpy/mapping/mapseries-class.htm
So it iterates through each map series page and instead of exporting to PNG, it copies a layout and names it based on the map series name.
import arcpy, os
p = arcpy.mp.ArcGISProject(r"C:\temp\GreatLakes\GreatLakes.aprx")
l = p.listLayouts('*_MS*')[0]
if not l.mapSeries is None:
ms = l.mapSeries
if ms.enabled:
for pageNum in range(1, ms.pageCount + 1):
ms.currentPageNumber = pageNum
pageName = ms.pageRow.NAME
print(f"Copying {pageName} to new layout")
p.copyItem(l, pageName)
p.saveACopy(r"C:\temp\GreatLakes\GreatLakes_MSPages2Layouts.aprx")
os.startfile(r"C:\temp\GreatLakes\GreatLakes_MSPages2Layouts.aprx")
This script seemed extremely promising, but after adapting it and trying it out, it only seems to produce copies of the map series, not the individual layouts. Am I missing something, because I could have accomplished the same thing by right clicking and selecting copy several times.
Is it actually possible to export out pages from a map series as individual editable layouts or layout files or is this another wild goose chase?
@KevinDonahue3 the above script does duplicate/copy the layout (including the map series setup), the difference is that each newly saved layout has the correct extent for each page based on the map series index feature. If your preference is to NOT have a map series at part of the layout, then you can disable it. I slightly modified the code above to do that. Now when you open each newly copied layout, the map series is disable.
import arcpy, os
p = arcpy.mp.ArcGISProject(r"C:\temp\GreatLakes\GreatLakes.aprx")
l = p.listLayouts('*_MS*')[0]
if not l.mapSeries is None:
ms = l.mapSeries
if ms.enabled:
for pageNum in range(1, ms.pageCount + 1):
ms.currentPageNumber = pageNum
pageName = ms.pageRow.NAME
print(f"Copying {pageName} to new layout")
cpLyt = p.copyItem(l, pageName)
cpLyt.mapSeries.enabled = False
p.saveACopy(r"C:\temp\GreatLakes\GreatLakes_MSPages2Layouts.aprx")
os.startfile(r"C:\temp\GreatLakes\GreatLakes_MSPages2Layouts.aprx")
Does this do what you need?
Jeff - arcpy.mp and Layout teams
Thanks Jeff, I appreciate the update and the clarification. Apologies if my previous response was a little terse, but I misunderstood the intent of the script a little and was irritated that it didn't do what I was looking for (it was a long day).
I was hoping for a way to convert each page of the map series into a separate layout with an independent map or perhaps a way to export each page as a layout file (which should accomplish the same thing). In the end I was able to accomplish what I needed, but it required a lot of copies of the map series and a little juggling.
One question I had while working on it, that you may be able to help with is if it's possible to control the map series variable manually somehow. As far as I'm aware that variable is only controlled by the key feature class in the map series itself, is that accurate? It could be very handy to have variables within the map that I could change to update multiple definition queries at once, but as far as I know, this is only doable through a map series and is quite restrictive.
Thanks again for the help!
Kevin
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.