23
Esri UC2013 . Technical Workshop . Technical Workshop 2013 Esri International User Conference July 8–12, 2013 | San Diego, California Python Map Automation – Beyond the Basics of arcpy.mapping Jeff Barrette Jeff Moulds

Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

  • Upload
    others

  • View
    21

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Technical Workshop

2013 Esri International User Conference July 8–12, 2013 | San Diego, California

Python Map Automation – Beyond the Basics of arcpy.mapping

Jeff Barrette Jeff Moulds

Page 2: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Basic rules • Reference an MXD using a path or “current” keyword

- When using CURRENT - Always run in foreground - May need to refresh (e.g., RefreshActiveView)

• Uniquely name all the objects you want to reference • Pre-author MXDs with all possible elements

- Can’t create new objects (e.g., north arrow, data frames) - Author the extra elements off the page - No "New Map" function, so keep an empty MXD available

• This is not a replacement for ArcObjects – we are trying to draw a line in the sand

Us You

“The Line” Python Map Automation – Beyond the Basics of arcpy.mapping

Page 3: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Jeff Barrette

Sample Application

http://esriurl.com/5907

Page 4: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

What’s new topic

• What’s new à Mapping à What’s new for automating map workflows

http://esriurl.com/4597

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 5: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Cloning elements

• You can now clone text and graphic elements • This allows you to automate things like dynamic tables • Example:

http://esriurl.com/5908

Python Map Automation – Beyond the Basics of arcpy.mapping

vertl = arcpy.mapping.ListLayoutElements( mxd, “GRAPHIC_ELEMENT”, “VerticalLine”)[0] vertl.elementPositionX = xPos; vertl.elementPositionY = 4 vert1.elementHeight = 3 for line in range(1, numColumns+1): vert_clone = vertLine.clone("_clone") xPos = xPos + colWidth vert_clone.elementPositionX = xPos

Page 6: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Symbology classes

• Layer.symbologyType r/o : string – Returns:

• GRADUATED_COLORS, GRADUATED_SYMBOLS, UNIQUE_VALUES

• RASTER_CLASSIFIED, OTHER • Layer.symbology r/o : Symbology Class • Example: if lyr.symbologyType == “GRADUATED_COLORS”:

lyr.symbology.numClasses = 10 lyr.symbology.valueField = “POP2007”

• General notes, can NOT change: - Symbology class - Individual symbols use arcpy.mapping.UpdateLayer - Classification methods

http://esriurl.com/5909

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 7: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

arcpy.mapping group http://esriurl.com/5915

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 8: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Performance tips

• Don’t keep calling list functions import map as arcpy.mapping

item1 = map.ListLayoutElements(mxd,wildcard="Item1")

item2 = map.ListLayoutElements(mxd,wildcard="Item2")

item3 = map.ListLayoutElements(mxd,wildcard="Item3")

• Call them once instead and iterate through the items for elm in arcpy.mapping.ListLayoutElements(mxd):

if elm.name =="Item1": item1 = elm

if elm.name =="Item2": item2 = elm

if elm.name =="Item3": item3 = elm

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 9: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Performance tips (continued)

• Or even better, use dictionaries dict = {}

for elm in arcpy.mapping.ListLayoutElements(mxd):

dict[elm.name] = elm

dict["Item1"].text = "Dictionaries"

dict["Item2"].text = "are really"

dict["Item3"].text = "COOL!!!"

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 10: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Authoring geoprocessing tasks with Python scripts

• Things to consider help topic: http://esriurl.com/4656 • Before import arcpy path = r”C:\Project\maps” ... arcpy.mapping.ExportToPDF(mxd, path + "\\output.pdf")

• After import arcpy path = arcpy.env.scratchWorkspace

... arcpy.mapping.ExportToPDF(mxd, path + "\\output.pdf") arcpy.SetParameterAsText(1,path + "\\output.pdf")

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 11: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Functions in 10.1 for server publishing and printing

- CreateMapSDDraft() - Automate publishing map documents to map services

Map document arcpy.mapping Map service

- ConvertWebMapToMapDocument() - Use with the ArcGIS web APIs for advanced web map

printing workflows Web application High-quality output (e.g. PDF) arcpy.mapping

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 12: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Server printing out-of-the-box • ArcGIS Server 10.1 and the ArcGIS web APIs support web map

printing via print services. - Out-of-the-box print service and template maps ship with Server - Print services sample: http://esriurl.com/6465

Related Session: Supporting High-Quality Printing in Web Applications with ArcGIS for Server (Wednesday @ 8:30 am Room 15A)

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 13: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Advanced server printing with arcpy.mapping

• Build web apps with customized versions of the 10.1 out-of-the-box print service

• New arcpy.mapping method for converting Web Maps to MapDocuments: - ConvertWebMapToMapDocument ()

- ConvertWebMapToMapDocument (webmap_json, {template_mxd}, {notes_gdb}, {extra_conversion_options})

Web application High-quality output (e.g. PDF) arcpy.mapping

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 14: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Advanced server printing with arcpy.mapping

• Full capabilities of arcpy.mapping on the document - Modify content (e.g. replace service layers with local vector

data for high quality printing) - Export using custom options - Export data driven pages - Export to PDF and insert additional pages

• Return a printer-friendly output file (PDF, PNG, etc.) • Online help and examples http://esriurl.com/4600

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 15: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Demo: High quality server printing with arcpy.mapping

Map service tiled cache Vector data

• Print high quality vector layers instead of tiled image cache of service layers § Vector layers will be staged in template map documents

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 16: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Demo: High quality server printing with arcpy.mapping • Reference the custom arcpy.mapping based GP service

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 17: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

1

2

Demo: High quality server printing with arcpy.mapping

Arcpy.mapping code used in custom geoprocessing service

Get web map JSON

Export PDF

Create new MXD based on web map

Get template MXD

Remove service layers

Output file of job

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 18: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

High quality server printing with arcpy.mapping

• Two tutorials: - Basic high-quality web map printing: http://esriurl.com/4601 - Advanced web map printing: http://esriurl.com/4602

Georeferencing

Layers in map

Layers in legend

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 19: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Publishing map services with arcpy.mapping

• arcpy.mapping.CreateMapSDDraft() • Workflow from map document to map service • Use python for:

- Publishing automated analysis results - Scheduled service upgrades - Batch migration from 10.0 to 10.1

Create SDDraft and edit XML

(arcpy.mapping)

arcpy.mapping.CreateMapSDDraft()

Prepare MXDs (arcpy.mapping)

arcpy.mapping.MapDocument()

Stage and Publish Map Service

(arcpy server GP tools) arcpy.StageService_server() arcpy.UploadServiceDefinition_server()

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 20: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Publishing map services with arcpy.mapping

Sample: CreateMapSDDraft (arcpy.mapping) Reference a

MXD

Stage and publish Map Service

Create and analyze sddraft for errors, warnings, etc

Online help: http://esriurl.com/4598

Server connection, service properties, etc

Don’t publish if errors exist

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 21: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Publishing other service types with python

• 10.1: - arcpy.CreateMapSDDraft()

• 10.1 sp1: - arcpy.CreateGPSDDraft()

- Create geoprocessing services with Python - arcpy.CreateImageSDDraft()

- Create image services with Python

• 10.2: - arcpy.CreateGeocodeSDDraft()

- Create geocoding services with Python

Python Map Automation – Beyond the Basics of arcpy.mapping

Page 22: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Related sessions

Tuesday: 10:15 - 11:30am : Introduction to arcpy.mapping : Room 8 Wednesday: 8:30 – 9:45am : Supporting High-Quality Printing with AGS : Room 15A

10:15 - 11:30am : Introduction to arcpy.mapping : Room 1 A/B 3:15 - 4:30pm : Beyond the Basics of arcpy.mapping : Room 1 A/B Thursday: 8:30 - 09:45am : Beyond the Basics of arcpy.mapping : Room 8

Building Map Books in ArcGIS

Page 23: Python Map Automation – Beyond the Basics of arcpy.mapping€¦ · Esri UC2013 . Technical Workshop . Basic rules • Reference an MXD using a path or “current” keyword -When

Esri UC2013 . Technical Workshop .

Please fill out the session evaluation

First Offering ID: 1298 Second Offering ID: 1220

Online – www.esri.com/ucsessionsurveys Paper – pick up and put in drop box

Thank you…