/// <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, );

            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 = ;

            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 = ;

            int rowsLocated = ;

            IQueryFilter qf = new QueryFilterClass();

            qf.WhereClause = "aaaaaaaaaaa";  

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

            if (rowsLocated <= )

            {

                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;

        }

创建ServiceArea的更多相关文章

  1. Arcgis, ArcEngine, Arcgis Server使用开发汇总 索引

    ArcGIS系列软件license及安装: Arcgis SDE10.1 和 Arcgis server10.1的授权文件license tnt_esri.dat Arcgis8.1安装license ...

  2. In-Memory:在内存中创建临时表和表变量

    在Disk-Base数据库中,由于临时表和表变量的数据存储在tempdb中,如果系统频繁地创建和更新临时表和表变量,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈.在SQL ...

  3. 创建 OVS flat network - 每天5分钟玩转 OpenStack(134)

    上一节完成了 flat 的配置工作,今天创建 OVS flat network.Admin -> Networks,点击 "Create Network" 按钮. 显示创建页 ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ABP入门系列(2)——通过模板创建MAP版本项目

    一.从官网创建模板项目 进入官网下载模板项目 依次按下图选择: 输入验证码开始下载 下载提示: 二.启动项目 使用VS2015打开项目,还原Nuget包: 设置以Web结尾的项目,设置为启动项目: 打 ...

  6. 记一次tomcat线程创建异常调优:unable to create new native thread

    测试在进行一次性能测试的时候发现并发300个请求时出现了下面的异常: HTTP Status 500 - Handler processing failed; nested exception is ...

  7. 在WPF中使用依赖注入的方式创建视图

    在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...

  8. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  9. TODO:GitHub创建组织的步骤

    TODO:GitHub创建组织的步骤 使用GitHub进行团队合作,写这个步骤主要作用是为了OneTODO作为一个团队组织进行代码的分享,让更多人来参与. 使用帐号.密码登录GitHub 2.右上角加 ...

随机推荐

  1. Linux脚本学习

    1.脚本 linux下创建一个以.sh为后缀名的文件,然后更改权限为可执行,这就变成了一个脚本文件 touch test.sh chmod u+x test.sh 脚本的最简单使用方式,就是批量命令的 ...

  2. HDFS Federation (读书笔记)

    HDFS Federation (读书笔记) HDFS的架构 HDFS包含两个层次:命名空间管理(Namespace) 和 块/存储管理(Block Storage). 命名空间管理(Namespac ...

  3. WPF Telerik TreeListView样式设计

    Telerik控件 TreeListView 修改其中样式 1.添加TreeListView控件 <telerik:RadTreeView x:Name="ObjecTreeView& ...

  4. Source Insight常用功能设置

    熟悉工具的使用能在一定程度上提高工作效率,但工具永远只是工具,大家要把重点放在内功的修炼上. 符号导航 符号(变量.宏定义.结构定义.枚举.函数等等)在SI 中的检索非常方便.Ctrl+鼠标左键或Ct ...

  5. Release Management 安装 之 集成TFS

    集成TFS时需要在TFS服务器执行 tfssecurity /g+ "Team Foundation Service Accounts" n:ALM\rmtfsint ALLOW ...

  6. spark1.4.1 启动过程

    今天稍微没那么忙了,趁着这个时间,准备把spark的启动过程总结一下(),分享给大家.现在使用的spark1.4.1版本 当然前提是你已经把spark环境搭建好了. 1.我们启动spark的时候一般会 ...

  7. 三维等值面提取算法(Dual Contouring)

    上一篇介绍了Marching Cubes算法,Marching Cubes算法是三维重建算法中的经典算法,算法主要思想是检测与等值面相交的体素单元并计算交点的坐标,然后对不同的相交情况利用查找表在体素 ...

  8. Github 使用

    创建repository 可以在Github上无限制使用public repository进行源代码管理,创建一个repository很简单,不多说了. 获取代码到本地 首先要安装Git,然后使用命令 ...

  9. linux下vi命令大全

    进入vi的命令vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首 ...

  10. TaskScheduler一个.NET版任务调度器

    TaskScheduler是一个.net版的任务调度器.概念少,简单易用. 支持SimpleTrigger触发器,指定固定时间间隔和执行次数: 支持CronTrigger触发器,用强大的Cron表达式 ...