AnsweredAssumed Answered

Script Tool - Reference Bookmarks in Alphabetical Order

Question asked by bisoftware on Nov 20, 2017
Latest reply on Nov 20, 2017 by bisoftware

I have a custom script tool that is supposed to set up a map layout, by adjusting the scale bar, north arrow, title, and legend. It is then supposed to reference a bookmark and export the layout as a PDF.

The problem is that when I use this tool in ModelBuilder it references the wrong bookmarks.

I'm using this script tool in ModelBuilder for ArcGIS Pro. This model iterates through Urgent Care centers and its corresponding data one at a time (in alphabetical order by center name). I have bookmarks for every Urgent Care center, so my thought is that, if I can find a way for the model to reference the bookmarks in alphabetical order, then they will correspond with the correct Urgent Care center.

Could this be achieved via a table or list Index, or some kind of loop? Or is there a better way to go about this whole process?

Here is the code from the script tool I am using.

 

import arcpy

input layer

lyr = arcpy.GetParameterAsText(0)

input name of layout

p = arcpy.mp.ArcGISProject("CURRENT") 
lyt = p.listLayouts("Layout_King")[0]

Reposition the scale bar

scaleBar = lyt.listElements("MAPSURROUND_ELEMENT", "Scale Bar")[0] 
mf = scaleBar.mapFrame
scaleBar.elementPositionX = mf.elementPositionX + 0.0
scaleBar.elementPositionY = mf.elementPositionY - 0.5

Reposition the north arrow

northArrow = lyt.listElements("MAPSURROUND_ELEMENT", "North Arrow")[0] 
mf = northArrow.mapFrame
northArrow.elementPositionX = mf.elementPositionX + 8.8
northArrow.elementPositionY = mf.elementPositionY + 0.7

Align the title with the center of the map frame

title = lyt.listElements("TEXT_ELEMENT","Name of Map Text")[0] 
mf = lyt.listElements('MAPFRAME_ELEMENT',"Map Frame")[0]
title.elementPositionX = mf.elementPositionX + (mf.elementWidth / 3.7)
title.elementPositionY = mf.elementPositionY + (mf.elementHeight / 0.98)

Reposition the Legend and fix legend title

legend = lyt.listElements("LEGEND_ELEMENT", "Legend")[0] 
legend.title = "Legend"
legend.elementPositionX = mf.elementPositionX + 7.7
legend.elementPositionY = mf.elementPositionY + 7.15

setting layout to bookmark

aprx = arcpy.mp.ArcGISProject("Current")

add name of layout

lyt = aprx.listLayouts("Layout_King")[0] mf = lyt.listElements("MAPFRAME_ELEMENT")[0]

add name of bookmark

bkmks = mf.map.listBookmarks("*") 
for bkmk in bkmks:  
   mf.zoomToBookmark(bkmk)
   lyt.exportToPDF(r"C:\arcGIS_Shared\Exports" + "\\" + bkmk.name + ".pdf")

Outcomes