Con esta funcion conseguiremos crear dado una serie de puntos que cargamos,una ruta.
Dim indice As Integer
Dim nomb As String
Dim arrLineas As New Hashtable
Dim pLayer As ESRI.ArcGIS.Carto.ILayer
Dim sNombreLayer As String
Dim listaLayersAEliminar As New ArrayList
Dim arrPuntosDatagr As Windows.Forms.DataGridViewRowCollection = datagrid.Rows
Try
Dim networkDataset As ESRI.ArcGIS.Geodatabase.INetworkDataset = Me.OBTENERNetworkAnalist() ' coger la network de la bd y cargarla en arcMap
Dim imxDoc As ESRI.ArcGIS.ArcMapUI.IMxDocument
imxDoc = m_Application.Document
Dim pNetworkLayer As ESRI.ArcGIS.Carto.INetworkLayer
pNetworkLayer = New ESRI.ArcGIS.Carto.NetworkLayer
pNetworkLayer.NetworkDataset = networkDataset
imxDoc.AddLayer(pNetworkLayer)
Dim numRutas As Integer
numRutas = Get_PuntosRutas.Count
Dim It As IDictionaryEnumerator
It = Get_PuntosRutas.GetEnumerator()
indice = 1
Dim arrPuntos As ArrayList
While It.MoveNext
Dim arrPoint As ArrayList
If It.Key <> m2_sector Then
arrPoint = It.Value
Else
arrPuntos = New ArrayList
Dim j As Integer
For j = 0 To arrPuntosDatagr.Count - 1
Dim fila As Windows.Forms.DataGridViewRow
fila = arrPuntosDatagr(j)
arrPuntos.Add(fila)
Next
End If
If m_sector = "" Then
nomb = It.Key
Else
nomb = It.Key
End If
Dim naLayer As ESRI.ArcGIS.NetworkAnalyst.INALayer = CreateRouteAnalysisLayer(m_sector, networkDataset)
Dim naContext As ESRI.ArcGIS.NetworkAnalyst.INAContext = naLayer.Context
Dim stopsNAClass As ESRI.ArcGIS.NetworkAnalyst.INAClass = naContext.NAClasses.ItemByName("Stops")
Dim routesFC As ESRI.ArcGIS.Geodatabase.IFeatureClass = naContext.NAClasses.ItemByName("Routes")
Dim pFcGis As ESRI.ArcGIS.Geodatabase.IFeatureClass
pFcGis = Me.GetControlConexion.ObtenerFeatureClass(General.Configuracion.getConfigurador.tablaGISplanific)
Dim naLoader As ESRI.ArcGIS.NetworkAnalyst.INAClassLoader = New ESRI.ArcGIS.NetworkAnalyst.NAClassLoaderClass()
naLoader.Locator = naContext.Locator
naLoader.NAClass = stopsNAClass
Dim rowsInCursor As Integer = 0
Dim rowsLocated As Integer = 0
Dim pInputCursor As ESRI.ArcGIS.Geodatabase.ICursor
Dim pQuery As ESRI.ArcGIS.Geodatabase.IQueryFilter
Dim i As Integer
i = 0
im codCliente As String
Dim fila2 As Windows.Forms.DataGridViewRow
Dim pFeat As IFeature
Dim pfcClass As IFeatureClass
Dim pQuery2 As IQueryFilter
Dim pCursor2 As ICursor
While i <= arrPuntos.Count - 1
fila2 = arrPuntos(i)
If Not fila2.Cells("ObjectID").Value Is Nothing Then
pfcClass = ObtenerFeatureClass(featureclass)
pQuery2 = New QueryFilter
codCliente = fila2.Cells("Código Cliente").Value
pQuery2.WhereClause = General.Configuracion.getConfigurador.cli_cod & " = " & codCliente & " AND " & General.Configuracion.getConfigurador.rta_cod & "='" & fila2.Cells("Ruta").Value & "' AND " & General.Configuracion.getConfigurador.cli6_dia & "=" & fila2.Cells("Dia").Value
'hay que meter punto a punto.
pInputCursor = pfcClass.Search(pQuery2, False)
naLoader.Load(pInputCursor, New ESRI.ArcGIS.Carto.TrackCancel, rowsInCursor, rowsLocated)
End If
Me.liberaRecurso(pQuery2)
Me.liberaRecurso(pfcClass)
i = i + 1
End While
'Solve
Dim pGPMessages As ESRI.ArcGIS.Geodatabase.IGPMessages
pGPMessages = New ESRI.ArcGIS.Geodatabase.GPMessages
Dim naSolver As ESRI.ArcGIS.NetworkAnalyst.INASolver = naContext.Solver
naSolver.Solve(naContext, pGPMessages, Nothing)
Dim result As ESRI.ArcGIS.NetworkAnalyst.INAResult = CType(naContext.Result, ESRI.ArcGIS.NetworkAnalyst.INAResult)
Dim fcr As ESRI.ArcGIS.Geodatabase.IFeatureClass
fcr = result.NAContext.NAClasses.Item(1)
Dim pfeatt As ESRI.ArcGIS.Geodatabase.IFeature
Dim pCursor As ESRI.ArcGIS.Geodatabase.IFeatureCursor
pCursor = fcr.Search(Nothing, False)
pfeatt = pCursor.NextFeature
arrLineas.Add(It.Key, pfeatt)
imxDoc.AddLayer(naLayer)
indice = indice + 1
End While
Return arrLineas
Catch ex As Exception
Throw ex
End Try
End Function
No hay comentarios:
Publicar un comentario