public bool ShowModal(INALayer naLayer) { m_okClicked = false; // Get the NAContext and NetworkDataset INAContext naContext = naLayer.Context; INetworkDataset networkDataset = naContext.NetworkDataset; // Setup the window based on the current NALayer settings PopulateControls(naLayer); tabPropPages.SelectedIndex = 1; this.Text = ((ILayer)naLayer).Name + " Properties"; this.ShowDialog(); if (m_okClicked) { // Update the layer properties based on the items chosen UpdateNALayer(naLayer); // Update the Context so it can respond to changes made to the solver settings IGPMessages gpMessages = new GPMessagesClass(); IDENetworkDataset deNetworkDataset = ((IDatasetComponent)networkDataset).DataElement as IDENetworkDataset; naContext.Solver.UpdateContext(naContext, deNetworkDataset, gpMessages); } return(m_okClicked); }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset dataElement, INetworkSource source, IEvaluatedNetworkAttribute attribute) { // Initialize is called once per session (ArcMap session, ArcCatalog session, etc.) to initialize the evaluator for an associated network dataset Type t = Type.GetTypeFromProgID("esriFramework.AppRef"); try { // Activator.CreateInstance(t) is expected to error if the evaluator is created in an engine application // which can�t get a reference to the AppRef singleton. // This evaluator won�t work in Engine due to this design limitation. It is, however, // fully functional in ArcMap. System.Object obj = Activator.CreateInstance(t); IApplication app = obj as IApplication; if (app != null && app is IMxApplication) { m_mxDocument = app.Document as IMxDocument; } } catch (Exception e) { m_mxDocument = null; } // Store reference to the network dataset and the network source m_networkDataset = networkDataset; m_networkSource = source; // Create a new Dictionary hashtable for this network source m_sourceHashTable = new Dictionary <int, int>(); }
private INALayer CreateRouteAnalysisLayer(string sName, INetworkDataset pNetworkDataset) { INARouteSolver solver = new NARouteSolverClass(); INASolverSettings settings = solver as INASolverSettings; INASolver solver2 = solver as INASolver; solver.FindBestSequence = true; solver.PreserveFirstStop = true; solver.PreserveLastStop = false; solver.UseTimeWindows = false; solver.OutputLines = esriNAOutputLineType.esriNAOutputLineTrueShapeWithMeasure; IStringArray restrictionAttributeNames = settings.RestrictionAttributeNames; restrictionAttributeNames.Add("Oneway"); settings.RestrictionAttributeNames = restrictionAttributeNames; IDatasetComponent component = pNetworkDataset as IDatasetComponent; IDENetworkDataset dataElement = component.DataElement as IDENetworkDataset; INAContext context = solver2.CreateContext(dataElement, sName); (context as INAContextEdit).Bind(pNetworkDataset, new GPMessagesClass()); INALayer layer = solver2.CreateLayer(context); (layer as ILayer).Name = sName; return(layer); }
/// <summary> /// When the solver has been update, the context must be updated as well /// </summary> private void UpdateContextAfterChangingSettings() { IDatasetComponent datasetComponent = m_NAContext.NetworkDataset as IDatasetComponent; IDENetworkDataset deNetworkDataset = datasetComponent.DataElement as IDENetworkDataset; m_NAContext.Solver.UpdateContext(m_NAContext, deNetworkDataset, new GPMessagesClass()); }
public INAContext CreateSolverContext(INetworkDataset pNetDataset) { IDENetworkDataset dENetworkDataset = this.GetDENetworkDataset(pNetDataset); INASolver solver = new NAClosestFacilitySolverClass(); INAContextEdit edit = solver.CreateContext(dENetworkDataset, solver.Name) as INAContextEdit; edit.Bind(pNetDataset, new GPMessagesClass()); return(edit as INAContext); }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset DataElement, INetworkSource netSource, IEvaluatedNetworkAttribute netAttribute) { // Initialize is called once per session (ArcMap session, ArcCatalog session, etc.) to initialize the evaluator for an associated network dataset m_networkDataset = networkDataset; m_networkSource = netSource; m_networkAttribute = netAttribute; Refresh(); }
private INAContext CreateSolverContext(INetworkDataset networkDataset) { IDENetworkDataset dENetworkDataset = GetDENetworkDataset(networkDataset); INASolver nASolver = new NARouteSolver(); INAContextEdit nAContextEdit = nASolver.CreateContext(dENetworkDataset, nASolver.Name) as INAContextEdit; nAContextEdit.Bind(networkDataset, null); return(nAContextEdit as INAContext); }
/// <summary> /// 根据网络数据集创建网络分析上下文 /// </summary> /// <param name="networkDataset"></param> /// <returns></returns> private static INAContext CreateNAContext(INetworkDataset networkDataset) { IDENetworkDataset pDENetworkDataset = GetDENetworkDataset(networkDataset); INASolver pNASolver = new NARouteSolverClass(); INAContextEdit pNAContextEdit = pNASolver.CreateContext(pDENetworkDataset, pNASolver.Name) as INAContextEdit; pNAContextEdit.Bind(networkDataset, new GPMessagesClass()); return(pNAContextEdit as INAContext); }
/// <summary> /// Create NASolver and NAContext /// </summary> /// <param name="networkDataset">Input network dataset</param> /// <returns>NAContext</returns> public INAContext CreateSolverContext(INetworkDataset networkDataset) { //Get the data element IDENetworkDataset deNDS = GetDENetworkDataset(networkDataset); INASolver naSolver = new NAODCostMatrixSolver(); INAContextEdit contextEdit = naSolver.CreateContext(deNDS, naSolver.Name) as INAContextEdit; //Bind a context using the network dataset contextEdit.Bind(networkDataset, new GPMessagesClass()); return contextEdit as INAContext; }
//********************************************************************************* // ArcGIS Network Analyst extension functions // ******************************************************************************** //********************************************************************************* // Create NASolver and NAContext //********************************************************************************* public INAContext CreateSolverContext(INetworkDataset networkDataset) { //Get the Data Element IDENetworkDataset deNDS = GetDENetworkDataset(networkDataset); INASolver naSolver = new NALocationAllocationSolverClass(); INAContextEdit contextEdit = naSolver.CreateContext(deNDS, naSolver.Name) as INAContextEdit; contextEdit.Bind(networkDataset, new GPMessagesClass()); return(contextEdit as INAContext); }
//创建网络分析上下文 public static INAContext CreatePathSolverContext(INetworkDataset networkDataset) { IDENetworkDataset deNDS = GetPathDENetworkDataset(networkDataset); INASolver naSolver; naSolver = new NARouteSolver(); INAContextEdit contextEdit = naSolver.CreateContext(deNDS, naSolver.Name) as INAContextEdit; contextEdit.Bind(networkDataset, new GPMessagesClass()); return(contextEdit as INAContext); }
/// <summary> /// 创建网络分析上下文 /// </summary> public INAContext CreateSolverContext(INetworkDataset networkDataset) { //获取创建网络分析上下文所需的IDENETWORKDATASET类型参数 IDENetworkDataset deNDS = GetDENetworkDataset(networkDataset); INASolver naSolver; naSolver = new NARouteSolver(); INAContextEdit contextEdit = naSolver.CreateContext(deNDS, naSolver.Name) as INAContextEdit; contextEdit.Bind(networkDataset, new GPMessagesClass()); return(contextEdit as INAContext); }
//创建网络分析上下文 public static INAContext CreatePathSolverContext(INetworkDataset networkDataset) { IDENetworkDataset deNDS = GetPathDENetworkDataset(networkDataset); INASolver naSolver; naSolver = new NARouteSolver(); INAContextEdit contextEdit = naSolver.CreateContext(deNDS, naSolver.DisplayName) as INAContextEdit; contextEdit.Bind(networkDataset, new GPMessagesClass());//将网络数据集与网络上下文对象绑定在一起 //GPMessagesClass对象用于记录错误信息。 return(contextEdit as INAContext); }
public static IEvaluatedNetworkAttribute AddScaleSubsetAttribute(IDENetworkDataset deNet, INetworkAttribute2 baseNetAttribute) { if (baseNetAttribute == null) { return(null); } if (baseNetAttribute.UsageType != esriNetworkAttributeUsageType.esriNAUTCost) { return(null); } IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; string netAttributeName = BaseParameterName; netAttributeName += "_"; netAttributeName += baseNetAttribute.Name; netAttribute.Name = netAttributeName; netAttribute.UsageType = baseNetAttribute.UsageType; netAttribute.DataType = baseNetAttribute.DataType; netAttribute.Units = baseNetAttribute.Units; List <INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List <INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List <string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetScaleSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETJunction); if (supportTurns) { SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETTurn); } //sourced evaluators foreach (INetworkSource netSource in netSources) { SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(ScaleSubsetEvaluator)); } netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return(netAttribute); }
public static List <IEvaluatedNetworkAttribute> AddScaleSubsetAttributes(IDENetworkDataset deNet) { List <IEvaluatedNetworkAttribute> scaleSubsetAttributes = new List <IEvaluatedNetworkAttribute>(); IArray netAttributesArray = deNet.Attributes; List <int> baseIndexes = SubsetHelper.FindAttributeIndexes(netAttributesArray, esriNetworkAttributeUsageType.esriNAUTCost, esriNetworkAttributeDataType.esriNADTDouble, true, false); List <INetworkAttribute2> baseNetAttributes = SubsetHelper.FindAttributes(netAttributesArray, baseIndexes); foreach (INetworkAttribute2 baseNetAttribute in baseNetAttributes) { scaleSubsetAttributes.Add(AddScaleSubsetAttribute(deNet, baseNetAttribute)); } return(scaleSubsetAttributes); }
/// <summary> /// Create NASolver and NAContext /// </summary> /// <param name="networkDataset">Input network dataset</param> /// <returns>NAContext</returns> public void CreateSolverContext(INetworkDataset networkDataset) { if (networkDataset == null) { return; } //Get the Data Element IDENetworkDataset deNDS = GetDENetworkDataset(networkDataset); INASolver naSolver = new NAClosestFacilitySolver(); m_NAContext = naSolver.CreateContext(deNDS, naSolver.Name); ((INAContextEdit)m_NAContext).Bind(networkDataset, new GPMessagesClass()); }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset dataElement, INetworkSource source, IEvaluatedNetworkAttribute evaluatedNetworkAttribute) { // Cache the network dataset geodatabase path m_workspace_path_name = ((IDataset)networkDataset).Workspace.PathName; m_UseSpecificDates = false; m_CacheOnEverySolve = false; m_RidingABicycle = false; m_UsingAWheelchair = false; m_networkAttribute = evaluatedNetworkAttribute as INetworkAttribute2; CheckForVerboseLogging(); if (m_VerboseLogging) { WriteToOutputFile(m_LogFile, "Initialize" + Environment.NewLine + "m_workspace_path_name: " + m_workspace_path_name + Environment.NewLine + " m_UseSpecificDates defaults to: " + m_UseSpecificDates); } }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset DataElement, INetworkSource netSource, IEvaluatedNetworkAttribute netAttribute) { // Initialize is called once per session (ArcMap session, ArcCatalog session, etc.) to initialize the evaluator for an associated network dataset m_networkDataset = networkDataset; m_networkSource = netSource; m_networkAttribute = netAttribute; m_thisNetworkAttributeID = netAttribute.ID; m_baseNetworkAttributeID = -1; //The attribute name must begin with one or more non underscore characters followed by //an underscore character and then the name of the base cost attribute. //The underscore prior to the base attribute name should be the first underscore in the name. string thisAttributeName = netAttribute.Name; int nPos = thisAttributeName.IndexOf('_'); int nLastPos = thisAttributeName.Length - 1; string baseNetAttributeName; INetworkAttribute baseNetAttribute = null; if (nPos > 0 && nPos < nLastPos) { baseNetAttributeName = thisAttributeName.Remove(0, nPos + 1); try { baseNetAttribute = networkDataset.get_AttributeByName(baseNetAttributeName); } catch (COMException ex) { baseNetAttribute = null; string msg = string.Format("Base Attribute ({0}) not found. {1}.", baseNetAttributeName, ex.Message); System.Diagnostics.Trace.WriteLine(msg, "Scale Subset Network Evaluator"); } if (baseNetAttribute != null) { if (baseNetAttribute.ID != m_thisNetworkAttributeID) { m_baseNetworkAttributeID = baseNetAttribute.ID; } } } Refresh(); }
private void CreateContextAndSolver(INetworkDataset networkDataset) { if (networkDataset == null) { return; } IDatasetComponent datasetComponent = networkDataset as IDatasetComponent; IDENetworkDataset deNetworkDataset = datasetComponent.DataElement as IDENetworkDataset; INASolver naSolver = new NAServiceAreaSolverClass(); m_naContext = naSolver.CreateContext(deNetworkDataset, "ServiceArea"); INAContextEdit naContextEdit = m_naContext as INAContextEdit; naContextEdit.Bind(networkDataset, new GPMessagesClass()); }
/// <summary> /// Create a new network analysis layer and set some solver settings /// </summary> private INALayer CreateRouteAnalysisLayer(String layerName, INetworkDataset networkDataset) { INARouteSolver naRouteSolver = new NARouteSolverClass(); INASolverSettings naSolverSettings = naRouteSolver as INASolverSettings; INASolver naSolver = naRouteSolver as INASolver; //Get the NetworkDataset's Data Element IDatasetComponent datasetComponent = networkDataset as IDatasetComponent; IDENetworkDataset deNetworkDataset = datasetComponent.DataElement as IDENetworkDataset; //Create the NAContext and bind to it INAContext naContext; naContext = naSolver.CreateContext(deNetworkDataset, layerName); INAContextEdit naContextEdit = naContext as INAContextEdit; naContextEdit.Bind(networkDataset, new GPMessagesClass()); //Create the NALayer INALayer naLayer; naLayer = naSolver.CreateLayer(naContext); (naLayer as ILayer).Name = layerName; //Set properties on the route solver interface naRouteSolver.FindBestSequence = true; naRouteSolver.PreserveFirstStop = true; naRouteSolver.PreserveLastStop = false; naRouteSolver.UseTimeWindows = false; naRouteSolver.OutputLines = esriNAOutputLineType.esriNAOutputLineTrueShapeWithMeasure; //Set some properties on the general INASolverSettings interface IStringArray restrictions = naSolverSettings.RestrictionAttributeNames; restrictions.Add("Oneway"); naSolverSettings.RestrictionAttributeNames = restrictions; // Update the context based on the changes made to the solver settings naSolver.UpdateContext(naContext, deNetworkDataset, new GPMessagesClass()); //Return the layer return(naLayer); }
public INAContext CreateRouteSolverContext(INetworkDataset pNetDataset) { INAContextEdit pContextEdit; IDENetworkDataset pDENDS= GetDENetworkDataset(pNetDataset); INASolver pNASolver=(new NARouteSolverClass()) as INASolver; pContextEdit = pNASolver.CreateContext(pDENDS, "Route") as INAContextEdit; pContextEdit.Bind(pNetDataset,new GPMessagesClass()); return pContextEdit as INAContext; }
public static IEvaluatedNetworkAttribute AddFilterSubsetAttribute(IDENetworkDataset deNet) { IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; netAttribute.Name = BaseParameterName; netAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTRestriction; netAttribute.DataType = esriNetworkAttributeDataType.esriNADTBoolean; netAttribute.Units = esriNetworkAttributeUnits.esriNAUUnknown; INetworkAttribute2 netAttribute2 = netAttribute as INetworkAttribute2; netAttribute2.UseByDefault = true; List <INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List <INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List <string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetFilterSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETJunction); if (supportTurns) { SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETTurn); } //sourced evaluators foreach (INetworkSource netSource in netSources) { SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(FilterSubsetEvaluator)); } netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return(netAttribute); }
public static INALayer CreateNetworkAnalysisLayer(string name, INetworkDataset networkDataset, INASolver naSolver) { if (naSolver is INARouteSolver) { return(CreateRouteAnalysisLayer(name, networkDataset, naSolver as INARouteSolver)); } if (naSolver is INAClosestFacilitySolver) { return(CreateClosestFacilityLayer(name, networkDataset, naSolver as INAClosestFacilitySolver)); } IDatasetComponent component = (IDatasetComponent)networkDataset; IDENetworkDataset dataElement = (IDENetworkDataset)component.DataElement; INAContext context = naSolver.CreateContext(dataElement, name); ((INAContextEdit)context).Bind(networkDataset, null); INALayer layer = naSolver.CreateLayer(context); ((ILayer)layer).Name = name; return(layer); }
public static INALayer CreateClosestFacilityLayer(string layerName, INetworkDataset networkDataset, INAClosestFacilitySolver naClosesFacilitySolver) { INASolverSettings settings = naClosesFacilitySolver as INASolverSettings; INASolver solver = naClosesFacilitySolver as INASolver; IDatasetComponent component = networkDataset as IDatasetComponent; IDENetworkDataset dataElement = component.DataElement as IDENetworkDataset; INAContext context = solver.CreateContext(dataElement, layerName); (context as INAContextEdit).Bind(networkDataset, new GPMessagesClass()); INALayer layer = solver.CreateLayer(context); (layer as ILayer).Name = layerName; naClosesFacilitySolver.CreateTraversalResult = true; naClosesFacilitySolver.TravelDirection = esriNATravelDirection.esriNATravelDirectionFromFacility; naClosesFacilitySolver.OutputLines = esriNAOutputLineType.esriNAOutputLineTrueShapeWithMeasure; IStringArray restrictionAttributeNames = settings.RestrictionAttributeNames; restrictionAttributeNames.Add("Oneway"); settings.RestrictionAttributeNames = restrictionAttributeNames; solver.UpdateContext(context, dataElement, new GPMessagesClass()); return(layer); }
public static void RemoveScaleSubsetAttributes(IDENetworkDataset deNet) { IArray netAttributes = SubsetHelper.RemoveAttributesByPrefix(deNet.Attributes, BaseParameterName); deNet.Attributes = netAttributes; }
/// <summary> /// Occurs when this command is clicked /// </summary> public override void OnClick() { IGxApplication gxApp = m_application as IGxApplication; IGxDataset gxDataset = null; esriDatasetType dsType = esriDatasetType.esriDTAny; if (gxApp != null) { gxDataset = gxApp.SelectedObject as IGxDataset; dsType = gxDataset.Type; } if (dsType != esriDatasetType.esriDTNetworkDataset) { return; } IDataset ds = gxDataset.Dataset; if (ds == null) { return; } INetworkDataset nds = ds as INetworkDataset; if (nds == null) { return; } if (!nds.Buildable) { return; } INetworkBuild netBuild = nds as INetworkBuild; if (netBuild == null) { return; } IDatasetComponent dsComponent = nds as IDatasetComponent; IDENetworkDataset deNet = null; if (dsComponent != null) { deNet = dsComponent.DataElement as IDENetworkDataset; } if (deNet == null) { return; } FilterSubsetEvaluator.RemoveFilterSubsetAttribute(deNet); ScaleSubsetEvaluator.RemoveScaleSubsetAttributes(deNet); FilterSubsetEvaluator.AddFilterSubsetAttribute(deNet); ScaleSubsetEvaluator.AddScaleSubsetAttributes(deNet); netBuild.UpdateSchema(deNet); }
public static void RemoveFilterSubsetAttribute(IDENetworkDataset deNet) { IArray netAttributes = SubsetHelper.RemoveAttributesByPrefix(deNet.Attributes, "Filter"); deNet.Attributes = netAttributes; }
public static IEvaluatedNetworkAttribute AddFilterSubsetAttribute(IDENetworkDataset deNet) { IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; netAttribute.Name = BaseParameterName; netAttribute.UsageType = esriNetworkAttributeUsageType.esriNAUTRestriction; netAttribute.DataType = esriNetworkAttributeDataType.esriNADTBoolean; netAttribute.Units = esriNetworkAttributeUnits.esriNAUUnknown; INetworkAttribute2 netAttribute2 = netAttribute as INetworkAttribute2; netAttribute2.UseByDefault = true; List<INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List<INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List<string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetFilterSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETJunction); if (supportTurns) SubsetHelper.SetDefaultEvaluator(netAttribute, false, esriNetworkElementType.esriNETTurn); //sourced evaluators foreach (INetworkSource netSource in netSources) SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(FilterSubsetEvaluator)); netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return netAttribute; }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset dataElement, INetworkSource source, IEvaluatedNetworkAttribute attribute) { // Initialize is called once per session (ArcMap session, ArcCatalog session, etc.) to initialize the evaluator for an associated network dataset Type t = Type.GetTypeFromProgID("esriFramework.AppRef"); try { // Activator.CreateInstance(t) is expected to error if the evaluator is created in an engine application // which can�t get a reference to the AppRef singleton. // This evaluator won�t work in Engine due to this design limitation. It is, however, // fully functional in ArcMap. System.Object obj = Activator.CreateInstance(t); IApplication app = obj as IApplication; if (app != null && app is IMxApplication) m_mxDocument = app.Document as IMxDocument; } catch (Exception e) { m_mxDocument = null; } // Store reference to the network dataset and the network source m_networkDataset = networkDataset; m_networkSource = source; // Create a new Dictionary hashtable for this network source m_sourceHashTable = new Dictionary<int, int>(); }
public static void PushParameterValuesToNetwork(INetworkAnalystExtension nax) { try { if (nax == null) { return; } bool naxEnabled = false; IExtensionConfig naxConfig = nax as IExtensionConfig; naxEnabled = naxConfig.State == esriExtensionState.esriESEnabled; if (!naxEnabled) { return; } INAWindow naWindow = nax.NAWindow; INALayer naLayer = null; INAContext naContext = null; INetworkDataset nds = null; naLayer = naWindow.ActiveAnalysis; if (naLayer != null) { naContext = naLayer.Context; } if (naContext != null) { nds = naContext.NetworkDataset; } if (nds == null) { return; } IDatasetComponent dsComponent = nds as IDatasetComponent; IDENetworkDataset deNet = dsComponent.DataElement as IDENetworkDataset; INASolver naSolver = naContext.Solver; INASolverSettings2 naSolverSettings2 = naSolver as INASolverSettings2; if (naSolverSettings2 == null) { return; } INetworkAttribute2 netAttribute; string attributeName; IArray netParameters; INetworkAttributeParameter netParameter; string paramName; int cParameters; object paramValue; int cAttributes = nds.AttributeCount; for (int a = 0; a < cAttributes; ++a) { netAttribute = nds.get_Attribute(a) as INetworkAttribute2; attributeName = netAttribute.Name; netParameters = netAttribute.Parameters; cParameters = netParameters.Count; for (int p = 0; p < cParameters; ++p) { netParameter = netParameters.get_Element(p) as INetworkAttributeParameter; paramName = netParameter.Name; paramValue = naSolverSettings2.get_AttributeParameterValue(attributeName, paramName); netParameter.Value = paramValue; } netAttribute.Refresh(); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Push Parameter Values To Network"); } }
public static List<IEvaluatedNetworkAttribute> AddScaleSubsetAttributes(IDENetworkDataset deNet) { List<IEvaluatedNetworkAttribute> scaleSubsetAttributes = new List<IEvaluatedNetworkAttribute>(); IArray netAttributesArray = deNet.Attributes; List<int> baseIndexes = SubsetHelper.FindAttributeIndexes(netAttributesArray, esriNetworkAttributeUsageType.esriNAUTCost, esriNetworkAttributeDataType.esriNADTDouble, true, false); List<INetworkAttribute2> baseNetAttributes = SubsetHelper.FindAttributes(netAttributesArray, baseIndexes); foreach (INetworkAttribute2 baseNetAttribute in baseNetAttributes) scaleSubsetAttributes.Add(AddScaleSubsetAttribute(deNet, baseNetAttribute)); return scaleSubsetAttributes; }
public static IEvaluatedNetworkAttribute AddScaleSubsetAttribute(IDENetworkDataset deNet, INetworkAttribute2 baseNetAttribute) { if (baseNetAttribute == null) return null; if (baseNetAttribute.UsageType != esriNetworkAttributeUsageType.esriNAUTCost) return null; IArray netAttributes = deNet.Attributes; IEvaluatedNetworkAttribute netAttribute = new EvaluatedNetworkAttributeClass() as IEvaluatedNetworkAttribute; string netAttributeName = BaseParameterName; netAttributeName += "_"; netAttributeName += baseNetAttribute.Name; netAttribute.Name = netAttributeName; netAttribute.UsageType = baseNetAttribute.UsageType; netAttribute.DataType = baseNetAttribute.DataType; netAttribute.Units = baseNetAttribute.Units; List<INetworkSource> allNetSources = SubsetHelper.GetSourceList(deNet.Sources); List<INetworkSource> netSources = SubsetHelper.GetSourceList(allNetSources, esriNetworkElementType.esriNETEdge); List<string> netSourceNames = SubsetHelper.GetSourceNames(netSources); ResetScaleSubsetParameters((INetworkAttribute2)netAttribute, netSourceNames); bool supportTurns = deNet.SupportsTurns; //default evaluators SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETEdge); SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETJunction); if (supportTurns) SubsetHelper.SetDefaultEvaluator(netAttribute, 0, esriNetworkElementType.esriNETTurn); //sourced evaluators foreach (INetworkSource netSource in netSources) SubsetHelper.SetEvaluators(netAttribute, netSource, typeof(ScaleSubsetEvaluator)); netAttributes.Add(netAttribute); deNet.Attributes = netAttributes; return netAttribute; }
public static void UpdateEIDArrayParameterValuesFromEIDLists(INetworkAnalystExtension nax, Dictionary <string, List <int> > eidsBySourceName, string baseName) { if (nax == null) { return; } bool naxEnabled = false; IExtensionConfig naxConfig = nax as IExtensionConfig; naxEnabled = naxConfig.State == esriExtensionState.esriESEnabled; if (!naxEnabled) { return; } INAWindow naWindow = nax.NAWindow; INALayer naLayer = null; INAContext naContext = null; INetworkDataset nds = null; naLayer = naWindow.ActiveAnalysis; if (naLayer != null) { naContext = naLayer.Context; } if (naContext != null) { nds = naContext.NetworkDataset; } if (nds == null) { return; } IDatasetComponent dsComponent = nds as IDatasetComponent; IDENetworkDataset deNet = dsComponent.DataElement as IDENetworkDataset; INASolver naSolver = naContext.Solver; INASolverSettings2 naSolverSettings2 = naSolver as INASolverSettings2; if (naSolverSettings2 == null) { return; } string prefix = GetEIDArrayPrefixFromBaseName(baseName); VarType vt = GetEIDArrayParameterType(); int cAttributes = nds.AttributeCount; for (int a = 0; a < cAttributes; ++a) { INetworkAttribute2 netAttribute = nds.get_Attribute(a) as INetworkAttribute2; IArray netParams = netAttribute.Parameters; int cParams = netParams.Count; object paramValue; for (int p = 0; p < cParams; ++p) { INetworkAttributeParameter param = netParams.get_Element(p) as INetworkAttributeParameter; if (param.VarType != (int)vt) { continue; } string paramName = param.Name; string sourceName = GetSourceNameFromParameterName(prefix, paramName); if (sourceName.Length == 0) { continue; } List <int> eids = null; if (eidsBySourceName.TryGetValue(sourceName, out eids)) { if (eids != null) { if (eids.Count == 0) { eids = null; } } } paramValue = (eids != null) ? eids.ToArray() : null; naSolverSettings2.set_AttributeParameterValue(netAttribute.Name, param.Name, paramValue); } } }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset dataElement, INetworkSource source, IEvaluatedNetworkAttribute evaluatedNetworkAttribute) { // Cache the network dataset geodatabase path m_workspace_path_name = ((IDataset)networkDataset).Workspace.PathName; m_UseSpecificDates = false; m_CacheOnEverySolve = false; m_RidingABicycle = false; m_UsingAWheelchair = false; m_networkAttribute = evaluatedNetworkAttribute as INetworkAttribute2; CheckForVerboseLogging(); if (m_VerboseLogging) WriteToOutputFile(m_LogFile, "Initialize" + Environment.NewLine + "m_workspace_path_name: " + m_workspace_path_name + Environment.NewLine + " m_UseSpecificDates defaults to: " + m_UseSpecificDates); }
public void Initialize(INetworkDataset networkDataset, IDENetworkDataset DataElement, INetworkSource netSource, IEvaluatedNetworkAttribute netAttribute) { // Initialize is called once per session (ArcMap session, ArcCatalog session, etc.) to initialize the evaluator for an associated network dataset m_networkDataset = networkDataset; m_networkSource = netSource; m_networkAttribute = netAttribute; m_thisNetworkAttributeID = netAttribute.ID; m_baseNetworkAttributeID = -1; //The attribute name must begin with one or more non underscore characters followed by //an underscore character and then the name of the base cost attribute. //The underscore prior to the base attribute name should be the first underscore in the name. string thisAttributeName = netAttribute.Name; int nPos = thisAttributeName.IndexOf('_'); int nLastPos = thisAttributeName.Length - 1; string baseNetAttributeName; INetworkAttribute baseNetAttribute = null; if (nPos > 0 && nPos < nLastPos) { baseNetAttributeName = thisAttributeName.Remove(0, nPos + 1); try { baseNetAttribute = networkDataset.get_AttributeByName(baseNetAttributeName); } catch (COMException ex) { baseNetAttribute = null; string msg = string.Format("Base Attribute ({0}) not found. {1}.", baseNetAttributeName, ex.Message); System.Diagnostics.Trace.WriteLine(msg, "Scale Subset Network Evaluator"); } if (baseNetAttribute != null) { if (baseNetAttribute.ID != m_thisNetworkAttributeID) m_baseNetworkAttributeID = baseNetAttribute.ID; } } Refresh(); }