programming for geographical information analysis: advanced skills

42
Programming for Geographical Information Analysis: Advanced Skills Lecture 2: ArcObjects Framework Dr Andy Evans

Upload: ima-hess

Post on 02-Jan-2016

29 views

Category:

Documents


0 download

DESCRIPTION

Programming for Geographical Information Analysis: Advanced Skills. Lecture 2: ArcObjects Framework Dr Andy Evans. AddIn Architecture ArcObjects Framework. Java. Direct access to ArcObjects Framework inside and outside Arc. Ability to add components to the GUI. - PowerPoint PPT Presentation

TRANSCRIPT

Programming for Geographical Information Analysis:

Advanced Skills

Lecture 2: ArcObjects FrameworkDr Andy Evans

AddIn ArchitectureArcObjects Framework

Java

Direct access to ArcObjects Framework inside and outside Arc.

Ability to add components to the GUI.

Ability to communicate with external applications.

AddIns

Button : Icon on toolbar.Tool : Changes mouse operations.Combo box : Dropdown list and editable box.Toolbar : For grouping AddIns.Menu : Dropdown and right-click.Tool palette : Floating container for other AddIns. Dockable window : Floating window that can be locked into the GUI.Application extension : Additional functionality within, e.g. Arc extensions.

Form

jar zip file, with a .esriaddin extension

Contains:config.xml : metadata describing the addinJava class filesOther resources needed : e.g. data, images

Installing

File is just dropped into %USERPROFILE%\

My Documents\ArcGIS\AddIns\Desktop10.2 

or%USERPROFILE%\

Documents\ArcGIS\AddIns\Desktop10.2

There are easy install options for users (double clicking on the addin will bring up a wizard to walk through installing it)

Installing a sent AddIn

AddIn Manger

Choose “Add from file” and navigate to the file.

Should then see it under the commands list in whatever Category you’ve created for it in the XML file.

Drag and drop from here, onto the interface.

Installing a sent AddIn

Managing AddInsAdmin Registry Keys (regedit.exe)HKEY_LOCAL_MACHINE\SOFTWARE\ESRI\Desktop10.2 \ Settings

BlockAddIns0 - Load all.1 - Load signed only.2 - Load ESRI only.3 - Load from administrator folders only.4 - Do not Load any Add-Ins.

AddInFoldersAdminAddInLock - stop tampering with these.

Digital signing

See:http://help.arcgis.com/en/sdk/10.0/Java_AO_ADF/conceptualhelp/engine/index.html#/Digitally_signed_add_ins/0001000004zq000000/

Making an AddIn

Rather than writing the config.xml ourselves, and zipping it up manually with the java files, there’s an Eclipse IDE plugin.

This does all the basic class generation for us, and prepares the file.

Details for installing the IDE and plugin on the website.

Eclipse

EclipseProject area

Editor area, currently showing config.xml, but shown as a form, not text.

Show xml textsource

Config.xml

Eclipse

Should check code as you write.Will compile when you save the file.Errors reported in problems panel:

Note that the javadoc panel displays the javadocs of known classes.

Eclipse

Will autocomplete as you type. Will also suggest potential quick fixes if you click on hover over an issue.

Debugging

No System.out.println();

Best bet is:JOptionPane.showMessageDialog(null, String);

E.g.JOptionPane.showMessageDialog(null, "Hello World");

Or for exception checking…catch (Exception e){

JOptionPane.showMessageDialog(null, e.getStackTrace());

}

Help coding

Course Code CookbookThere’s no point in you struggling to find key bits of

code on ESRI’s site.So, there are many useful code examples, stripped

down to be a simple as possible, on the course website.

The quid pro quo:Send us useful code you get working.Read and try and understand the code, don’t just cut-

and-paste it. Ask questions!

Help codingIntro to Eclipse:

Help -> Welcome -> Overview / Tutorials

Arc Programming pages:http://resources.arcgis.com/en/help/arcobjects-java/concepts/engine/

Java ArcObjects Developer Guide -> Developing extensions -> ArcGIS Desktop customizations using add-ins

Help codingAPI:http://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/index.html

Note that the API docs are a re-write of the VB pages, and still contain some VB code:

If it says “This parameter is optional”, it usually isn’t.

If it says “If you don’t want this parameter, just pass in zero” or “Nothing”, then pass in null.

If it gives Variant as a return type, it returns java.lang.Object.

Select the AddIn

If you are developing, you need to reboot Arc to get changes to appear, but you don’t need to re-add the addIn.

Extensions

Classes that extend Arc functionalityCustom feature renderers Custom geoprocessing tools : can be added to

ArcToolbox and ModelBuilderClass extensions : Change form of dataPlug-in data sourcesUtility objects : Combine other tools

Installing

Jar file placed in<ArcGIS Install Dir>/java/lib/ext

Programming ArcGIS

AddIn Architecture

ArcObjects Framework

Code

The code that goes in the addIn is then code to work with the ArcObjects framework.

Ask App for DocumentAsk Document for MapsAsk Maps for a MapAsk Map for LayersAsk Layers for Layer etc.

The running version of Arc is accessed via gatekeeper objects.

You then request objects from these, and subsequent objects from the objects you get back.

init(IApplication app)

Most addIns come with a init method that can be overridden. This is sent the application as an entry point for the running framework.

import com.esri.arcgis.framework.*;

private IApplication app;

@Override

public void init(IApplication app){

this.app = app;

}

Document

You can use this to get hold of the current document. This is the current data and GUI.

import com.esri.arcgis.arcmapui.*;

IMxDocument mxDoc = (IMxDocument)app.getDocument();

API

It is then just a matter of finding how to do stuff in the API docs:http://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/index.html

N.B.

The code utilises Java Annotations.@name

Used as a marker for software intending to process the code.

@Override

N.B.II

Arc returns objects that implement multiple interfaces. You generally cast the object to a specific interface when using it.

IMxDocument mxDoc = (IMxDocument)app.getDocument();

There is nothing to stop you recasting it to another interface to use different methods in it:IDocument iDoc = (IDocument) mxDoc;

Infact, it is very common.

The COM

In Microsoft languages, this reassignment of interface labels is key.

It allows chunks of code to use other chunks of code without knowing anything other than the interface names.

It is used to hold together a great deal of the Component Object Model (COM) at the heart of Microsoft software.

ArcGIS is built around the COM, so this is a common thing to see.

Interfaces

This requires some care.You might think that redefining everything as the right object would be sensible:public void init(IApplication app){

Application a = (Application)app;

You could then use all the methods.

However, while objects Arc gives you will match the interfaces, they may not do anything sensible.

InterfacesFor example, this works in ArcMap:

public void init(IApplication app){

Application a = (Application)app;

IGxSelection selec = a.getSelection();

JOptionPane.showMessageDialog

(null, selec.toString());

}

But doesn’t give you anything sensible, as IGxSelection is an ArcCatalog class, and here the Application object is the ArcMap Application object, not the ArcCatalog one.

Interfaces

In general, better to get the interface right and keep the object defined by its interfaces.As well as explicitly casting, just attaching the right label works if you are going to a less specific class:IMxDocument mxDoc = app.getDocument();

But generally in the examples you’ll see an explicit cast because it saves looking up the relationship.In the API Docs, in general go for the interface list at the top of the class.

Interfaces generally start “I”Then “Mx” for ArcMap, “Gx” for ArcCatalog.

ArcMap IApplication methods

newDocument(boolean userPickTemplate?, String path)

openDocument(String optionalPath)

refreshWindow()

saveDocument(String optionalPath)

If the paths are null, the usual “new”, “open”, and “save” processes occur.

ArcMap IMXDocument methods

Used for getting data:getActiveView() i.e. layout view or data view data.getFocusMap() i.e. currently selected/shown map.getMaps() i.e. all maps.getSelectedItem() i.e. that the user has picked.getSelectedLayer() i.e. that the user has picked.

Documents also implement IDocument, the main use of which is programmatically controlling toolbars.

Next Lecture

Getting, sorting, and searching data.

PracticalHello World!Utilising tools in Arc Addins.