Processing TomTom MultiNet data into a Network Dataset

03-16-2015 08:46 AM
Occasional Contributor II

I am having some issues with the Process MultiNet Street Data tool from the Street Data Processing Toolbox created by the Network Analyst team (found here Unfortunately this tool isn’t supported by tech support.  Do any of you have a contact within the Network Analyst team that might be able to help me. It appears the tool doesn’t like something about the Sign Path Table from TomTom.  Here is the Error from

Creating signpost feature class and table...

Index was out of range. Must be non-negative and less than the size of the collection.

Parameter name: index

at System.Collections.ArrayList.get_Item(Int32 index)

at GPProcessVendorDataFunctions.ProcessMultiNetDataFunction.MakeSignGeometry(ArrayList edgesData, ArrayList reverseEdge)

at GPProcessVendorDataFunctions.ProcessMultiNetDataFunction.CreateSignposts(String inputSITablePath, String inputSPTablePath, String outputFileGdbPath, IGPMessages messages, ITrackCancel trackcancel)

at GPProcessVendorDataFunctions.ProcessMultiNetDataFunction.Execute(IArray paramvalues, ITrackCancel trackcancel, IGPEnvironmentManager envMgr, IGPMessages messages)

Failed to execute (ProcessMultiNetData).

Any help would be appreciated.

Christopher McClain

  1. Sr. GIS Specialist

Brick Township MUA

0 Kudos
5 Replies
Esri Regular Contributor
0 Kudos
Esri Contributor

Hi Chris,

From what I can tell from the sample code, I'm guessing that the problem is occurring because one of the signposts in your data only has one transportation element reference in the SP table for that signpost -- each signpost must have at least two transportation element references.

This is just a best guess, as I don't know what release of the MultiNet data or the region(s) of the data you're passing into the tool.  If you step through this through the debugger, you can probably figure out exactly which one is the culprit.


0 Kudos
Occasional Contributor II

I'm working with 2014.09.19.00 - usaunjnj029. I haven't worked with the debugger option before where can I find some info on it?


Chris M

0 Kudos
Esri Contributor

Hi Chris,

It looks like you're using a county-size dataset.  Unfortunately, I do not have access to county-level data to investigate myself, but I did check that the 2014.09 data for the entire state of New Jersey has complete signpost records.

Below is some quick VBA code I whipped up to check to see that all the signposts have at least two transportation element features:

Sub signpostTest()
  Dim pWSF As IWorkspaceFactory
  Set pWSF = New ShapefileWorkspaceFactory
  Dim pFWS As IFeatureWorkspace
  Set pFWS = pWSF.OpenFromFile("C:\MyData\", 0)
  Dim pTable As ITable
  Set pTable = pFWS.OpenTable("usaunj___________sp.dbf")
  Dim lSignpostIDField As Long
  lSignpostIDField = pTable.FindField("ID")
  Dim lSequenceField As Long
  lSequenceField = pTable.FindField("SEQNR")

  Dim pTableSort As ITableSort
  Set pTableSort = New TableSort
  Set pTableSort.Table = pTable
  pTableSort.Fields = "ID, SEQNR"
  pTableSort.Ascending("ID") = True
  pTableSort.Ascending("SEQNR") = True
  pTableSort.Sort Nothing
  Dim pCursor As ICursor
  Set pCursor = pTableSort.Rows
  Dim pRow As IRow
  Set pRow = pCursor.NextRow
  Dim lPreviousSignpostID As Double
  lPreviousSignpostID = pRow.Value(lSignpostIDField)
  Dim lPreviousSequence As Long
  lPreviousSequence = pRow.Value(lSequenceField)
  Dim lCurrentSignpostID As Double
  Dim lCurrentSequence As Long
  Set pRow = pCursor.NextRow
  Do Until pRow Is Nothing
    lCurrentSignpostID = pRow.Value(lSignpostIDField)
    lCurrentSequence = pRow.Value(lSequenceField)
    If lCurrentSequence = lPreviousSequence Then MsgBox lPreviousSignpostID
    lPreviousSignpostID = lCurrentSignpostID
    lPreviousSequence = lCurrentSequence
    Set pRow = pCursor.NextRow
  MsgBox "Finished."
End Sub

Use the path to your data in line 05 and the name of your MP table in line 07.  When you run this, you will see a pop-up for every signpost that only has one transportation element.  You will see the "Finished" message when the code completes.

Given that you're using a county-size dataset, you may want to use the above code to check to be sure that the signposts included reference streets only within the county and do not cross the county line.

As far as debugging, you can open this tool in Visual Studio and use the debugger embedded within that.


0 Kudos
Occasional Contributor II


    The script worked and returned 12 items from the MP table.  This is my first foray into routing networks so I am not sure how to correct this issue now that I have identified these 12 items.

Chris M

0 Kudos