资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
理解 ClosetFacility网络数据集(Network Datasets) ClosetFacility编程开发学习笔记(C# )一、基本知识1.1 什么是网络数据集?与几何网络的区别等。见 姜云鹏ArcGIS Network扩展模块的使用.PDF1.2 Network Analyst!以下简称 NA )扩展模块四大功能(Route、ClosetFacility、ServiceArea、 ODMatrix)的使用。见ArcGIS Network Analyst Tutorial二、NA 对象概述(来自 Michael Rice: Finding your way with ArcGIS Network Analyst) 【fig1】2.1 EngineNetworkAnalystEnvironment(1 ) AE应用程序使用NA的入口(2) 允许对NAWindow、当前网络数据集进行访问(3) 可被用于:设置扩展选项、添加网络位置点、导航、NE求解2.2 EngineNAWindow【fig2】(1 )对当前分析图层和相关NAClasses保持引用(hold references )(2 )可用于管理对NALayers的编辑操作(3)在NAWindow上暴露事件处理。2.3 NAContext( 1)集中管理某种分析环境;( 2)对如下与分析有关的对象集合保持引用: Network Dataset、 NAClasses、 NASolver、NALocator、NATraversalResult、 NAAgents 。2.4 NAClass in-memory feature class(1) 与 Solver 相关的 Input/Output 通信,包括:网络位置点、分析结果、描述信息。(2) 可被查找、更新等;(3) 在 NALayer 中持久化2.5 NASolver(1 )负责管理 NAContext 和 NALayer,负责进行 Network Analyst(2)设置分析属性:Impedance atrribute、Restrictions、Hierachy、Slover-specific properties。( 3)扩展性的框架可加入自定义的 solver。2.6 NALocator( 1)根据网络数据集定位或者查询网络位置点;( 2)管理被用于寻找网络位置点的相关 NALoactorAgents 的集合;( 3)与 Geocoding 的相关内容。2.7 NA编程一般模式(C#)( 1 )创建一个 NA 环境lEngineNetworkAnalystEnvironment naEnvir = new EngineNetworkAnalystEnvironmentClass();(2) 获取活动的分析图层INALayer naLayer = naEnvir.NAWindow.ActiveAnalysis;(3) 获取该分析图层的上下文INAContext naContext = naLayer.Context;( 4)获取该上下文中的 SolverINASovler naSolver = naContext.Solver;(5)更改Slover的相关设置(INARouteSovler)naSolver).UseTimeWindow = true;(INASolveSettings)naSolver).lmpendanceAttributeName = Minutes;(6)更改完成,更新上下文。naSlover.UpdateContext(naContext, deNetworkDataset, new GPMessagesClass();问:什么是 GPM essa ges Cla ss ?答:他实现IGPM ess a ges接口,返回Geoproc es sin g工具在验证和执行中产生 的信息三、ClosetFacility编程示例解析3.1 概述(1) 本 实 例 位 于 路 径 “ D:ProgramFilesArcGISDeveloperKitSamplesNETEngineClosestFacilitySolverCSharp ”下。(2) 程 序 界 面 的 控 件 命 名 原 则 可 参 考http:/blog.csdn.net/hfzsjz/archive/2009/03/04/3955020.aspx( 3)程序目的:将固定文件夹中的 shapefiles 和网络数据集载入程序,将 bayincidents 和 bayfacilities 两个图层分别作为网络分析的网络位置点(对应于Incident和Facility )载入,允许用户设置分析属性(见2.5 节),采用 ClostFacilitySolver对本问题进行求解,得到的结果信息在一个ListBox控件中显示。3.2 程序主流程(Stepl)打开shapefiles工作空间和网络数据集;(Step2)创建 NAContext;(Step3)载入网络位置点;(Step4)为网络数据集在内存中创建图层,并创建分析图层;(Step5 )设置分析属性;(Step6)求解并输出分析结果;(Step7 ) Zoom到结果区域。3.3 Initialize该程序是利用某固定文件夹中的数据来进行分析求解。用户能参与的交互环节仅为设 置分析属性,并Click求解按钮。在与用户交互前,程序需要将地图和分析属性设置界面展示在用户面前,以便于用户 操作。public frmClosestFacilitySolver()lnitializeComponent();Initialize。; 该程序重点(1)打开工作空间和网络数据集IFeatureWorkspace featureworkspace;INetworkDataset networkDataset;/ Open GDB and NDSfeatureWorkspace = OpenWorkspace( Application.StartupPath + .DataSanFranciscoNetwork) as IFeatureWorkspace;networkDataset = OpenNetworkDataset(featureWorkspace as IWorkspace, Streets_nd);且看 OpenWorkspace函数和 OpenNetworkDataset 函数:public IWorkspace OpenWorkspace(string strGDBName)IWorkspaceFactory workspaceFactory;workspaceFactory = new ShapefileWorkspaceFactory ();return workspaceFactory.OpenFromFile(strGDBName, 0);public INetworkDataset OpenNetworkDataset(IWorkspace workspace, string strNDSName)IWorkspaceExtensionManager workspaceExtensionManager;IWorkspaceExtension workspaceExtension;IDatasetContainer2 datasetContainer2;/ Get Workspace Extension/IWork sp ace 转换为 IWorks pace Ex te ns ionM ana gerworkspaceExtensionManager = workspace as IWorkspaceExtensionManager;int count = workspaceExtensionManager.ExtensionCount;/ 可能有多种 works pace ex te ns ion,在其中寻找出名为Ne tw ork Da tase t的 w ork s pace Ex te ns ionfor (int i = 0; i count; i+)workspaceExtension = workspaceExtensionManager.get_Extension(i);if (workspaceExtension.Name.Equals(Network Dataset)datasetContainer2 = workspaceExtension as IDatasetContainer2;return datasetContainer2.get_DatasetByName( esriDatasetTyp .esriDTNetworkDataset, strNDSName) as INetworkDataset;/*从 I Dat ase tCo nta i ner2 中取出 INe tw ork Da tase t 的签名public I Da ta set get_ Da tase t ByNam e (es r iDa tase tType Type,str ing Nam e);*/.nnull;(2)创建 NAContext前面 2.7 节说过,要得到 NAContext 的话其实很简单,只需 NAEnvironmentNAWindow ActiveAnalysisNAContext即可。但是该程序由于没有使用axToolbarControl,所以不 能坐收其成,只能自己动手。/ Create NAContext and NASolverm_NAContext = Cr eate Solve rCo nt ex t (networkDataset);而public INAContext Cr e ate Solve rCo nt ex t ( NetworkDatase networkDataset)/Get the Data ElementIDENetworkDataset deNDS = GetDENe twork Dat ase t (networkDataset);INASolver naSolver;naSolver = new NACIosestFacilitySolve ();INAContextEdit contextEdit = naSolver. Crea te Co ntext (deNDS, naSolver.Name) as INAContextEd ; contextEdit.Bind(networkDataset, new GPMessagesClass();return contextEdit as INAConte ;前面说过,NASolver 负责管理 NAContext 和 NALayer,而 NAContext 给包括 NASolver 在内的相关对象提供引用。本程序的NAContext是由定义的NAClosestFacilitySolver创建的。 创建 NAContext 的签名为:public inac on text Create
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号