创建ServiceArea

本文介绍了一个基于ArcGIS的服务区分析过程,包括创建NASolver和NAContext、加载设施位置,并通过特定参数进行网络分析。该分析涉及设施类的加载、位置捕捉及网络分析上下文更新。
/// <summary>

        /// Services the area.

        /// </summary>

        /// <param name="networkDataset">The network dataset.</param>

        public void ServiceArea(INetworkDataset networkDataset)

        {

            log.WriteLog("开始创建ServiceArea...");

 

            IWorkspaceFactory workspaceFactory = new ShapefileWorkspaceFactoryClass();

            IWorkspace workspace = workspaceFactory.OpenFromFile(Functions.g_WorkSpacePath, 0);

            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;

           

            CreateSolverContext(networkDataset);

            if (!LoadLocations(featureWorkspace, Functions.g_Hospital))

            {

                log.WriteLog("LoadLocations失败!");

            }

 

            log.WriteLog("ServiceArea创建完成!");

        }

 

/// <summary>

        /// Geodatabase function: get network dataset

        /// </summary>

        /// <param name="networkDataset">Input network dataset</param>

        /// <returns>DE network dataset</returns>

        public IDENetworkDataset GetDENetworkDataset(INetworkDataset networkDataset)

        {

            // Cast from the network dataset to the DatasetComponent

            IDatasetComponent dsComponent = networkDataset as IDatasetComponent;

 

            // Get the data element

            return dsComponent.DataElement as IDENetworkDataset;

        }

 

        /// <summary>

        /// Create NASolver and NAContext

        /// </summary>

        /// <param name="networkDataset">Input network dataset</param>

        private void CreateSolverContext(INetworkDataset networkDataset)

        {

            if (networkDataset == null) return;

 

            //Get the Data Element

            IDENetworkDataset deNDS = GetDENetworkDataset(networkDataset);

 

            INASolver naSolver = new NAServiceAreaSolverClass();

            m_NAContext = naSolver.CreateContext(deNDS, naSolver.Name);

            ((INAContextEdit)m_NAContext).Bind(networkDataset, new GPMessagesClass());

        }

 

/// <summary>

        /// Loads the locations.

        /// </summary>

        /// <param name="featureWorkspace">The feature workspace.</param>

        /// <param name="inputFacilities">The input facilities.</param>

        /// <returns><c>true</c> if XXXX, <c>false</c> otherwise</returns>

        private bool LoadLocations(IFeatureWorkspace featureWorkspace, string inputFacilities)

        {

            IFeatureClass inputFeatureClass = null;

            try

            {

                inputFeatureClass = featureWorkspace.OpenFeatureClass(inputFacilities);

            }

            catch (Exception)

            {

                log.WriteLog("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;

            ((INALocator3)naClassLoader.Locator).MaxSnapTolerance = 500;

            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;

            IQueryFilter qf = new QueryFilterClass();

            qf.WhereClause = "aaaaaaaaaaa";  

            naClassLoader.Load(inputFeatureClass.Search(qf, true) as ICursor, null, ref rowsIn, ref rowsLocated);

 

            if (rowsLocated <= 0)

            {

                log.WriteLog("Facilities were not loaded from input feature class");

                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;

        }

 

转载于:https://www.cnblogs.com/jhlong/p/5394418.html

内容概要:本文介绍了一个基于Python的地理空间分析自动化流程,旨在利用Google Earth Engine(GEE)获取森林分类遥感数据,并结合GIS技术对特定不动产区域内的森林类型进行可视化与面积统计。系统通过加载不动产矢量边界(AOI),从GEE平台调用NASA/ORNL发布的全球森林分类数据集(2020年版),裁剪并下载对应区域的栅格数据,随后在本地进行像素级分类统计,计算各类森林(原始林、年轻次生林、老年次生林)的覆盖面积(单位:公顷)。同时,程序生成标准化的地图可视化结果,包含底图、图例、比例尺、指北针和智能经纬网格,并最终导出包含图表和统计表格的PDF报告。整个流程实现了从云端数据获取到本地制图输出的一体化处理。; 适合人群:具备Python编程基础及地理信息系统(GIS)知识的科研人员、环境监测从业者或遥感技术人员,尤其适合从事生态评估、土地利用分析等相关工作的专业人士;; 使用场景及目标:① 实现对指定区域森林类型的自动分类与面积量化;② 生成符合出版标准的空间地图与分析报告,支持环境保护、碳汇评估或政策制定等应用;③ 提供可复用的自动化管道,减少重复性人工操作; 阅读建议:此资源以面向对象方式组织代码,结构清晰,建议使用者熟悉geemap、rasterio、geopandas等库的基本用法,并确保已配置GEE开发环境。学习时应重点关注类间的协作关系、坐标系处理逻辑以及地图美化细节,便于根据实际需求扩展分类体系或调整输出样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值