www'geonorth'com - PowerPoint PPT Presentation

1 / 51
About This Presentation
Title:

www'geonorth'com

Description:

... Monty Python. www.python. ... Python scripts are Modules. Use the import' statement to load ... Supports communciation between Python and the COM IDispatch ... – PowerPoint PPT presentation

Number of Views:37
Avg rating:3.0/5.0
Slides: 52
Provided by: corrie9
Category:
Tags: com | geonorth | www

less

Transcript and Presenter's Notes

Title: www'geonorth'com


1
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

2
The Plan
  • ArcObjects
  • Concepts
  • Examples
  • Python
  • Concepts
  • Examples
  • Compare/Contrast
  • Discussion

3
Multiple Ways to Skin the Cat
4
ArcObjects Serious Programming
  • AML
  • Throw commands into text file and youre a
    programmer
  • Avenue
  • Proprietary Language

5
(No Transcript)
6
ArcObjects
  • Not a Language
  • Building Blocks Upon which ArcGIS was built
  • COM objects
  • Most commonly used with VisualBasic or C

7
ArcObjects First Rule
Whining
8
VisualBasic
9
Modeling the Real World
  • Objects

10
Object Oriented
11
Object Orientation
  • Properties
  • Characteristics (nouns)
  • Methods
  • Actions object knows how to perform (verbs)
  • Events
  • Occurrences that Object can respond to

12
Objects Vs. Classes
13
Objects Vs. Classes
  • Class is the Blueprint
  • Object is the House
  • An instantiation

14
Interface vs. Objects
15
Interfaces vs. Objects
Dim pFeatureLayer As IFeatureLayer Dim
pAttributeTable as IAttributeTable Set
pFeatureLayer new FeatureLayer Set
pAttributeTable pFeatureLayer Query Interface
16
Tips
  • Learn all of the on-line resources and use them

arcobjectsonline.esri.com
17
Tips
  • Use Samples
  • Lots of Them
  • Almost Never Start from Scratch

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

19
Tips
  • Spend Time on Error Handling

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

21
ArcObjects Before After
Before ArcObjects
After ArcObjects
22
ArcObjects
  • Up Side Granularity of Control
  • Down Side Nothing is Easy

For the casual user
23
Common Implementations
  • Quick Dirty Automation using VBA within ArcMap
  • Separate stand-alone applications
  • Extensions to ArcGIS framework
  • Compiled DLL(s)

24
Example 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

26
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
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
28
ArcObjects 8.x to 9.0
  • Good News not much pain
  • Binary Compatibility for most core-level
    libraries
  • Not like Avenue versus ArcObjects

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

30
Type 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
31
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

ArcGIS Engine esriSystem esriGeometry esriDisplay
esriOutput esriGeoDatabase esriDataSourcesFile esr
iDataSourcesGDB esriDataSourcesOleDB esriDataSourc
esRaster esriGeoDatabaseDistributed esriLocation e
sriCarto esriCad esriIMS esriTin esriWorker
esriFramework
32
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

33
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

34
  • Python/Scripting

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

36
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

37
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

38
Geoprocessing with Python
  • Geoprocessor Programming Model

39
Scripts in ArcToolBox
40
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.

41
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.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

42
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

43
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)

44
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")

45
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()

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

47
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

48
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

49
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

50
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

51
Thanks
Write a Comment
User Comments (0)
About PowerShow.com