atom feed2 messages in org.r-project.r-sig-geo[R-sig-Geo] R/ArcGis and R-DCOM?
FromSent OnAttachments
paal...@attglobal.netNov 29, 2007 6:39 am 
Roger BivandNov 29, 2007 9:43 am 
Subject:[R-sig-Geo] R/ArcGis and R-DCOM?
From:Roger Bivand (
Date:Nov 29, 2007 9:43:35 am

On Thu, 29 Nov 2007, paallen at wrote:

Hi all,

I am an ArcGis and R user. I normally just share data between the two with the old import/export game using csv, pdf, and jpg file. Lately I have just started to looked into the R-DCOM project and the r/arcgis repository (

This site was current for ArcGIS 8, but it seems that for ArcGIS 9, the Python interface using win32com.client to access the geoprocessor is easier to get running. One can call a short Python script from the R system() command, or call R from a Python script run from ArcGIS (typically using the R (D)COM StatConnector, or have a Python script use both.

Two useful links are:


where only MGET uses R, but the UW course provides a lot of useful guidance. Unfortunately, a University of Bergen course that we've just finished is only on an intranet - the general conclusions were that "things take time", and that the simplest scripts are the ones that work; beyond that, much of the documentation needs patience because many things do not work either at all, or as described - however, there are usually workarounds. Stopping using the ModelBuilder was crucial in most cases - it was far too difficult to debug - running code step-by-step from the Python command prompt was the main mode of learning. Styrk Finne (a participant) found that deleting the geoprocessor seemed to help on lab machines that were seldom shut down - the GP seems to be started at boot and accumulates zombie connections until it becomes unstable (in 9.1 and for our installation - laptop users who shutdown frequently could do more than users of the regular lab machines).

Most often the exchange is still by a subset of filetypes, but a good deal is possible. This, combined with the use of drivers for raster and vector data in the rgdal package, means that a lot can be streamlined.

I am hoping to use it to streamline the sharing of data between the two easier. Specifically I am wanting to use r for some gridding and have it save the rasters into native arcgis rasters and automatically paste histograms/ecdf graphs onto layouts and plot princomp scores.

This imports an ASCII raster as written with writeAsciiGrid() in the maptools package - there are ways to use the AAIGrid driver in rgdal too - into Arc 9.1:

# import modules import sys, os from win32com.client import Dispatch

script = sys.argv[0]

# initialize ESRI ArcGIS geoprocessor print "Initialising ArcGIS geoprocessor ..." GP = Dispatch('esriGeoprocessing.GpDispatch.1') GP.CheckOutExtension('Spatial') GP.OverwriteOutput = 1 # setup for overwrite

out_ascii_grid = sys.argv[1]

out_ascii_type = sys.argv[2]

gridPath = sys.argv[3]

in_grid = sys.argv[4]

inRaster = gridPath + "/" + in_grid try: GP.ASCIIToRaster_conversion(out_ascii_grid, inRaster, out_ascii_type) except: msg = 'GP Error: %s' % GP.GetMessages() GP.AddError(msg); print msg; raise


(very rough, but apart from error handling, you can see how you might pass the arguments from system() in R).

To get R (D)COM Python support running, see the samples/scripts directory of the R(D)COM install - essentially a one-off build in Pythonwin of the COM hooks for the StatConnector server.

In rgdal, look at gdalDrivers() and ogrDrivers() to see what is available - the standard Windows binary package has plenty of drivers for reading things (but convert personal geodatabase files to say shapefiles or coverages using the GP to read), and many fewer for writing to Arc - again, use the GP to convert back.

Hope this helps,


PS. It would be very helpful if others with relevant experience could join this thread, which can then be linked from the Rgeo website.

I have tried the raster example on the r/arcgis repository page without luck.

Has anyone else tried this or something similar?


Phillip Allen Geochemist

Sent via BlackBerry by AT&T