I am working on launching the GenerateNearTable using the ArcObjects Assembly method. I have the advanced license (10.1), so the tool is available. The code to launch geoprocessing is:
Private Sub generateNearTable(ByRef FeatureLayer) 'Grab the feature class for the GP tool Dim lcount As Long = 10 Dim closest As Boolean = False 'Setup the geoprocessor Dim gp As ESRI.ArcGIS.Geoprocessor.Geoprocessor = New ESRI.ArcGIS.Geoprocessor.Geoprocessor Dim neartable As GenerateNearTable = New GenerateNearTable() neartable.in_features = FeatureLayer neartable.near_features = FeatureLayer neartable.out_table = "C:\Users\jlaura\Desktop\test4" ' Hard code to test. neartable.closest = closest neartable.closest_count = lcount 'This should be a parameter Dim addtomap As Boolean = gp.AddOutputsToMap gp.SetEnvironmentValue("workspace", "C:\Users\jlaura\Desktop\test") gp.TemporaryMapLayers = False gp.AddOutputsToMap = False Try gp.Execute(neartable, Nothing) returnmessages(gp) Catch ex As Exception returnmessages(gp) End Try End Sub
This is causing an error 99999. The results are being returned to the results tab, so I am able to double click on the failed tool and run it successfully via ArcMap. New to ArcObjects, so I'm definitely missing something obvious.
- Do I need to check out a license like I would with ArcPy?
- Am I parameterizing in a strange way?
- Do I need to pass the dataset (IDataset) instead of the featureclass? #This failed when I tried it, but perhaps I missed something...
As an extension (that I can open as a new question if people think it is too disconnected) - to programatically set the output table, can I generate an empty, 'fieldless' standalone table and let the tool handle writing.
Private Sub generateNearTable(ByVal distlayer, ByVal knn, ByVal DistanceTableOut) Dim FeatureLayer = GetFLayerByName(distlayer) Dim NearFeatureLayer = GetFLayerByName(distlayer) 'Fails if I use this. 'Setup Params Dim lcount As Long = knn Dim closest As Boolean = False 'Setup the geoprocessor Dim gp As New ESRI.ArcGIS.Geoprocessor.Geoprocessor Dim genneartable As GenerateNearTable = New GenerateNearTable() 'Setup the Gp Environment Dim addtomap As Boolean = gp.AddOutputsToMap gp.TemporaryMapLayers = False gp.AddOutputsToMap = True 'Add the derived table to the map doc. gp.OverwriteOutput = True 'Set Params genneartable.in_features = FeatureLayer genneartable.near_features = "C:\Users\jlaura\Desktop\Zunil\Zunil_secondaries_proj.shp" genneartable.out_table = DistanceTableOut genneartable.closest = closest genneartable.closest_count = lcount 'This should be a parameter 'Execute Try gp.Execute(genneartable, Nothing) If gp.MessageCount > 0 Then For count As Integer = 0 To gp.MessageCount - 1 MsgBox(gp.GetMessage(count), MsgBoxStyle.OkCancel, "Working") Next End If Catch ex As Exception End Try End Sub
I am doing something wrong with the feature layer inputs. By hard coding the path to the shapefiles I am able to successfully run the tool. Back to the drawing board, re: featurelayer access.
EDIT2: The tools runs properly if the featurelayer is passed for the
in_features and hard coded for the near_features. In this case should I be reaccessing the feature layer from the input?