/// <summary> /// Set solver settings /// </summary> /// <param name="strNAClassName">NAClass name</param> /// <param name="inputFC">Input feature class</param> /// <param name="maxSnapTolerance">Max snap tolerance</param> public void LoadNANetworkLocations(string strNAClassName, IFeatureClass inputFC, double maxSnapTolerance) { INamedSet classes = m_NAContext.NAClasses; INAClass naClass = classes.get_ItemByName(strNAClassName) as INAClass; // Delete existing locations from the specified NAClass naClass.DeleteAllRows(); // Create a NAClassLoader and set the snap tolerance (meters unit) INAClassLoader classLoader = new NAClassLoader(); classLoader.Locator = m_NAContext.Locator; if (maxSnapTolerance > 0) ((INALocator3)classLoader.Locator).MaxSnapTolerance = maxSnapTolerance; classLoader.NAClass = naClass; // Create field map to automatically map fields from input class to NAClass INAClassFieldMap fieldMap = new NAClassFieldMapClass(); fieldMap.CreateMapping(naClass.ClassDefinition, inputFC.Fields); classLoader.FieldMap = fieldMap; // Avoid loading network locations onto non-traversable portions of elements INALocator3 locator = m_NAContext.Locator as INALocator3; locator.ExcludeRestrictedElements = true; locator.CacheRestrictedElements(m_NAContext); // Load network locations int rowsIn = 0; int rowsLocated = 0; classLoader.Load((ICursor)inputFC.Search(null, true), null, ref rowsIn, ref rowsLocated); // Message all of the network analysis agents that the analysis context has changed. ((INAContextEdit)m_NAContext).ContextChanged(); }
private bool LoadLocations(IFeatureWorkspace featureWorkspace) { IFeatureClass inputFeatureClass = null; try { inputFeatureClass = featureWorkspace.OpenFeatureClass(txtInputFacilities.Text); } catch (Exception) { MessageBox.Show("Specified input feature class does not exist"); return(false); } INamedSet classes = m_naContext.NAClasses; INAClass naClass = classes.get_ItemByName("Facilities") as INAClass; // delete existing locations, except barriers naClass.DeleteAllRows(); // Create a NAClassLoader and set the snap tolerance (meters unit) INAClassLoader naClassLoader = new NAClassLoaderClass(); naClassLoader.Locator = m_naContext.Locator; naClassLoader.Locator.SnapTolerance = 100; naClassLoader.NAClass = naClass; // Create field map to automatically map fields from input class to NAClass INAClassFieldMap naClassFieldMap = new NAClassFieldMapClass(); naClassFieldMap.CreateMapping(naClass.ClassDefinition, inputFeatureClass.Fields); naClassLoader.FieldMap = naClassFieldMap; // Avoid loading network locations onto non-traversable portions of elements INALocator3 locator = m_naContext.Locator as INALocator3; locator.ExcludeRestrictedElements = true; locator.CacheRestrictedElements(m_naContext); // load network locations int rowsIn = 0; int rowsLocated = 0; naClassLoader.Load(inputFeatureClass.Search(null, true) as ICursor, null, ref rowsIn, ref rowsLocated); if (rowsLocated <= 0) { MessageBox.Show("Facilities were not loaded from input feature class"); MessageBox.Show("没有导入任何结果!"); return(false); } // Message all of the network analysis agents that the analysis context has changed INAContextEdit naContextEdit = m_naContext as INAContextEdit; naContextEdit.ContextChanged(); return(true); }
public override void OnClick() { if (m_mapControl == null) { MessageBox.Show("Error: Map control is null for this command"); return; } // Get the NALayer and corresponding NAContext of the layer that // was right-clicked on in the table of contents // m_MapControl.CustomProperty was set in frmMain.axTOCControl1_OnMouseDown INALayer naLayer = m_mapControl.CustomProperty as INALayer; if (naLayer == null) { MessageBox.Show("Error: NALayer was not set as the CustomProperty of the map control"); return; } var naEnv = CommonFunctions.GetTheEngineNetworkAnalystEnvironment(); if (naEnv == null || naEnv.NAWindow == null) { MessageBox.Show("Error: EngineNetworkAnalystEnvironment is not properly configured"); return; } // Set the active Analysis layer IEngineNAWindow naWindow = naEnv.NAWindow; if (naWindow.ActiveAnalysis != naLayer) { naWindow.ActiveAnalysis = naLayer; } // Remember what the current category is IEngineNAWindowCategory originalCategory = naWindow.ActiveCategory; // Loop through deleting all the items from all the categories INamedSet naClasses = naLayer.Context.NAClasses; var naHelper = naEnv as IEngineNetworkAnalystHelper; for (int i = 0; i < naClasses.Count; i++) { IEngineNAWindowCategory category = naWindow.get_CategoryByNAClassName(naClasses.get_Name(i)); naWindow.ActiveCategory = category; naHelper.DeleteAllNetworkLocations(); } //Reset to the original category naWindow.ActiveCategory = originalCategory; // Redraw the map m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, m_mapControl.Extent); }
/// <summary> /// Load the input table and create field map to map fields from input table to NAClass /// </summary> /// <param name="strNAClassName">NAClass name</param> /// <param name="inputTable">Input table</param> public void LoadNANetworkLocations(string strNAClassName, ITable inputTable) { INamedSet classes = m_NAContext.NAClasses; INAClass naClass = classes.get_ItemByName(strNAClassName) as INAClass; // Delete existing rows from the specified NAClass naClass.DeleteAllRows(); // Create a NAClassLoader and set the snap tolerance (meters unit) INAClassLoader loader = new NAClassLoader(); loader.Locator = m_NAContext.Locator; loader.Locator.SnapTolerance = 100; loader.NAClass = naClass; // Create field map to automatically map fields from input table to NAclass INAClassFieldMap fieldMap = new NAClassFieldMapClass(); fieldMap.CreateMapping(naClass.ClassDefinition, inputTable.Fields); loader.FieldMap = fieldMap; // Avoid loading network locations onto non-traversable portions of elements INALocator3 locator = m_NAContext.Locator as INALocator3; locator.ExcludeRestrictedElements = true; locator.CacheRestrictedElements(m_NAContext); // Load input table int rowsIn = 0; int rowsLocated = 0; loader.Load(inputTable.Search(null, true), null, ref rowsIn, ref rowsLocated); // Message all of the network analysis agents that the analysis context has changed. INAContextEdit naContextEdit = m_NAContext as INAContextEdit; naContextEdit.ContextChanged(); }
public static void GetClasses(INALayer layer, out NameValueCollection inputClasses, out NameValueCollection outputClasses) { INamedSet nAClasses = layer.Context.NAClasses; inputClasses = new NameValueCollection(); outputClasses = new NameValueCollection(); for (int i = 0; i < nAClasses.Count; i++) { INAClass class2 = nAClasses.get_Item(i) as INAClass; string name = class2.ClassDefinition.Name; string str2 = layer.get_LayerByNAClassName(name).Name; if (class2.ClassDefinition.IsInput) { inputClasses.Add(str2, name); } else { outputClasses.Add(str2, name); } } }
public override void OnClick() { IEngineNetworkAnalystEnvironment naEnv = new EngineNetworkAnalystEnvironmentClass(); IEngineNetworkAnalystHelper naHelper = naEnv as IEngineNetworkAnalystHelper; IEngineNAWindow naWindow = naEnv.NAWindow; // Get the NALayer and corresponding NAContext of the layer that // was right-clicked on in the table of contents // m_MapControl.CustomProperty was set in frmMain.axTOCControl1_OnMouseDown INALayer naLayer = (INALayer)m_mapControl.CustomProperty; INAContext naContext = naLayer.Context; // Set the active Analysis layer if (naWindow.ActiveAnalysis != naLayer) { naWindow.ActiveAnalysis = naLayer; } // Remember what the current category is IEngineNAWindowCategory currentCategory = naWindow.ActiveCategory; // Loop through deleting all the items from all the categories INamedSet naClasses = naContext.NAClasses; for (int i = 0; i < naClasses.Count; i++) { IEngineNAWindowCategory category = naWindow.get_CategoryByNAClassName(naClasses.get_Name(i)); naWindow.ActiveCategory = category; naHelper.DeleteAllNetworkLocations(); } //Reset to the original category naWindow.ActiveCategory = currentCategory; m_mapControl.Refresh(esriViewDrawPhase.esriViewGeography, naLayer, m_mapControl.Extent); }