Free Course – Programming ArcObjects with VBA

Posted on August 5, 2011. Filed under: ArcObjects, GeoSpatial Training Services |

Although VBA is still available if needed at ArcGIS 10 it will not be supported at release 10.1.  You can read more about this here and here.  We’ve decided to go ahead and retire our Programming ArcObjects with VBA course and make it available free of charge as a self-paced course.  I know there are still a lot of you working on ArcGIS Desktop 9.3 so hopefully this will help those of you still working with that release.

This course is broken into two sections: Introduction to VBA for ArcMap and Introduction to ArcObjects.  They are meant to be taken in sequence.  Exercises for the course come from the book Getting to Know ArcObjects which you’ll need to purchase if you intend to complete the exercises.  However, the lectures provided above are free for all to use.

For more information on other courses please visit our website.


Read Full Post | Make a Comment ( None so far )

GIS Salary Survey Results

Posted on July 27, 2011. Filed under: .NET, AGIS Server API for Flex, ArcGIS Server, ArcGIS Server for Silverlight, ESRI, GeoSpatial Training Services, JavaScript, Open Source GIS, OpenLayers, PostGIS, Python |

We’re keeping the survey open through July 31st.  If you haven’t already participated in the survey please take a few moments to do so and forward this to your colleagues.

To date we have had 731 respondents.  Here are some of the highlights:

  • 40% of respondents list their job titles as either GIS Analyst or GIS Technician.  16% are GIS Managers/Coordinators/Directors, and 6% GIS Developers/Programmers.
  • 40% of respondents have 10 years of experience or greater.
  • 43% have a Master’s degree or higher.  Should You Get a Master’s Degree in GIS?
  • 70% of respondents are male.  I suppose this is better than it was 10 years ago, but we really need to attract more women to the field.
  • 41% of you are between the ages of 30-39.  24%  are between the ages of 40-49.  Less than 2% are above the age of 60.
  • Salaries appear to be widely dispersed with 29% between $50,000-$70,000/year.  I was surprised to see almost 13% below $20,000/year.
  • ESRI is far and away the most popular platform with 93% of respondents indicating this as one of their primary platforms.  This question allows more than one platform to be selected.  Open Source GIS software came in second at 14%.  I suspect this will grow quite a bit in the coming years.
  • Primary programming languages in use include .NET (55%), Python (50%) , JavaScript (27%), Java (20%), and Flex (17%).  You can learn more about Python, JavaScript, and Flex through our training classes.

You can get all the results here.

Read Full Post | Make a Comment ( 1 so far )

ESRI Renaming Products at ArcGIS 10.1

Posted on June 16, 2011. Filed under: ESRI, ESRI UC |

This is a guest post by Tripp Corbin, Vice President of GIS/IT at Keck & Wood, Inc.

I know many folks are still running ArcGIS 9.3 and only beginning to think about moving to 10. Esri is not resting though. It is already planning for the release of 10.1 which will be released early next year and is a focus of the Esri UC being held next month.

ArcGIS 10.1 will not only include changes and enhancements to functionality but also changes to the names of the software. Gone will be the familiar titles of ArcView, ArcEditor, ArcInfo, and ArcGIS Server. They will be replaced with a new standardized naming structure which Esri claims will reinforce the integrated nature of the entire ArcGIS platform. So what will the new names be? See the chart below.

Name Prior to ArcGIS 10.1 New Name
ArcGIS Desktop ArcGIS for Desktop
ArcInfo ArcGIS for Desktop Advanced
ArcEditor ArcGIS for Desktop Standard
ArcView ArcGIS for Desktop Basic
ArcGIS Server ArcGIS for Server
ArcGIS Mobile ArcGIS for Windows Mobile
ArcGIS Mobile SDK ArcGIS SDK for Windows Mobile
Esri Data and Maps Data and Maps for ArcGIS
Esri StreetMap Premium StreetMap Premium for ArcGIS
ArcGIS Data Appliance Data Appliance for ArcGIS
ArcGIS Mapping for SharePoint ArcGIS for SharePoint

ArcGIS will now be the key word in every title. The individual applications will then be “for” something i.e. Desktop, Server, Sharepoint and so on. Esri is hoping this will emphasize the oneness of the ArcGIS platform.

Personally, I think it will be more confusing and is a bad move. ArcView is a great title. It’s name tells you exactly what it is designed to do. The same is true for ArcEditor. These titles are self explanatory. Try explaining ArcGIS for Desktop followed by Basic, Standard or Advanced to a new user. It will get confusing quickly. We already have this problem with server.

Let’s not forget the name recognition of ArcInfo. It has been the flagship of Esri since the beginning. Everyone in GIS knows this product. It has a long and proud history way through that all away. ArcGIS for Desktop Advanced just doesn’t have the same ring.

Ok to be fair, the new names do help to show that everything in the ArcGIS suite is connected be it desktop, server, or mobile. They also bring everything under the same convention Esri uses for server and it’s various editions and levels. So I guess that might help get everyone on the same page. Maybe it is not all such a bad thing.

I do admit I don’t like a lot of change. ArcGIS 10 was a big change. Editing workflow was completely changed. (for the better I felt) The interface was updated and many new windows and toolbars added. Then there were all the changes to the Business Partner Program and the transition to the new Certified Trainer Program. I guess I was just hoping ArcGIS 10.1 would more of a tweak and update than a continuation of Big Change. As the saying goes the one constant is change. Guess I will need to get better at dealing with it.

For more information on ArcGIS 10.1 go to:

Read Full Post | Make a Comment ( 2 so far )

Spring Training Schedule from GeoSpatial Training Services

Posted on March 3, 2011. Filed under: AGIS Server API for Flex, ArcGIS Server, ArcGIS Server for Silverlight, ESRI, Geoprocessing, GeoSpatial Training Services, JavaScript, Python |

Our Spring 2011 training schedule has been released.  Most of these courses are taught in a web based environment but we do have one traditional face to face session of GIS Programming 101 for ArcGIS 10 scheduled for the King County GIS Center in Seattle, WA.  Here is the upcoming schedule:

Download a beta chapter from our upcoming book on the AGIS JavaScript API

Read Full Post | Make a Comment ( None so far )

Adding a Python Script to a New Toolbar in ArcView 9.3.1 (Tutorial)

Posted on February 10, 2011. Filed under: Geoprocessing, Python |

From time to time we like to feature guest posts.  Today I’d like to draw your attention to a tutorial from Bob Roberts at the Python and Then Some blog.  We’re going to be re-posting several of Bob’s tutorials.  I think you’ll find them quite helpful.  The first post will teach you how to add a Python script to a toolbar in ArcView 9.3.1.  You could easily apply the same concept to ArcGIS 10.0.  And now…more from Bob.

So you finished your Python ArcToolbox tool and now you want to add a shortcut to the toolbar. This tutorial is based on the assumption that you have already added your script to the ArcToolbox tools. If not I will cover that in another tutorial. I will show how to add a button in addition to how to add a menu to ArcView toolbar. Both are convenient ways to launch your Python script tools without having to open ArcToolbox.

First we will create a button to launch your tool.

  • Go to Tools > Customize.  This will open up the Toolbars tab.  If you do not want to add your own Toolbar, skip this section.
  • Click New for new toolbar:
  • Save it to either the current project (the .mxd) or to the Normal.mxt for use in all projects.
  • This will create an empty toolbar. Drag the toolbar to the top of ArcView.

Now that you have a new and empty toolbar we need to create the button for the Python tool.

  • Click on the Commands tab under Customize:
  • Scroll to the bottom of the Categories window:
  • Highlight [UIControls] and at the bottom click New UIControl
  • Select UIButtonControl and hit Create
  • Click in the box for the name if you wish to rename the tool
  • Next, click and drag the new UIButtonControl1 to your toolbar that was just created.

Now that the button is one the toolbar, we need to set it up to launch your Python tool.

  • Right click on the new button and you should see several options here.
  • You can change the button image to whatever you would like or you can just use “Text Only” for the name of the tool.

Now that we have the button on the toolbar and changed the way that it displays, it is time to add the Visual Basic snippet to launch the tool.

  • Click on “View Source”. This should open up the Microsoft Visual Basic editor:
  • Copy and Paste the following script between the Private Sub UIButtonControl1_Click() and End Sub:
  • You will need to replace “mypythontoolname” with the name of your Python tool.
  • Click the save button at the top of the VB editor.
  • Click on your button and it should open

There are a few things that can cause the button not to open your Python tool. The most common that I have seen is that the Visual Basic reference is not selected as available for using the ESRI GeoprocessingUI Object Library. This can be added by going into the Visual Basic editor again. At the top there is an option for Tools and then select references. Make sure that the ESRI GeoprocessingUI Object Library is checked. If not, check it to make the library available.

If you want to add a drop down menu for listing multiple Python tools the steps are mostly the same. After creating a new toolbar, you can create a new menu before you create the tool buttons.

On the Customize > Commands tab in the left hand pane there is an option for [New Menu]. Create the new menu in the same manner as creating the UIControls button. Add the menu to the toolbar and then you can add tool buttons to the drop down menu by clicking and dragging them to the drop down.

Hope that helps!

Additional Python and ArcGIS tutorials:

The next session of our instructor guided, Internet based course Programming 101 for ArcGIS 10: Mastering Python begins February 21st, 2011.  We still have a few seats available.  A self-paced version of this course is also available.

Read Full Post | Make a Comment ( None so far )

Beta Chapter From My Upcoming Book on the ArcGIS Server API for JavaScript

Posted on January 25, 2011. Filed under: ArcGIS Server, ESRI, GeoSpatial Training Services, JavaScript |

I am in the process of writing a book (tentatively titled ‘The GIS Geeks Guide to Mastering the ArcGIS Server API for JavaScript”) about the ArcGIS Server API for JavaScript.  I thought that I would make the process a bit more open by releasing beta chapters that some people might read and give feedback on. Hopefully one of those people is you!

I’m doing this because I think the book will be better based on feedback that I get from my readers and of course it will serve as motivation for finishing the book!

About the book

In short the book is about how to use the ArcGIS Server API for JavaScript to build high performance, attractive Web mapping applications using the lightweight, browser based ArcGIS Server API for JavaScript.  It will be very hands on with lots of examples that can be used right away.

Download the chapter

I am not going to release the chapters in chronological order so the first chapter to be released in public beta is not the first but rather the third covering maps and layers.

Download the chapter, read it, and tell me what you think. Either by posting a comment below or by contacting me directly through eric at

Download a beta chapter.

The chapters

Here’s a tentative list of all the chapters in the book:

  • Chapter 1: Introducing to the ArcGIS Server API for JavaScript
  • Chapter 2: ArcGIS Server Basics
  • Chapter 3: Working with Maps and Layers
  • Chapter 4: Adding Graphics to the Map
  • Chapter 5: Using Widgets and Toolbars
  • Chapter 6: Editing Data in the Browser
  • Chapter 7: Working with Time
  • Chapter 8: Querying Data from Map Services
  • Chapter 9: Obtaining Information about Features
  • Chapter 10: Finding Features
  • Chapter 11: Turning Addresses into Points
  • Chapter 12: Getting from Point A to Point B (Routing)
  • Chapter 13: Geometry Tasks
  • Chapter 14: Using the Geoprocessor
  • Chapter 15: Understanding Events
  • Chapter 16: Configuration Parameters
  • Chapter 17: Working with Secure ArcGIS Services
  • Chapter 18: Dojo Application Layout Controls
  • Chapter 19: Dojo Form Controls
  • Chapter 20: Advanced Dojo Controls (Trees, Grids, Charts, Image Handling)
  • Chapter 21: Integration with Google Maps
  • Chapter 22: Integration with Bing Maps
  • Appendix: API Reference

As of now I don’t know in which form this book will be published, but I’ll keep you informed as things progress.

If you have a request for something that you want me to include in the book, or any thoughts or questions about it, please contact me.

We’ve also written a number of posts on the API for JavaScript and most have been compiled here.

The next session of our Internet based, instructor guided Mastering the ArcGIS Server JavaScript API begins March 21st.

Read Full Post | Make a Comment ( None so far )

2011 Schedule of Instructor Led Courses (1st Quarter)

Posted on January 5, 2011. Filed under: AGIS Server API for Flex, ArcGIS Server, ESRI, Geoprocessing, GeoSpatial Training Services, JavaScript, Python |

Here is our schedule of instructor led courses for January-March 2011 in both web based and traditional face to face formats.

Mastering the ArcGIS Server JavaScript API
Web Based
January 10th – February 18th
Still 5 Seats Available

Programming the ArcGIS Server API for Flex
Web Based
January 10th – February 18th

ArcGIS Server Bootcamp
Web Based
February 14th – March 18th
$715 when you register by January 15th

GIS Programming 101 for ArcGIS 10
Web Based
February 21st – March 18th
$567 when you register by January 15th

GIS Programming 101 for ArcGIS 10
Traditional Face to Face
February 7th – February 9th
Keck & Wood Headquarters
Duluth, Georgia
More Information
Click here to register

This last one is in May but it’s already on the calendar so we’re including it as well.

GIS Programming 101 for ArcGIS 10
Traditional Face to Face
May 23rd – May 25th
King County GIS Center
Seattle, WA
Contact sales at for more information on this session or to register.

Read Full Post | Make a Comment ( None so far )

Using a Proxy Page with the ArcGIS Server API for JavaScript

Posted on December 13, 2010. Filed under: ArcGIS Server, ESRI, GeoSpatial Training Services |

A proxy page handles communication between your application and ArcGIS Server services.  The proxy is server-side code that resides on your Web Server and handles incoming requests from a browser based application.  The proxy accepts the request and forwards it to ArcGIS Server for processing.

There are three situations where you’d use a proxy page in your ArcGIS Server API for JavaScript applications.  The first instance is when your application creates requests that exceed 2048 characters.  This is often the case when your application performs buffering of complex polygons in conjunction with queries or any other application function that performs some type of geometry operation.  To handle this instance the proxy page performs a POST operation which is not subject to the 2048 character limitation when using GET requests.  You’ll also need to use a proxy page when your application uses services secured with token-based authentication and you don’t want the user to be able to view the token or you don’t want to transmit the token between the application and web server.  Finally, any application that requires feature editing will need to use a proxy page.

There are four basic steps to installing and configuring your proxy page.  First, download and configure the proxy page for your server.  This can be ASP.NET, PHP, or Java/JSP.  Next, add code to your application to enable the use of the proxy.  In step 3, secure your web application if you plan to use tokens.  Finally, test your application to make sure the proxy is working as expected.  Detailed instructions for installing and configuring your proxy page is provided by ESRI at the links provided on above.

Coding your application to use a proxy page requires only a couple lines of code.  Normally you’d put this in your ‘init’ function which runs on startup.  You’ll need to provide the Url for the location of the proxy page and the ‘alwaysUseProxy’ property can be set to either true or false.  If your application will be using tokens you’ll want to set this value to true, but otherwise it can be set to false if you know that not all requests will need the proxy.  This would be the case in an editing application or an application where only some requests would exceed the 2048 character limitation.

More Information
The next session of our Mastering the ArcGIS Server JavaScript API begins January 10th, 2010.  We still have seats available.

Read Full Post | Make a Comment ( None so far )

Use ArcPy Mapping to Publish Map Documents to ArcGIS Server

Posted on November 15, 2010. Filed under: ArcGIS Server, ESRI, Geoprocessing, GeoSpatial Training Services, Python |

The ArcPy Mapping module, released with ArcGIS 10 provides a number of capabilities including the management of map documents and layers, printing, exporting, and ArcGIS Server publishing as well as map automation and the creation of PDF map books. In this post you will learn how to use Python and the ArcPy Mapping module to convert a map document file to an ArcGIS Server service. At the end of this post you will have learned the following related to publishing your map document to ArcGIS Server:

  • How to analyze a map document for warnings and errors
  • Convert a map document file to a map service definition file (MSD)
  • Publish a MSD file to ArcGIS Server as a service

Publication of a map document to ArcGIS Server with Python involves a three step process.  The goal of the first two steps is to convert a map document file to a map service definition file (MSD).  The analysis process scans the map document file for any warnings or errors.  Errors must be resolved before publication to an MSD file and warnings should also be carefully examined because they can lead to performance problems in ArcGIS Server.  Once errors and warnings have been resolved, the ConvertToMSD() function can then be called against the file.  This function will create a new MSD file which can then be published to ArcGIS Server through the PublishMSDToServer() function.

Analyze the Map Document for Warnings and Errors
The AnalyzeForMSD() function analyzes the map document for suitability and performance issues before conversion to MSD.  This function returns a Python dictionary containing the warnings, errors, and general messages.  All errors must be repaired before publication.  The code sample below shows an example of calling the AnalyzeForMSD() function.

The AnalyzeForMSD() function takes a map document as a parameter. It analyzes the document and returns information, warnings, and errors in a Python dictionary which in this case is stored in the variable ‘analysis’. We then loop through this dictionary variable and print out the information contained within.  You can see an example of the information returned in the figure below.

You will want to pay particular attention to the ERRORS section. Each error that has been found must be fixed before the document can be published to ArcGIS Server. In this case the background symbol for our data frame is not a solid fill.   A solid fill is required for background symbols.  You can change that in ArcMap by clicking the active data frame and selecting Properties.  All errors listed in the ERRORS section must be fixed before publication can occur.

Once you’ve fixed all errors that have been identified you can convert to your MXD file to an MSD file through the ConvertToMSD() function.  You can specify a specific data frame as the active data frame for the service that will eventually be published to ArcGIS Server.  Again, no errors can be present in the MSD file.  The code example below shows how to convert an MXD file to an MSD.

ConvertToMSD() accepts several arguments including object variables for the mxd and msd files, the data frame to be used as the active data frame for the published service, and two parameters that deal with anti-aliasing. In this case we want the active data frame to be used as the active data frame in the published map service. Therefore, we can simply use a double quote (“”) as the third parameter of ConvertToMSD(). Anti-aliasing is a method for creating a better visualization of text and vector features. I normally just use “Normal” for both these parameters.

After checking your map document for errors, resolving any errors, and converting the map document to an MSD file you are finally ready to publish the document to ArcGIS Server.  There are several administrative tasks that you must do before performing this final step.

  • ArcGIS Server 10 must be installed
  • Your data and MSD file must be in a location accessible to ArcGIS Server.  More information about this can be found here
  • The username running the publish script must be a member of the ArcGIS Server admin group.  More information about that here.

In your script you’ll need to call PublishMSDToServer() to actually publish the MSD file as a service in ArcGIS Server 10.  You must supply connection information and information about the service to this function.

The code example below represents the general nature of the script you will need to write.  Obviously the path to the MSD file and your server names and service name and folder will be different.

Want to learn more about the ArcPy Mapping module and other programming ArcGIS Desktop with Python topics?  The next session of our Internet based, instructor led course “GIS Programming 101: Mastering Python for Geoprocessing in ArcGIS” begins February 21st.  We also provide a self-paced version of this course which you can find here.

Read Full Post | Make a Comment ( None so far )

Print and Export Maps from ArcMap with ArcPy Mapping

Posted on November 1, 2010. Filed under: ESRI, Geoprocessing, GeoSpatial Training Services, Python |

Printing and exporting maps is obviously one of the most commonly performed ArcGIS tasks.  The new Arcpy.mapping module provides several functions that you can use to automate your routine print and export tasks.  In this post we’ll examine Arcpy.mapping functions you can use for printing and exporting either maps from either the data or layout view in ArcMap.

Arcpy.mapping provides a PrintMap() function for printing page layouts or data frames within ArcMap and a host of Export functions that export the page layout or a data frame to various image formats and PDF files.  Before calling PrintMap() it is common practice to call the ListPrinterNames() function which returns a list of the available printers for the local computer.  A particular printer can then be found by iterating the list of printers and used as input to the PrintMap() function.

PrintMap() can print either a specific data frame or the page layout of a map document.  By default this function will use the printer saved with the map document or, if not present in the map document, the default system printer.  As I mentioned you can also use ListPrinterNames() to get a list of the available printers and select one of these printers as input to PrintMap().  In the code example on below PrintMap() uses the default printer as specified through the use of double quotes as the second parameter to PrintMap().

You can use one of the many Export functions provided by Arcpy.mapping to export a data frame or page layout to an image file.  Available formats include AI, BMP, EMF, EPS, GIF, JPEG, SVG, and TIFF.  The parameters provided for each function will vary depending upon the type of image.  Examples of these function names include ExportToJPEG, ExportToGIF, ExportToBMP, and all the others you see listed here.

You can also export your data frames or page layout to PDF format with ExportToPDF().  PDF is obviously a very popular interchange format so you will likely need to become familiar with this function.  Calling ExportToPDF() is much the same as calling any of the image export functions since it takes an mxd and path to output the file along with optional properties for the PDF.

In addition to exporting your maps to PDF you can also manipulate existing PDF documents or create new PDF documents.  You can merge pages, set document open behavior, add file attachments, and create or change document security settings.  The PDFDocumentOpen() function is used to open an existing PDF file for manipulation.  PDFDocumentCreate() creates a new PDF document.  These functions are often used in the creation of map books.

You’ll need to use PDFDocumentCreate to create a new PDF document by providing a path and filename for the document.  The PDF is not actually created on disk until you insert or append pages and then call PDFDocument.saveAndClose().  The appendPages() and insertPages() functions are used to insert and append pages. 

PDFDocumentOpen accepts a parameter that specifies the path to a PDF file and returns an instance of PDFDocument.  Once open you can make modifications to PDF file properties, add or insert files, and attach documents.  Make sure you call PDFDocument.saveAndClose() after all operations to save the changes to disk.

A number of properties can be set on a PDF Document through the PDFDocument object including getting a page count, attaching files, updating title, author, subject, keywords, open behavior, and the layout.  You can also update the document security by calling PDFDocument.updateDocSecurity() to set a password, encryption, and security restrictions.

Other ArcPy Mapping articles.

Want to learn more about the ArcPy Mapping module and other programming ArcGIS Desktop with Python topics?  The next session of our Internet based, instructor led course “GIS Programming 101: Mastering Python for Geoprocessing in ArcGIS” begins October 25th, 2010.  You can still register even though class has already begun.

Read Full Post | Make a Comment ( None so far )

« Previous Entries

Liked it here?
Why not try sites on the blogroll...