Title: www'geonorth'com
1GIS 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
2The Plan
- ArcObjects
- Concepts
- Examples
- Python
- Concepts
- Examples
- Compare/Contrast
- Discussion
3Multiple Ways to Skin the Cat
4ArcObjects Serious Programming
- AML
- Throw commands into text file and youre a
programmer - Avenue
- Proprietary Language
5(No Transcript)
6ArcObjects
- Not a Language
- Building Blocks Upon which ArcGIS was built
- COM objects
- Most commonly used with VisualBasic or C
7ArcObjects First Rule
Whining
8VisualBasic
9Modeling the Real World
10Object Oriented
11Object Orientation
- Properties
- Characteristics (nouns)
- Methods
- Actions object knows how to perform (verbs)
- Events
- Occurrences that Object can respond to
12Objects Vs. Classes
13Objects Vs. Classes
- Class is the Blueprint
- Object is the House
- An instantiation
14Interface vs. Objects
15Interfaces vs. Objects
Dim pFeatureLayer As IFeatureLayer Dim
pAttributeTable as IAttributeTable Set
pFeatureLayer new FeatureLayer Set
pAttributeTable pFeatureLayer Query Interface
16Tips
- Learn all of the on-line resources and use them
arcobjectsonline.esri.com
17Tips
- Use Samples
- Lots of Them
- Almost Never Start from Scratch
18Tips
- Training is Worth It for quick jump start
- We have an ArcObjects course in March (hint)
19Tips
- Spend Time on Error Handling
20ArcObjects
- For hard-core programmers Nirvana
- For casual programmers Purgatory
- Non programmers Hell
21ArcObjects Before After
Before ArcObjects
After ArcObjects
22ArcObjects
- Up Side Granularity of Control
- Down Side Nothing is Easy
For the casual user
23Common Implementations
- Quick Dirty Automation using VBA within ArcMap
- Separate stand-alone applications
- Extensions to ArcGIS framework
- Compiled DLL(s)
24Example in ArcObjects
- Example Programmatically Turn a Layer Off
25- 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
26Private 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
27- 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
-
- End Sub
Set pActiveView pMap this is a query
interface pActiveView.Refresh
pActiveView.ContentsChanged
28ArcObjects 8.x to 9.0
- Good News not much pain
- Binary Compatibility for most core-level
libraries - Not like Avenue versus ArcObjects
29Type Libraries Diced Up
- Esricore.olb was one huge library
- Now slit into functional groups
30Type Libraries Diced Up
ArcObjects 8.x
ArcObjects 9.0
Declarations Dim pEnv as esriCore.IEnvelope Dim
pEnv as esriGeometry.IEnvelope ZoomToPoint (inPt
as esricore.IPoint) ZoomToPoint(inPt As
esriGeometry.IPoint) Instantiations Set pPt
new esriCore.Point set pPt New
esriGeometry.Point Implementations Implements
esricore.ITool Implements esriFramework.ITool
31ArcGIS 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
ArcGIS Engine esriSystem esriGeometry esriDisplay
esriOutput esriGeoDatabase esriDataSourcesFile esr
iDataSourcesGDB esriDataSourcesOleDB esriDataSourc
esRaster esriGeoDatabaseDistributed esriLocation e
sriCarto esriCad esriIMS esriTin esriWorker
esriFramework
32Code 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
33Tips 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
34 35Scripting in ArcGIS
- Python
- VBScript
- Perl
- Jscript
- Any scripting language that is COM compliant
- Python is ESRI-prefered
36Why 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
37Python
- 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
38Geoprocessing with Python
- Geoprocessor Programming Model
39Scripts in ArcToolBox
40Importing 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.
41Standard 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.G
pDispatch.1") - Declares and creates geoprocessing object that
you will use later - Set the input workspace
- GP.workspace c\data\anchorage\shapes
- GP.workspace sys.argv1
42Indentation 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
43Batch 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)
44Batch 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")
45Batch 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()
46Licensing
- When a tool is executed, either thru the
ArcToolbox or thru Script, an ArcGIS Desktop
license is required - Extension Licenses, too
47Extending 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
48Extending 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
49Extending 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
50ArcObjects 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
51Thanks