/// <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();
        }
예제 #2
0
파일: exportForm.cs 프로젝트: uwmyuan/EVDS
        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);
        }
예제 #4
0
        /// <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();
        }
예제 #5
0
        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);
        }