More on geometry

Saturday, 19 January, 2008

After my last post on the exciting new world of geometry that ArcGIS lets us access, I then stumbled across some new work from Jeff Jenness, of Jenness Enterprises. Jeff does GIS consultancy and has made available a nice selection of well written (genuinely useful!) Avenue scripts for Arcview 3.x. Well, the world turns and Jeff has been putting efforts in to learning ArcMaps complex VBA offering, producing a major extension called Graphics and Shapes.

The title belies what is a very extensive feature set, split across managing vector layers (points, lines and polygons) and managing graphic objects (selection, flipping, zooming etc. Jeff has included a “calculate geometry” function which people might think apes ESRI’s offering. Well, take a look because yet again ESRI are put to shame in offering access to basic functionality. And he does it with a very well designed series of screens and a progress bar that actually works! If you look at the features on offer, polygons, for example have area, centroid, perimeter, parts and vertices. Lines have length and azimuth. The latter is something that is very useful for all sorts of applications and, you’ve guessed it, ESRI don’t offer it as an option. Whilst I appreciated the momentum of ESRI products and vast array of scripts that are available, it is somewhat galling that you need to use an untested third party script to perform “first order” tasks. Particularly when ESRI charge such a premium. Anyway, getting back to the script, the real extra option here is calculating these values for a spheroid rather than directly from a projected dataset. When you start working over large areas, significant errors can be introduced using projected coordinates rather than working on a spheroid. See the Wikipedia entry on a Great Circle for a nice introduction. Great circles are used in aircraft navigation and are equivalent to “straight lines” on a sphere. Anyway, Jeff’s extension allows you to make these geometric calculations on a spheroid. Neat.