GIS and Engineering

• Mark Pearson, PE (civil) • GeoNorth, LLC
– GIS, Database, Internet Consulting – Anchorage, Portland – 13 Years Old (91 DOGS Years) – App Development, Planning, Conversion – Huge to Tiny Projects/Organizations

www.geonorth.com Value Through Integration and Innovation

The Plan
• ArcObjects
– Concepts – Examples

• Python
– Concepts – Examples

• Compare/Contrast • Discussion
www.geonorth.com Value Through Integration and Innovation

Multiple Ways to Skin the Cat

www.geonorth.com Value Through Integration and Innovation

ArcObjects: Serious Programming
• AML
– Throw commands into text file and you’re a programmer

• Avenue
– Proprietary Language

www.geonorth.com Value Through Integration and Innovation

www.geonorth.com Value Through Integration and Innovation

ArcObjects
• Not a Language • Building Blocks Upon which ArcGIS was built • COM objects • Most commonly used with VisualBasic or C++

www.geonorth.com Value Through Integration and Innovation

ArcObjects: First Rule

Whining

www.geonorth.com Value Through Integration and Innovation

VisualBasic

www.geonorth.com Value Through Integration and Innovation

Modeling the Real World
• Objects

www.geonorth.com Value Through Integration and Innovation

Object Oriented

Map Property Method Event
MapUnits AddLayer SelectionChanged

Car
Horsepower Accelerate Brakes are pressed

www.geonorth.com Value Through Integration and Innovation

Object Orientation
• Properties
– Characteristics (nouns)

• Methods
– Actions object knows how to perform (verbs)

• Events
– Occurrences that Object can respond to

www.geonorth.com Value Through Integration and Innovation

Objects Vs. Classes

www.geonorth.com Value Through Integration and Innovation

Objects Vs. Classes
• Class is the “Blueprint” • Object is the “House”
– An instantiation

www.geonorth.com Value Through Integration and Innovation

Interface vs. Objects

www.geonorth.com Value Through Integration and Innovation

Interfaces vs. Objects

Dim pFeatureLayer As IFeatureLayer Dim pAttributeTable as IAttributeTable Set pFeatureLayer = new FeatureLayer Set pAttributeTable = pFeatureLayer ‘Query Interface
www.geonorth.com Value Through Integration and Innovation

Tips
• Learn all of the on-line resources and use them

arcobjectsonline.esri.com www.geonorth.com
Value Through Integration and Innovation

Tips
• Use Samples
– Lots of Them – Almost Never Start from Scratch

www.geonorth.com Value Through Integration and Innovation

Tips
• Training is Worth It for quick jump start • We have an ArcObjects course in March (hint)

www.geonorth.com Value Through Integration and Innovation

Tips
• Spend Time on Error Handling

www.geonorth.com Value Through Integration and Innovation

ArcObjects
• For hard-core programmers = Nirvana • For casual programmers = Purgatory • Non programmers = Hell

www.geonorth.com Value Through Integration and Innovation

ArcObjects: Before & After

Before ArcObjects

After ArcObjects

www.geonorth.com Value Through Integration and Innovation

ArcObjects
• Up Side: Granularity of Control • Down Side: Nothing is Easy*

* For the casual user
www.geonorth.com Value Through Integration and Innovation

Common Implementations
• Quick & Dirty Automation using VBA within ArcMap • Separate stand-alone applications • ‘Extensions’ to ArcGIS framework
– Compiled DLL(s)

www.geonorth.com Value Through Integration and Innovation

Example in ArcObjects
• Example: Programmatically Turn a Layer Off

www.geonorth.com Value Through Integration and Innovation

Private Sub TurnOffLayer() Dim pDoc As IMxDocument Dim pMap As IMap Dim pLayer As ILayer Dim pActiveView As IActiveView Set pDoc = ThisDocument Set pMap = pDoc.FocusMap Set pLayer =

www.geonorth.com Value Through Integration and Innovation

Private Function FindLayerByName(strLayerName As String, pMap As IMap) As ILayer Dim i As Integer For i = 0 To pMap.LayerCount - 1 If UCase(pMap.Layer(i).Name) = UCase(strLayerName) Then Set FindLayerByName = pMap.Layer(i) Exit Function End If Next i Set FindLayerByName = Null End Function

www.geonorth.com Value Through Integration and Innovation

Private Sub TurnOffLayer() Dim pDoc As IMxDocument Dim pMap As IMap Dim pLayer As ILayer Dim pActiveView As IActiveView Set pDoc = ThisDocument Set pMap = pDoc.FocusMap Set pLayer = FindLayerByName("parcels", pMap) pLayer.Visible = False
Set pActiveView = pMap ‘this is a query interface pActiveView.Refresh pActiveView.ContentsChanged

End Sub
www.geonorth.com Value Through Integration and Innovation

ArcObjects 8.x to 9.0
• Good News: not much pain • Binary Compatibility for most core-level libraries • Not like Avenue versus ArcObjects

www.geonorth.com Value Through Integration and Innovation

Type Libraries: Diced Up
• Esricore.olb was one huge library • Now slit into functional groups

www.geonorth.com Value Through Integration and Innovation

Type Libraries: Diced Up
ArcObjects 8.x Declarations Dim pEnv as esriCore.IEnvelope ZoomToPoint (inPt as esricore.IPoint) Dim pEnv as esriGeometry.IEnvelope ZoomToPoint(inPt As esriGeometry.IPoint) ArcObjects 9.0

Instantiations Set pPt = new esriCore.Point set pPt = New esriGeometry.Point

Implementations Implements esricore.ITool Implements esriFramework.ITool

www.geonorth.com Value Through Integration and Innovation

ArcGIS 9.0 Type Libraries
ArcGIS Engine UI •esriSystemUI •esriDisplayUI •esriOutputUI •esriGeoDatabaseUI •esriDataSourcesRasterUI •esriLocationUI •esriCartoUI •esriCadUI •esriIMSUI •esriTinUI •esriCatalogUI ArcGIS Application assemblies •esriArcMapUI •esriArcMap •esriArcCatalogUI •esriArcCatalog •esriEditor •esriEditorExt •esriGeoDatabaseDistributedUI •esriGeoReferenceUI ArcGIS Engine esriSystem esriGeometry esriDisplay esriOutput esriGeoDatabase esriDataSourcesFile esriDataSourcesGDB esriDataSourcesOleDB esriDataSourcesRaster esriGeoDatabaseDistributed esriLocation esriCarto esriCad esriIMS esriTin esriWorker esriFramework

www.geonorth.com Value Through Integration and Innovation

Code Converter Utility
• VB6 Add-In • Removes ESRI Object Library from Project reference • Replaces ‘esriCore.’ with appropriate name in:
• • • • Declarations Instantiations Implementations ProgIDs

• Adds appropriate new references according code that is found

www.geonorth.com Value Through Integration and Innovation

Tips for Healthy ArcObjects Use
• Never over promise amount of time • Always plagiarize Code
• ArcObjects Online / Samples • Knowledgebase • Your own code

• Keep a ‘Toolbox’ of common routines • Make subs/functions generic whenever you can

www.geonorth.com Value Through Integration and Innovation

• Python/Scripting

www.geonorth.com Value Through Integration and Innovation

Scripting in ArcGIS
• • • • • Python VBScript Perl Jscript Any scripting language that is COM compliant • Python is ESRI-prefered

www.geonorth.com Value Through Integration and Innovation

Why Python?
• • • • • • Easy to learn, clean, clear syntax Supports Object Oriented programming Works well with complicated data structures Simple to integrate with C++ and Fortram Can be seamlessly integrated with Java Free, Open Source, Widely Used

www.geonorth.com Value Through Integration and Innovation

Python
• Not invented by ESRI • Interpreted, interactive, object-oriented • Invented in 1991 by Guido von Rossum, Netherlands • Named after Monty Python • www.python.org • Platforms: Windows, all UNIX, OS/2, Mac, Amiga – even Nokia cell phones
www.geonorth.com Value Through Integration and Innovation

Geoprocessing with Python
• Geoprocessor Programming Model

www.geonorth.com Value Through Integration and Innovation

Scripts in ArcToolBox

www.geonorth.com Value Through Integration and Innovation

Importing Modules
• Python scripts are Modules • Use the ‘import’ statement to load and use modules • All geoprocessing scripts use the ‘win32com’ module
– Supports communciation between Python and the COM IDispatch interface, which is used by the geoprocessor

• Other modules to math, file I/O, OS stuff, etc.
www.geonorth.com Value Through Integration and Innovation

Standard Stuff at in a Python Script
import win32com.client, sys, os
– sys is python system, user input, etc. – Os does OS-specific file manipulation

#Create the Geoprocessor object GP = win32com.client.Dispatch("esriGeoprocessing.GpDispatch.1")
– Declares and creates geoprocessing object that you will use later

#Set the input workspace GP.workspace = “c:\data\anchorage\shapes” GP.workspace = sys.argv[1]
www.geonorth.com Value Through Integration and Innovation

Indentation and Spaces
• They are relevant!
try: #get a list of featureclasses in workspace fcs = GP.ListFeatureClasses()

Python is also case sensitive !!! gp is not the same as GP
www.geonorth.com Value Through Integration and Innovation

Batch Processing
• • • • • • • ListDatasets (Wild Card, Dataset Type) ListFeatureClasses (Wild Card, Feature Type) ListFields (Input Value, Wild Card, Field Type) ListIndexes (Input Value, Wild Card) ListRasters (Wild Card, Raster Type) ListTables (Wild Card, Table Type) ListWorkspaces (Wild Card, Workspace Type)

• All return an Enumeration (list with unknown count)
www.geonorth.com Value Through Integration and Innovation

Batch Example
# Import COM Dispatch module from win32com.client import Dispatch # Create the geoprocessor object GP = Dispatch("esriGeoprocessing.GPDispatch.1") # Set the workspace. List all of the feature classes that start with 'G' GP.Workspace = “c:/data/anchorage/anch.mdb” fcs = GP.ListFeatureClasses("G*") # or for a type: fcs = GP.ListFeatureClasses("G*","polygon")

www.geonorth.com Value Through Integration and Innovation

Batch Example
# Reset the enumeration to make sure the first object is returned fcs.reset() # Get the first feature class name fc = fcs.next() while fc: # While the feature class name is not None # Copy the features from the workspace to a folder GP.Copy(fc,“c:\data\anchorage\dataout\” + fc) # Get the next feature class name fc = fcs.next()

www.geonorth.com Value Through Integration and Innovation

Licensing
• When a tool is executed, either thru the ArcToolbox or thru Script, an ArcGIS Desktop license is required • Extension Licenses, too

www.geonorth.com Value Through Integration and Innovation

Extending Python with Wrappers
• Vector Formats
– pyshapelib (shapelib.maptools.org)
• Access to individual vertices of the shape • Dbf file • Indexing

– OGR (gdal.maptools.org/ogr)
• Other vector formats like MapInfo, Coverage, PostGIS, Oracle Spatial, TIGER, SDTS, OpeNDAP, DGN, Microstation DGN

www.geonorth.com Value Through Integration and Innovation

Extending Python with Wrappers
• Grids
– Geodata Abstration Library GDAL (gdal.maptools.org)
• JPEG2000, BSP, USGS DEM, Military • Elevation Data, ECW, GRASS, TIFF/GeoTIFF, NetCDF, Imagine, and SDTS

www.geonorth.com Value Through Integration and Innovation

Extending Python with Wrappers
• Projections
– pyProjection (http://hobu.biz/index_html/software/pyprojection)
• For projecting coordinates from one to another • Uses EPSG code system and/or you can roll your own

• SDE
– PySDE (hobu.stat.aistate.edu/pysde)
• Wrapper for SDE C API and has corresponding Python methods

www.geonorth.com Value Through Integration and Innovation

ArcObjects or Python?
• Rearrange the ArcGIS User Interface? • Batch project a bunch of feature classes? • Create new tool to edit special Widget feature classes? • Create an ‘Extension’ for ArcGIS? • Automated Map Book Generation

www.geonorth.com Value Through Integration and Innovation

Thanks

www.geonorth.com Value Through Integration and Innovation

Sign up to vote on this title
UsefulNot useful