云南大学 杨克成老师 Arcgis 网络分析中文版 最短路径、最短路径、服务区选择
arcgis学习--网络分析
ArcGIS软件应用实验6一、实验目的1、查找停靠点间的最快路径(最短路径)。
2、创建服务区面和创建OD成本矩阵。
二、实验内容1、查找一条按预定顺序访问一组停靠点时最快路径;2、创建一系列面,用来表示在指定时间内从一个设施点可达到的距离,称为服务区。
查找每个服务区中有多少个商店。
将识别出需要重新定位的仓库,以更好地为这些商店提供服务;3、创建一个“起始-目的地”成本矩阵,用于将货物从仓库运送到距离仓库十分钟车程范围内的所有商店。
三、实验步骤1. 准备工作(1)扩展模块中的网络分析图1(2)打开工具条中的网络分析图22. 使用网络数据集查找最佳路径路径分析概述:求解路径分析表示根据要求出的阻抗查找最快、最短甚至是最优的路径。
如果阻抗是时间,则最佳路线即为最快路线。
如果阻抗是具有实时或历史流量的时间属性,则最佳路线是对指定日期和时间来说最快的路线。
因此,可将最佳路径定义为阻抗最低或成本最低的路径,其中,阻抗由您来选择。
确定最佳路径时,所有成本属性均可用作阻抗。
可在路径分析中累积任意多个阻抗属性,但累积属性不对计算沿网络的路径造成任何影响。
例如,如果选择时间成本属性作为阻抗属性,并且希望累积距离成本属性,则仅使用时间成本属性来优化解。
路径分析类:路径分析图层由五种网络分析类组成。
●停靠点类该网络分析类用于存储路径分析中用作停靠点的网络位置。
“停靠点”图层包含四种默认符号:已定位停靠点、未定位停靠点、有错误的停靠点和有时间冲突的停靠点。
●路径类路径类存储通过分析生成的路径。
与其他要素图层相同,它的符号系统也可通过图层属性对话框进行访问和更改。
路径类是一个“仅输出”类;只有分析完成后它才不为空。
找到最佳路径后,即会在NetworkAnalyst窗口中显示该路径。
●点障碍、线障碍和面障碍障碍用于临时限制网络各部分、向网络各部分添加阻抗以及调整网络各部分的阻抗大小。
创建新的网络分析图层时,“障碍”类为空。
只有将对象添加到该类后,它们才不会为空-但不需要添加障碍。
GIS网络分析中最短路径的实现
第32卷第5期测绘科学voL32No.52007年9月science0fsuⅣeyingaIldMappingsep.GIS网络分析中最短路径的实现王秀斌(福建省地图出版社,福州350003)【摘要】本文提出了一种基于矢量角度的最短路径搜索算法,设计出一种类似于面向对象的数据存储结构来存储网络图中的节点及弧段对象,在最短路径的搜索上引入矢量夹角标量值作为搜索因子,充分利用了网络图中各点元素和线元素间的拓扑关系,提高了搜索的趋势性,同时还考虑了各弧段的长度值(或权值),较好的将网络图中对象的空间信息和属性信息相结合。
【关键词】最短路径;矢量角度;拓扑关系【中图分类号】P208【文献标识码lA【文章编号】1009-2307(2007)05枷61旬21引言随着地理信息产业的建立和数字化信息产品在全世界的普及,地理信息系统已深入到各行各业甚至各家各户,成为人们生产、生活学习和工作中不可缺少的工具和助手。
地理信息系统中网络分析功能的主要目的是对地理网络(如交通网络)、城市基础设施网络(如各种网线、电力线、电话线、供排水管线等)进行地理分析和模型化。
最短路径问题是地理信息系统网络分析中最基本、最关键的问题,在交通网络结构的分析、交通运输线路的选择、通讯线路的建造与维护、运输货流的最小成本分析、城市公共交通网络的规划等,都有直接应用的价值。
关于最短路径问题,目前为人们所公认的最好求解方法,是1959年由E.w.Diikstar提出的标号法,但在具体实现中,多数求解方法在存储空间及运行效率上还存在着一定的问题。
如乐阳同志,实现的最短路径方法就以牺牲存储空间的方法来换取算法的运行效率旧o,张福浩同志实现的最短路径方法仅针对单幅地图数据,多图幅的网络分析还存在效率上的问题¨1。
本文从图形数据的存储结构及最短路径顶点的搜索策略两个方面对D珧stra算法进行了改进,提出了一种基于矢量角度的最短路径搜索算法。
2道路网络数据结构构造类似于面向对象的数据结构存储网络图:PublicTypeMyllode(点结构)DimNodeIDAsImeger’节点ID,唯一标识节点DimAdjoinNumAsInteger’邻接弧段数量DimAdjoinArcID()AsInteger’邻接弧段IDDimAdjoinNodeID()AsInteger7邻接节点IDDimAdjoinCl锄p()AsDouble指向邻接节点的矢量的角度EndTypePublicTypeMyArc(弧结构)作者简介:王秀斌(1954-),男,福建平潭人,副社长,高级工程师,主要从事地图编制与GIS应用工作。
ArcGISFlex+GP服务完成最短路径分析
ArcGISFlex+GP服务完成最短路径分析最近用arcgis GP服务做了几个Demo,为了不丢失自己的实践经验,我决定把过程记下来(一)最短路径分析以上为效果图,在此感谢/newOperate/html/5/51/514/15549.h tml博文给我的启发,我用自己的数据做了实验,并且汉化了路径描述(因为从英文直接汉化,因此可能有点Ehinese的不足),下面描述整个模型制作和程序实现过程:(1)数据准备这里必须是使用网络数据集,我从ShapeFile生成,在ArcCatalog里面操作,首先建立一个叫TestRouting的空文件夹,同时建立Scrach和ToolData子文件夹,Scrach用来存放模型生成的脚本结果,ToolData饱含制作模型的原数据,再建立一个叫TestRouting的工具箱,像下图这样子:在ToolData文件夹里放入我们的实验数据,并制作网络数据集,当然这个实验数据不是简单的道路数据,包括一些网络数据集必须的字段(zbcov.shp),单击右键,选择New NetworkDataset...一些基本设置都是默认的,但是有一点必须注意,在下面这个窗口中,需要对elevation数据做以下设置,field要选择自己数据中对应的字段。
一路next,生成下面的两个数据,zbcov_ND和zbcov_ND_Junctions。
(2)模型制作在ArcMap中打开zbcov_ND,并在ArcToolBox中加入刚才新建的TestRouting,在TestRouting上点击右键,new一个model,命名为ShortestRoute,按照下面的pic制作最短路径分析的模型.制作模型需要注意很多,直接用Arcgis例子里的当然不是不行,但是制作模型本来也是一种乐趣,并且有助于理解ArcGIS的一些算法过程,由于我自己在这个过程碰到了很多问题,因此打算一步步把过程写下来。
首先要加入Network 的扩展模块,Tools->Extension,选择Network Analyst复选框。
ArcGIS网络分析[2.1]最短路径
ArcGIS ⽹络分析[2.1]最短路径最短路径求解【如果看到此博客还没有⽹络数据集的,请参考第⼀章的内容,,看⽬录】最短路径,是什么最短?时间最短?距离最短?什么距离?路程距离?考虑到拥堵问题,限速问题,换乘问题,在现实的最短路径远远⽐计算机中的最短路径要复杂,因为要考虑的因素太多了。
这些因素就叫作最短路径求解过程中的“阻抗”,和电阻阻碍电流类似。
最短路径是后⾯⼏个分析类型的基础,只有求得了最短路径,才知道能覆盖多⼤地⽅(服务区)、事故点与最近设施的路径怎么⾛(最近设施)等。
在上⼀章,就已经有了最简单的路径分析:单⼀的道路⽹,阻抗仅仅为公路⽹的长度。
在这⾥不讨论最短路径的内部算法,似乎有⼤佛说过,ESRI是⽤的Dijkstra算法的变种算法。
最短路径中有什么元素呢?换句话说,最短路径要什么东西才能分析?途径点、障碍。
最短路径输出了什么?当然就是最短路径的那条线啊!换成图的形式,就是这样⼦。
输⼊必选参数[途径点],可选参数:充当障碍的[点线⾯],基于连通策略和阻抗,就能计算出最短路径。
什么是障碍呢?例如,某条路正在封闭施⼯,那施⼯的那个地⽅就是障碍,这⾥是不能通⾏的,就代表最短路径是不会⾛过障碍的。
路径分析常⽤设置在这⾥打开⽹络分析图层的属性窗⼝找到分析设置选项卡,就会有如下图:输⼊元素输出元素途径点障碍最短路径经常会使⽤到的设置是:阻抗、限制、⽅向、交汇点的U形转弯、这⼏个。
阻抗很简单,分析的时候经过这条路的花费成本,可以这么简单的理解。
可以是时间、平均消耗体⼒、道路长度等。
限制限制主要有两种:转弯限制和单⾏线限制。
有的⼗字路⼝会有禁⽌转向左边或者右边,或者⼗字路⼝等红绿灯的时间⽐较长的情况,这个就是转弯限制。
转弯限制怎么来的呢?当⽹络数据集中加⼊了转弯要素类的时候,这个复选列表就可以选择了。
有关如何制作转弯要素类,请跳到第四章。
单⾏线,有的道路只能⼀个⽅向⾛,不能来回⾛,这也是很常见的。
⽅向这个是导航设置。
ArcGIS网络分析(最短路径问题分析)
ArcGIS网络分析(最短路径问题分析)第一篇:ArcGIS网络分析(最短路径问题分析)网络分析(最短路径问题分析)一、实验目的:理解最短路径分析的基本原理,学习利用arcgis软件进行各种类型的最短路径分析的操作。
二、实验准备1、实验背景:最短路径分析是空间网络分析中最基本的应用,而交通网络中要素的设置对最短路径的选择有着很大的影响。
实验要求根据不同的权重,给出到达指定目的地的路径选择方案,并给出路径长度。
λ在网络中指定一个超市,要求分别求出在距离、时间限制上从家到超市的最佳路径。
λ给定访问顺序,按要求找出从家经逐个地点达到目的地的最佳路径。
2、实验材料:软件:ArcGIS Desktop 9.x,实验数据:文件夹ex6中,一个GeoDatabase地理数据库:City.mdb,内含有城市交通网、超市分布图,家庭住址以及网络关系。
三、实验内容及步骤首先启动ArcMap,选择ex6city.mdb,再双击后选择将整个要素数据集“city”加载进来,然后将“place”点状要素以“HOME”字段属性值进行符号化,1值是家,0值是超市。
第1步无权重最佳路径的选择λ加载“设施网络分析”工具条(“视图”>>“工具条”,勾选“设施网络分析”),点选旗标和障碍工具板下拉箭头,将旗标放在家和想要去的超市点上。
第2步加权最佳路径选择λ在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放在家和想去的某个超市点上。
λ选择“分析”下拉菜单,选择“选项”按钮,打开“分析选项”对话框,选择“权重”标签页,在“边权重”上,全部选择长度“length”权重属性。
λ点选“追踪任务”下拉菜单选择“查找路径”。
单击“执行”键,则以长度为比重为基础的最短路径将显示出来,这条路径的总成本将显示在状态列。
λ上述是通过距离的远近选择而得到的最佳路径,而不同类型的道路由于道路车流量的问题,有时候要选择时间较短的路径,同样可以利用网络分析进行获得最佳路径。
ArcGIS几何网络的建立与最短路径的选取
网络分析算法的实现,又能够在节约存储空间的前提下根据需要扩充数据,对交通网络进行综合分析。
然后是网络搜索,主要依据求解单源点间最短路径的Dijkstra算法思想,同样也可以对其进行优化改进以提高效率。
应用到的基本工具Arc mapView/toolbars/utility network analyst工具条操作流程图(尽量为图解模型)操作步骤(方法)1、对各个图层的属性表及其投影信息进行查看与了解,了解utility networkanalyst工具条中各个选项的用处。
2、最短路径的选择(1)首先打开Arc Map选择E:\Chp7\Ex2\city.mdb再双击后选择将整个要素数据进来。
然后将place点状要素以HOME字段属性值进行符号化,1值是家,0值是超市,如图1。
图1(2)在place图层上右击label features,使name字段显示在图层中。
3、最短路径的求取无权重最佳路径的选择1)在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放在家和想要去的超市点上。
2)确认在Analysis下拉菜单中的Options按钮打开的Analysis Options对话框中的weight和weight filter标签项全部是none,这样使得进行的最短路径分析是完全按照这个网络自身的长短来确定的。
3)点选追踪工作(Track task)下拉菜单选择寻找路径(find path)。
单击solve键,则最短路径将显示出来,这条路径的总成本将显示在状态列。
图2 无权重最佳路径的选择加权最佳路径选择1)在设施网络分析工具条上,点选旗标和障碍工具板下拉箭头,将旗标放在家和想去的某个超市点上。
2)选择Analysis下拉菜单,选择Option按钮,打开Analysis Option对话框,选择Weight标签页,在边的权重(edge weight)上,全部选择长度(length)权重属性。
Arcgis操作 实验十五:最短路径分析
实验十五:最短路径分析一、实验目的1、掌握各种类型的最短路径分析;2、理解网络分析原理。
二、实验准备数据准备:City.mdb软件准备:ArcGIS Desktop9.x,ArcCatalog三、实验内容根据不同的要求,获得到达指定目的地的最佳路径,并给出路径的长度;找出距景点最近的某设施的路径。
1、在网络中指定一个商业中心,分别求出在不同距离、时间的限制下从家到商业中心的最佳路径;2、给定访问顺序,按要求找出从家出发,逐个经过访问点,最终到达目的地的最佳路径;3、研究阻强的设置对最佳路径选择的影响。
四、实验步骤启动ArcMap ,打开city. mdb ,双击city数据库,加载数据。
对点状要素place符号化:以HOME字段,1值为家,0值为商业中心。
具体步骤见操作视频:最短路径分析.exe图1 无权重参照的最短路径显示(1)无权重最佳路径的生成1)在网络分析工具条上,选择旗标工具,将旗标放在“家”和想要取得“商业中心”点上。
2)选择Analysis/Options命令,打开Analysis Options对话框,确认Weights和Weight Filter 标签项全部是None,这种情况下进行的最短路径分析是完全按照这个网络自身的长短来确定。
3)在Track Task文本框中选择Find path。
单击solve按钮。
显示最短路径(图1),这条路径的总成本显示在状态栏中。
(2)加权最佳路径生成1)在设施网络分析工具条下,点选旗标工具,将旗标分别放在“家”和想去的某个“商业中心”的位置上。
2)选择Analysis/Options命令,打开Analysis Options对话框(图2)进入Weights标签页,在边的权重上,全部选择长度权重属性。
图2 长度权重属性设置3)在Track Task文本枢中选择Find path,单击solve按钮,则以长度为比重的最短路径将显示出来(图3),这条路径的总成本显示在状态栏中。
基于ArcGISServer网络分析之最短路径的实现_Java语言_
因为这是一个难点 , 为了说明问题 , 我给大家一个 A rcCatalog里面的插图 (见图 1左 ) 。
图 1 A rcCatalog里面的插图 F ig. 1 The snapshot in ArcCa ta log
2. 5 再次创建. mxd文件
打开 A rcM ap,加载网络分析图层 ,这个时候 , A rcM ap 会问你 ,是否需要导入所有的要素类 ,选择是 ,这时候 ,你 的 A rcMap 中的矢量图层 ,就不是单纯的. shp 文件了 ,而 是个人地理数据库中的地理要素图层 。
至于怎么建立 Network Dataset ,步骤就是 :右键点击 你的 Feature Dataset,新建一个 Network Dataset。你可以起 名为“网络分析图层 ”,跟着步骤做 ,把 Feature Dataset里 面的图层都包含进去 ,生成网络分析图层 ,这样 ,完成后 , 在 Feature Dataset里就自动生成了两个图层名分别为 :网 络分析图层 、网络分析图层 _ junctions,这个时候 ,你的网 络数据集才算配好了 ,要注意创建这个网络分析图层的 每个步骤的意思 ,这个问题 ,不详细赘述 ,需要查找相关 的资料 ,弄明白每个步骤的意思 。
这样 Person Geodatabase里的基本元素就算配好了 , 但是先别高兴得太早 ,还需要在 Feature Dataset里建立进 行网络分析的 Network Dataset,这个图层才是主要进行网 络分析的 。这个名字可以随便起 ,要想进行网络分析 ,必 须建立 Network Dataset,这是一个非常重要的步骤 。
果想让地图与行业紧密结合 ,我们必须要充分发挥 A rc2 GIS的作用 ,才能在短时间内推动地图与行业结合的有效 利用 。当然 ,在这方面 ,国内的 SuperM ap也做得不错 。因 为本人致力于 A rcGIS的研究 ,所以对 A rcGIS了解的多一 点 。下面就本人所研究的智能交通上使用的最短路径的 开发思路写出来 ,与大家共勉 。
ArcGIS中最短路径的实现(二)-电脑资料
ArcGIS中最短路径的实现(二)-电脑资料上次介绍了用几何网络实现的“最短路径”,这次用网络数据集实现真正的最短路径功能,跟上次一样,先处理下数据,。
1、先打开ArcCatalog,连接到目标文件夹,假定该文件下有一个名为road的道路图层。
2、在road图层上右键新建一个网络数据集,并按照其默认设置直至完成。
3、打开该地图的工作空间,把刚才新建的网络数据集添加工作空间中。
4、在网络分析菜单中选择新建最近设施点。
这时在工作空间里,可以看到多了一个名为“Closest Facility”的图层。
它下面还有4个子图层,名字分别为“Facilities”,“Incidents”,“Barriers”,“Routes”。
“Facilities”就是设施点图层,也就是目的点,“Incidents”的意思就是出发点,“Barriers”是障碍点,意思就是地图某条道路附近有一个障碍点,如果障碍点与道路距离在容限范围内,则表示此道路不通,“Routes”就是最终的结果。
这样我们编程实现最短路径的思路就出现了:1、添加出发点。
2、添加目的点。
3、生成最优路径,获取结果。
这里的添加出发点或者目的点,是往“Facilities”或“Incidents”图层上添加元素。
获取结果也是从“Routes”中获取Polyline。
往“Facilities”或“Incidents”图层上添加元素用到的主要方法是INALocator的QueryLocationByPoint函数,生成路径主要接口是INASolver和它的Solve方法。
获取结果是按属性查找,因为“Routes”类其实就是一个图层类,只不过只是存在于内存。
1 CMapControlDefault m_map;2 IPointCollectionPtr m_ipPointCollection;34 ILayerPtr ipLayer = m_map.GetLayer(0); // 网络数据集5 INALayerPtr ipNaLayer = ipLayer;6 if (NULL == ipNaLayer)7 {8 return;9 }1011 INAContextPtr ipNaContext;12 HRESULT hr = ipNaLayer->get_Context(&ipNaContext);13INAClassLoaderPtr ipNAClassLoader(CLSID_NAClassLoader);14 INALocatorPtr ipNALocator = NULL;15 hr = ipNaContext->get_Locator(&ipNALocator);16 ipNALocator->put_SnapToleranceUnits(esriMeters);17 ipNALocator->put_SnapTolerance(200);18 ipNaContext;19 hr = ipNAClassLoader->putref_Locator(ipNALocator);2021 INamedSetPtr ipNamedSet = NULL;22 ipNaContext->get_NAClasses(&ipNamedSet);2324 CString szName = "Facilities";25 BSTR bstrName = szName.AllocSysString();26 INAClassPtr ipNAFacilitiesClass = NULL;27hr = ipNamedSet->get_ItemByName(bstrName, (IUnknown**)&ipNAFacilitiesClass);28 szName = "Incidents";29 bstrName = szName.AllocSysString();30 INAClassPtr ipNAIncidentsClass = NULL;31hr = ipNamedSet->get_ItemByName(bstrName,(IUnknown**)&ipNAIncidentsClass);32 szName = "CFRoutes";33 bstrName = szName.AllocSysString();34 INAClassPtr ipNARoutesClass = NULL;35hr = ipNamedSet->get_ItemByName(bstrName, (IUnknown**)&ipNARoutesClass);3637 INALocationPtr ipNALocation1(CLSID_NALocation);38 INALocationPtr ipNALocation2(CLSID_NALocation);39 ipNAClassLoader->get_Locator(&ipNALocator);40 IPointPtr ipBeginPoint(CLSID_Point);41 m_ipPointCollection->get_Point(0, &ipBeginPoint);42 IPointPtr ipEndPoint(CLSID_Point);43 m_ipPointCollection->get_Point(1, &ipEndPoint);44 IPointPtr ipPoint1(CLSID_Point);45 IPointPtr ipPoint2(CLSID_Point);46 double dbLVal = 0.0;47ipNALocator->QueryLocationByPoint(ipBeginPoint, &ipNALocation1, &ipPoint1, &dbLVal);48ipNALocator->QueryLocationByPoint(ipEndPoint, &ipNALocation2, &ipPoint2, &dbLVal);4950 INALocationObjectPtr ipNALocationObject = NULL;51 IFeatureClassPtr ipFeatureClass = ipNAIncidentsClass;52 IFeaturePtr ipFeature = NULL;53 ipFeatureClass->CreateFeature(&ipFeature);54 IRowSubtypesPtr ipRowSubtypes = ipFeature;55 ipRowSubtypes->InitDefaultValues();56 ipFeature->putref_Shape(ipBeginPoint);57 ITablePtr ipTable = NULL;58 ipFeature->get_Table(&ipTable);59 long nIndex = 0;60 szName = "Sequence";61 bstrName = szName.AllocSysString();62 ipTable->FindField(bstrName, &nIndex);63 VARIANT var_int;64 var_int.intVal = 1;65 var_int.vt = VT_INT;66 ipFeature->put_Value(nIndex, var_int);67 szName = "Name";68 bstrName = szName.AllocSysString();69 ipTable->FindField(bstrName, &nIndex);70ipFeature->put_Value(nIndex, COleVariant("Start Point"));71 ipNALocationObject = ipFeature;72 ipNALocationObject->put_NALocation(ipNALocation1);73 ipFeature->Store();74 IFieldsPtr ipFields(CLSID_Fields);75 hr = ipTable->get_Fields(&ipFields);76 long nFieldCount = 0;77 hr = ipFields->get_FieldCount(&nFieldCount);78 for (int k = 0; k < nFieldCount; k++)79 {80 IFieldPtr ipField(CLSID_Field);81 ipFields->get_Field(k, &ipField);82 BSTR bstrFieldName;83 ipField->get_Name(&bstrFieldName);84 CString szFieldName = bstrFieldName;85 }8687 ipFeatureClass = ipNAFacilitiesClass;88 ipFeatureClass->CreateFeature(&ipFeature);89 ipRowSubtypes = ipFeature;90 ipRowSubtypes->InitDefaultValues();91 ipFeature->putref_Shape(ipEndPoint);92 ipTable = NULL;93 ipFeature->get_Table(&ipTable);94 nIndex = 0;95 szName = "Sequence";96 bstrName = szName.AllocSysString();97 ipTable->FindField(bstrName, &nIndex);98 var_int.intVal = 2;99 ipFeature->put_Value(nIndex, var_int);100 szName = "Name";101 bstrName = szName.AllocSysString();102 ipTable->FindField(bstrName, &nIndex);103ipFeature->put_Value(nIndex, COleVariant("End Point"));104 ipNALocationObject = ipFeature;105ipNALocationObject->put_NALocation(ipNALocation2);106 ipFeature->Store();107108 INAClosestFacilitySolverPtr ipNACFSolver = NULL;109 INASolverPtr ipNASolver = NULL;110 ipNaContext->get_Solver(&ipNASolver);111112 IGPMessagesPtr ipGPM(CLSID_GPMessages);113 ITrackCancelPtr ipTrackCancel(CLSID_TrackCancel);114 VARIANT_BOOL bIsPartialSolution;115ipNASolver->Solve(ipNaContext, ipGPM, ipTrackCancel, &bIsPartialSolution);116117 szName = "CFRoutes";118 bstrName = szName.AllocSysString();119 ipNARoutesClass = NULL;120hr = ipNamedSet->get_ItemByName(bstrName, (IUnknown**)&ipNARoutesClass);121122IFeatureClassPtr ipFeatureClassRoutes = ipNARoutesClass;123 IFeatureCursorPtr ipFCursor = NULL;124 IQueryFilterPtr ipQueryFilter(CLSID_QueryFilter);125 CString szQueryFilter("ObjectID > 0");126 BSTR bstr_QueryFilter = szQueryFilter.AllocSysString();127 ipQueryFilter->put_WhereClause(bstr_QueryFilter);128 VARIANT_BOOL bCycle = VARIANT_FALSE;129 try130 {131 ipFeatureClassRoutes->Search(ipQueryFilter, bCycle, &ipFCursor);132 }133 catch (CException* e)134 {135 CString szErrorMsg;136e->GetErrorMessage(szErrorMsg.GetBuffer(MAX_PATH),MAX_PATH);137 szErrorMsg.ReleaseBuffer();138 e->Delete();139 szErrorMsg += "\n";140 OutputDebugStr(szErrorMsg);141 }142 catch ()143 {144OutputDebugStr("An Unknowned Exception Occurred!\n");145 }146147 IFeaturePtr ipLineFeature = NULL;148 hr = ipFCursor->NextFeature(&ipLineFeature);149 while (ipLineFeature != NULL)150 {151 IGeometryPtr ipGeometry = NULL;152 IPolylinePtr ipPolyLine = NULL;153 ipLineFeature->get_Shape(&ipGeometry);154 esriGeometryType type;155 ipGeometry->get_GeometryType(&type);156 if (type == esriGeometryPolyline)157 {158 ipPolyLine = ipGeometry;159 AddPolyline(ipPolyLine, 4);160 }161 hr = ipFCursor->NextFeature(&ipLineFeature);162 }163 IActiveViewPtr ipActiveView = NULL;164 ipActiveView = m_map.GetActiveView();165 ipActiveView->Refresh();。
arcgis 最短路径 原理
ArcGIS 最短路径原理ArcGIS是一款专业的地理信息系统(GIS)软件,最短路径是ArcGIS中的一个重要功能之一。
最短路径是指在一个网络中,从一个起点到达目标点所需经过的路径中,总距离最短的路径。
在地理空间分析中,最短路径可以用于解决很多问题,比如交通规划、物流配送、紧急救援等。
最短路径算法是基于图论的算法,主要包括两个重要的概念:图和路径。
图在最短路径算法中,图是由节点和边组成的数据结构。
节点表示位置或者地点,边表示节点之间的连接关系,也可以表示节点之间的距离或者权重。
在ArcGIS中,图可以通过矢量数据或者栅格数据来表示,比如道路网络、河流网络等。
图中的节点可以是离散的点,也可以是连续的线或面。
每个节点都有一个唯一的标识符,可以是一个ID号或者一个坐标值。
节点之间的边可以是无向边或者有向边,有向边表示只能从一个节点到另一个节点,而无向边表示可以双向通行。
边可以有不同的权重,表示节点之间的距离或者代价。
在最短路径算法中,边的权重通常用于计算路径的总距离或者代价。
路径路径是指从一个起点到达目标点所需经过的一系列节点和边。
路径可以是一条简单路径,即不经过重复节点的路径,也可以是一条环路,即起点和目标点相同的路径。
在最短路径算法中,路径可以用于计算路径的总距离或者代价。
最短路径算法会根据边的权重来选择最短路径,即总距离或者代价最小的路径。
最短路径算法最短路径算法是用于计算最短路径的一种算法。
常用的最短路径算法有Dijkstra算法、Floyd-Warshall算法和A*算法等。
Dijkstra算法Dijkstra算法是一种单源最短路径算法,用于计算从一个起点到其他所有节点的最短路径。
算法的基本思想是通过不断更新起点到其他节点的最短距离来找到最短路径。
具体步骤如下:1.初始化起点到其他节点的距离为无穷大,起点到自身的距离为0。
2.选择一个距离最小的节点作为当前节点,标记该节点为已访问。
3.更新当前节点的邻居节点的距离,如果经过当前节点到达邻居节点的距离小于已知的最短距离,则更新最短距离。
Arcgis_网络分析中文版_最短路径、最短路径、服务区选择
实验十、网络分析(道路网络分析)一、实验目的网络分析是GIS空间分析的重要功能分。
有两类网络,一为道路(交通)网络,一为实体网络(比如,河流、排水管道、电力网络)。
此实验主要涉及道路网络分析,主要内容包括:●最佳路径分析,如:找出两地通达的最佳路径。
●最近服务设施分析,如:引导最近的救护车到事故地点。
●服务区域分析,如:确定公共设施(医院)的服务区域。
通过对本实习的学习,应达到以下几个目的:(1)加深对网络分析基本原理、方法的认识;(2)熟练掌握ARCGIS下进行道路网络分析的技术方法。
(3)结合实际、掌握利用网络分析方法解决地学空间分析问题的能力。
二、实验准备软件准备:ArcMap, 要求有网络分析扩展模块的许可授权数据准备:Shape文件创建网络数据集(高速公路:Highways, 主要街道:Major Streets, 公园:Parks,湖泊:Lakes,街道:Streets)Geodatabase网络数据集:NetworkAnalysis.mdb:包含:街道图层:Streets 仓库图层:Warehouses 商店图层:Stores在ArcMap中加载启用NetWork Anylyst网络分析模块:执行菜单命令[工具Tools]>>[Extensions], 在[Extensions]对话框中点击[Network Analyst] 启用网络分析模块,即装入Network Analyst空间分析扩展模块。
道路网络分析步骤1. 创建分析图层2. 添加网络位置3. 设置分析选项4. 执行分析过程显示分析结果三、实验内容及步骤(一) 最佳路径分析根据给定的停靠点,查找最佳路径(最省时的线路)1.1 数据准备(1).双击ArcMap 工程,或从ArcMap 中打开工程EX10_1.mxd.(2).如果网络分析扩展模块(Network Analyst Extension )已经启用(参考实验准备中的步骤)(3) 如果网络分析工具栏没有出现,则在工具栏显区点右键打开或执行菜单命令[View-视图]>>[Toolbars-工具栏],并点击[Network Analyst ]以显示网络分析工具栏。
arcgis 最短路径 原理
arcgis 最短路径原理
ArcGIS的最短路径分析原理基于图论和网络分析的概念。
最短路径分析是指从一个地理网络的起始点到目标点寻找最短路径的过程。
最短路径分析的算法通常使用最短路径算法,其中最常用的是Dijkstra算法和A*算法。
这些算法通过计算网络中每个节点的距离和路径来确定最短路径。
最短路径分析的基本原理如下:
1. 将地理空间数据转化为网络数据,通过将响应地理要素(如街道、河流等)转化为线状要素,节点表示要素连接点。
2. 通过计算网络中各节点之间的距离和连接关系,构建网络拓扑。
3. 根据用户指定的起始点和目标点,在网络上进行搜索,并计算每个节点的最短路径距离。
4. 使用最短路径算法来计算最短路径。
Dijkstra算法根据节点之间的距离和路径成本来计算最短路径。
A*算法在Dijkstra算法的基础上加入了启发函数,以增加搜索的效率。
5. 根据计算结果,生成最短路径线状要素,以可视化显示出从起始点到目标点的最短路径。
根据用户的需求和约束条件,最短路径分析还可以考虑其他因素,如拥堵、交通规则、权重等。
这些因素可以通过网络分析工具中设置的属性或权重来体现。
总的来说,ArcGIS的最短路径分析通过构建地理网络和应用
最短路径算法,找到从起始点到目标点的最短路径,并将结果可视化表示出来。
ArcGIS网络分析最短路径分析源代码(VB6.0)
ArcGIS⽹络分析最短路径分析源代码(VB6.0)ArcGIS⽹络分析最短路径分析源代码(VB6.0)12' Copyright 1995-2005 ESRI34' All rights reserved under the copyright laws of the United States.56' You m ay freely redistribute and use this sam ple code, with or without m odifi cation.78' Disclaimer: THE SAMPLE CODE IS PROVIDED "AS IS" AND ANY EXPRESS O R IMPLIED9' WARRANTIES, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILIT Y AND FITNESS10' FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ESR I OR11' CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPE CIAL, EXEMPLARY,12' OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROC UREMENT OF13' SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; O R BUSINESS14' INTERRUPTION) SUSTAINED BY YOU OR A THIRD PARTY, HOWEVER CAUSE D AND ON ANY15' THEORY OF LIABILITY, WHETHER IN CONT RACT, STRICT LIABILITY, OR TO RT ARISING IN ANY16' WAY OUT OF THE USE OF THIS SAMPLE CODE, EVEN IF ADVISED OF THE P OSSIBILITY OF17' SUCH DAMAGE.1819' For additional information contact: Environmental System s Research Institu te, Inc.2021' Attn: Contracts Dept.2223' 380 New York Street2425' Redlands, California, U.S.A. 923732627' Em ail: contracts@/doc/07098e37f111f18583d05ab5.html2829Option Explicit3031' vb version of the PathFinder object3233' 本地变量34Private m_ipGeometricNetwork As esriGeoDatabase.IGeometricNetwork35Private m_ipMap As esriCarto.IMap36Private m_ipPoints As esriGeometry.IPointCollection37Private m_ipPointToEID As esriNetworkAnalysis.IPointToEID38' 返回结果变量39Private m_dblPathCost As Double40Private m_ipEnumNetEID_Junctions As esriGeoDatabase.IEnumNetEID41Private m_ipEnumNetEID_Edges As esriGeoDatabase.IEnumNetEID42Private m_ipPolyline As esriGeometry.IPolyline434445' Optionally set the Map (e.g. the current m ap in ArcMap),46' otherwise a default m ap will be made (for IPointToEID).48Public Property Set Map(Map As esriCarto.IMap)49Set m_ipMap = Map50End Property5152Public Property Get Map() As esriCarto.IMap53Set Map = m_ipMap54End Property5556' Either OpenAccessNetwork or OpenFeatureDatasetNetwork57' needs to be called.5859Public Sub OpenAccessNetwork(AccessFileName As String, FeatureDatasetNa me As String)6061Dim ipWorkspaceFactory As esriGeoDatabase.IWorkspaceFactory62Dim ipWorkspace As esriGeoDatabase.IWorkspace63Dim ipFeatureWorkspace As esriGeoDatabase.IFeatureWorkspace64Dim ipFeatureDataset As esriGeoDatabase.IFeatureDataset6566' After this Sub exits, we'll have an INetwork interface67' and an IMap interface initialized for the network we'll be using.6869' close down the last one if opened70 CloseWorkspace7172' open the m db73Set ipWorkspaceFactory =New esriDataSourcesGDB.AccessWorkspaceFact ory74Set ipWorkspace = ipWorkspaceFactory.OpenFromFile(AccessFileName, 0)76' get the FeatureWorkspace77Set ipFeatureWorkspace = ipWorkspace7879' open the FeatureDataset80Set ipFeatureDataset = ipFeatureWorkspace.OpenFeatureDataset(FeatureD atasetNam e)8182' initialize Network and Map (m_ipNetwork, m_ipMap)83If Not InitializeNetworkAndMap(ipFeatureDataset) Then Err.Raise 0, "Open AccessNetwork", "Error initializing Network and Map"8485End Sub8687Public Sub OpenFeatureDatasetNetwork(FeatureDataset As esriGeoDatabase. IFeatureDataset)88' close down the last one if opened89 CloseWorkspace9091' we assum e that the caller has passed a valid FeatureDataset9293' initialize Network and Map (m_ipNetwork, m_ipMap)94If Not InitializeNetworkAndMap(FeatureDataset) Then Err.Raise 0, "OpenFe atureDatasetNetwork", "Error initializing Network and Map"9596End Sub9798' The collection of points to travel through must be set.99100Public Property Set StopPoints(Points As esriGeometry.IPointCollection)102End Property103104Public Property Get StopPoints() As esriGeometry.IPointCollection105Set StopPoints = m_ipPoints106End Property107108' Calculate the path109110Public Sub SolvePath(WeightName As String)111112Dim ipNetwork As esriGeoDatabase.INetwork113Dim ipTraceFlowSolver As esriNetworkAnalysis.ITraceFlowSolver114Dim ipNetSolver As esriNetworkAnalysis.INetSolver115Dim ipNetFlag As esriNetworkAnalysis.INetFlag116Dim ipaNetFlag() As esriNetworkAnalysis.IEdgeFlag117Dim ipEdgePoint As esriGeometry.IPoint118Dim ipNetElements As esriGeoDatabase.INetElements119Dim intEdgeUserClassID As Long120Dim intEdgeUserID As Long121Dim intEdgeUserSubID As Long122Dim intEdgeID As Long123Dim ipFoundEdgePoint As esriGeometry.IPoint124Dim dblEdgePercent As Double125Dim ipNetWeight As esriGeoDatabase.INetWeight126Dim ipNetSolverWeights As esriNetworkAnalysis.INetSolverWeights127Dim ipNetSchem a As esriGeoDatabase.INetSchem a128Dim intCount As Long129Dim i As Long130Dim vaRes() As Variant132' m ake sure we are ready133 Debug.Assert Not m_ipPoints Is Nothing134 Debug.Assert Not m_ipGeometricNetwork Is Nothing135136' instantiate a trace flow solver137Set ipTraceFlowSolver = New esriNetworkAnalysis.TraceFlowSolver138139' get the INetSolver interface140Set ipNetSolver = ipTraceFlowSolver141142' set the source network to solve on143Set ipNetwork = m_/doc/07098e37f111f18583d05ab5.html work144Set ipNetSolver.SourceNetwork = ipNetwork145146' m ake edge flags from the points147148' the INetElements interface is needed to get UserID, UserClassID,149' and UserSubID from an element id150Set ipNetElements = ipNetwork151152' get the count153 intCount = m_ipPoints.PointCount154 Debug.Assert intCount > 1155156' dimension our IEdgeFlag array157ReDim ipaNetFlag(intCount)158159For i = 0 To intCount - 1160' m ake a new Edge Flag162Set ipEdgePoint = m_ipPoints.Point(i)163' look up the EID for the current point (this will populate intEdgeID and d blEdgePercent)164 m_ipPointToEID.GetNearestEdge ipEdgePoint, intEdgeID, ipFoundEdgePoi nt, dblEdgePercent165 Debug.Assert intEdgeID > 0 ' else Point (eid) not found166 ipNetElements.QueryIDs intEdgeID, esriETEdge, intEdgeUserClassID, intE dgeUserID, intEdgeUserSubID167 Debug.Assert (intEdgeUserClassID > 0) And (intEdgeUserID > 0) ' else P oint not found168 /doc/07098e37f111f18583d05ab5.html erClassID = intEdgeUserClassID169 /doc/07098e37f111f18583d05ab5.html erID = intEdgeUserID170 /doc/07098e37f111f18583d05ab5.html erSubID = intEdgeUserSubID171Set ipaNetFlag(i) = ipNetFlag172Next173174' add these edge flags175 ipTraceFlowSolver.PutEdgeOrigins intCount, ipaNetFlag(0)176177' set the weight (cost field) to solve on178179' get the INetSchem a interface180Set ipNetSchem a = ipNetwork181Set ipNetWeight = ipNetSchem a.WeightByName(WeightName)182 Debug.Assert Not ipNetWeight Is Nothing183184' set the weight (use the sam e for both directions)185Set ipNetSolverWeights = ipTraceFlowSolver186Set ipNetSolverWeights.From ToEdgeWeight = ipNetWeight188189' initialize array for results to number of segments in result190ReDim vaRes(intCount - 1)191192' solve it193 ipTraceFlowSolver.FindPath esriFMConnected, esriSPObjFnMinSum, m_ipEn umNetEID_Junctions, m_ipEnumNetEID_Edges, intCount - 1, vaRes(0)194195' com pute total cost196 m_dblPathCost = 0197For i =LBound(vaRes) To UBound(vaRes)198 m_dblPathCost = m_dblPathCost + vaRes(i)199Next200201' clear the last polyline result202Set m_ipPolyline =Nothing203204End Sub205206' Property to get the cost207208Public Property Get PathCost() As Double209 PathCost = m_dblPathCost210End Property211212' Property to get the shape213214Public Property Get PathPolyLine() As esriGeometry.IPolyline215217Dim count As Long, i As Long218Dim ipEIDInfo As esriNetworkAnalysis.IEIDInfo219Dim ipEnumEIDInfo As esriNetworkAnalysis.IEnumEIDInfo220Dim ipGeometry As esriGeometry.IGeometry221Dim ipNewGeometryColl As esriGeometry.IGeometryCollection222Dim ipSpatialReference As esriGeometry.ISpatialReference223224' if the line is already computed since the last path, just return it225If Not m_ipPolyline Is Nothing Then226Set PathPolyLine = m_ipPolyline227Exit Property228End If229230Set m_ipPolyline =New esriGeometry.Polyline231Set ipNewGeometryColl = m_ipPolyline232233' a path should be solved first234 Debug.Assert Not m_ipEnumNetEID_Edges Is Nothing235236' m ake an EIDHelper object to translate edges to geom etric features237Set ipEIDHelper =New esriNetworkAnalysis.EIDHelper238Set ipEIDHelper.GeometricNetwork = m_ipGeometricNetwork239Set ipSpatialReference = m_ipMap.SpatialReference240Set ipEIDHelper.OutputSpatialReference = ipSpatialReference241 ipEIDHelper.ReturnGeometries =True242243' get the details using the IEIDHelper classes244Set ipEnumEIDInfo = ipEIDHelper.CreateEnumEIDInfo(m_ipEnumNetEID_ Edges)247' set the iterator to beginning248 ipEnumEIDInfo.Reset249250For i = 1 To count251252' get the next EID and a copy of its geom etry (it m akes a Clone)253Set ipEIDInfo = ipEnumEIDInfo.Next254Set ipGeom etry = ipEIDInfo.Geometry255256 ipNewGeometryColl.AddGeometryCollection ipGeometry257258Next' EID259260' return the m erged geometry as a Polyline261Set PathPolyLine = m_ipPolyline262263End Property264265' Private266267Private Sub CloseWorkspace()268' m ake sure we let go of everything and start with new results269Set m_ipGeometricNetwork =Nothing270Set m_ipPoints =Nothing271Set m_ipPointToEID = Nothing272Set m_ipEnumNetEID_Junctions =Nothing273Set m_ipEnumNetEID_Edges =Nothing274Set m_ipPolyline =Nothing277Private Function InitializeNetworkAndMap(FeatureDataset As esriGeoDataba se.IFeatureDataset) As Boolean278279Dim ipNetworkCollection As esriGeoDatabase.INetworkCollection280Dim ipNetwork As esriGeoDatabase.INetwork281Dim count As Long, i As Long282Dim ipFeatureClassContainer As esriGeoDatabase.IFeatureClassContainer283Dim ipFeatureClass As esriGeoDatabase.IFeatureClass284Dim ipGeoDataset As esriGeoDatabase.IGeoDataset285Dim ipLayer As esriCarto.ILayer286Dim ipFeatureLayer As esriCarto.IFeatureLayer287Dim ipEnvelope As esriGeometry.IEnvelope, ipMaxEnvelope As esriGeomet ry.IEnvelope288Dim dblSearchTol As Double289Dim dblWidth As Double, dblHeight As Double290291On Error GoTo Trouble292293' get the networks294Set ipNetworkCollection = FeatureDataset295296' even though a FeatureDataset can have m any networks, we'll just297' assum e the first one (otherwise you would pass the network name in, et c.)298299' get the count of networks300 count = ipNetworkCollection.GeometricNetworkCount301304' get the first Geometric Newtork (0 - based)305Set m_ipGeometricNetwork = ipNetworkCollection.GeometricNetwork(0)306307' get the Network308Set ipNetwork = m_/doc/07098e37f111f18583d05ab5.html work309310' The EID Helper class that converts points to EIDs needs a311' IMap, so we'll need one around with all our layers added.312' This Pathfinder object has an optional Map property than m ay be set313' before opening the Network.314If m_ipMap Is Nothing Then315Set m_ipMap = New esriCarto.Map316317' Add each of the Feature Classes in this Geometric Network as a m ap Lay er318Set ipFeatureClassContainer = m_ipGeometricNetwork319 count = ipFeatureClassContainer.ClassCount320 Debug.Assert count > 0 ' then Exception.Create('No (network) feature cl asses found');321322For i = 0 To count - 1323' get the feature class324Set ipFeatureClass = ipFeatureClassContainer.Class(i)325' m ake a layer326Set ipFeatureLayer = New esriCarto.FeatureLayer327Set ipFeatureLayer.FeatureClass = ipFeatureClass328' add layer to the m ap329 m_ipMap.AddLayer ipFeatureLayer331End If' we needed to m ake a Map332333334' Calculate point snap tolerance as 1/100 of m ap width.335 count = m_/doc/07098e37f111f18583d05ab5.html yerCount336Set ipMaxEnvelope =New esriGeometry.Envelope337For i = 0 To count - 1338Set ipLayer = m_/doc/07098e37f111f18583d05ab5.html yer(i)339Set ipFeatureLayer = ipLayer340' get its dim ensions (for setting search tolerance)341Set ipGeoDataset = ipFeatureLayer342Set ipEnvelope = ipGeoDataset.Extent343' m erge with m ax dim ensions344 ipMaxEnvelope.Union ipEnvelope345Next346347' finally, we can set up the IPointToEID348Set m_ipPointToEID = New esriNetworkAnalysis.PointToEID349Set m_ipPointToEID.SourceMap = m_ipMap350Set m_ipPointToEID.GeometricNetwork = m_ipGeometricNetwork351352' set snap tolerance353 dblWidth = ipMaxEnvelope.Width354 dblHeight = ipMaxEnvelope.Height355356If dblWidth > dblHeight Then357 dblSearchTol = dblWidth / 100#358Else359 dblSearchTol = dblHeight / 100#360End If361362 m_ipPointToEID.SnapTolerance = dblSearchTol363364 InitializeNetworkAndMap =True' good to go365Exit Function366367Trouble:368 InitializeNetworkAndMap =False' we had an error369End Function。
基于ArcGIS Server的最短路径关键技术
基于ArcGIS Server的最短路径关键技术
辜运燕;戴相喜;欧晓
【摘要】WebGIS是GIS发展的主流方向,最短路径分析在WebGIS中有着非常广泛的应用.以校园电子地图中最短路径分析为例,研究基于ArcGIS Server ADF的最短路径实现关键技术,并在中进行实现.
【期刊名称】《交通科技与经济》
【年(卷),期】2010(012)002
【总页数】4页(P19-22)
【关键词】ArcGIS Server;最短路径;;WebGIS
【作者】辜运燕;戴相喜;欧晓
【作者单位】中国民航飞行学院,空中交通管理学院,四川,广汉,618300;南京市测绘勘察研究院有限公司,江苏南京,210005;中国民航飞行学院,航空工程学院,四川,广汉618300
【正文语种】中文
【中图分类】P208。
GIS软件工程实习报告(最短路径分析)
AE开发之基于几何网络的最短路径分析1、实习目的本次实习目的在于熟练掌握ArcGIS Engine开发工具并能够通过C#语言在VS 2010开发环境中完成查询几何网络的最短路径分析的功能。
2、实习时间2015年5月23日星期六3、实习容3.1实验环境操作系统:Windows 2007二次开发平台:VS 2010开发环境、ArcGIS Desktop10.0、AE开发组件3.2实验任务完成基于几何网络分析的最短路径查询功能,即实现通过在几何网络地图中指定起始点,能够查询经过起始点的最短路线,并能够通过缩放功能在地图窗口居中显示。
3.3实验步骤3.3.1新建项目选择\文件\新建项目,如图选择项目类型中Visual C#,再选择Windows Application,记为“FindShortPath”,点击确定。
3.3.2添加控件3.3.3控件绑定因为添加的控件只是单独存在,但是程序需要各控件间协同工作,因此要进行控件绑定。
3.3.4创建几何网络1.在ArcCataLog中新建个人地理数据库—“甘地的个人地理数据库”,然后新建要素数据集“road”,接着,鼠标右键选择要素数据集“road”,选择“导入要素类”,导入需要创建几何网络的要素类“主要公路”,输出要素类的名字改为“road”,如下图所示:2.鼠标右键选择要素数据集“road”,选择新建“几何网络”,则出现“新建几何网络”对话框,作如下图所示的一系列设置,最终得到几何网络“road_Net”。
至此,得到几何网络“road_Net”,如下图所示:3.3.5代码实现最短路径分析①设置ToolStrip1②添加代码private IActiveView m_ipActiveView;private IMap m_ipMap;//地图控件中地图private IGraphicsContainer pGC;//图形对象private bool clicked = false;int clickedcount = 0;private double m_dblPathCost = 0;private IGeometricNetwork m_ipGeometricNetwork;private IPointCollection m_ipPoints;//输入点集合private IPointToEID m_ipPointToEID;private IEnumNetEID m_ipEnumNetEID_Junctions;private IEnumNetEID m_ipEnumNetEID_Edges;private IPolyline m_ipPolyline;private IMapControl3 mapctrlMainMap = null;private void Form1_Load(object sender, EventArgs e){//对象初始化mapctrlMainMap = (IMapControl3)this.axMapControl1.Object;m_ipActiveView = axMapControl1.ActiveView;m_ipMap = m_ipActiveView.FocusMap;clicked = false;pGC = m_ipMap as IGraphicsContainer;}private void Findpath_Click(object sender, EventArgs e){mapctrlMainMap.CurrentTool = null;//设置鼠标样式axMapControl1.MousePointer = esriControlsMousePointer.esriPointerCrosshair;if (yerCount == 0){MessageBox.Show("请先加载几何网络数据!");return;}m_ipActiveView = axMapControl1.ActiveView;m_ipMap = m_ipActiveView.FocusMap;clicked = false;pGC = m_ipMap as IGraphicsContainer;ILayer ipLayer = m_ipMap.get_Layer(0);IFeatureLayer ipFeatureLayer = ipLayer as IFeatureLayer;IFeatureDataset ipFDS = ipFeatureLayer.FeatureClass.FeatureDataset;OpenFeatureDatasetNetwork(ipFDS);clicked = true;clickedcount = 0;pGC.DeleteAllElements();}private void SolvePath_Click(object sender, EventArgs e){axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault;if (SolvePathGan("Weight"))//先解析路径{IPolyline ipPolyResult = PathPolyLine();//最后返回最短路径clicked = false;if (ipPolyResult.IsEmpty){MessageBox.Show("没有路径可到!!");}else{IRgbColor color = new RgbColorClass();color.Red = 255;color.Blue = 64;color.Green = 128;LineElementClass element = new LineElementClass();ILineSymbol linesymbol = new SimpleLineSymbolClass();linesymbol.Color = color as IColor;linesymbol.Width = 3;element.Geometry = m_ipPolyline;element.Symbol = linesymbol;pGC.AddElement(element, 0);m_ipActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);axMapControl1.FlashShape(element.Geometry);MessageBox.Show("路径经过" + m_ipEnumNetEID_Edges.Count + "条线" + "\r\n" + "经过节点数为" + m_ipEnumNetEID_Junctions.Count + "\r\n" + "路线长度为" + m_ipPolyline.Length.ToString("#######.##") + "\r\n", "几何路径信息");}}}//路径缩放功能private void SuoFang_Click(object sender, EventArgs e){if (m_ipPolyline == null){MessageBox.Show("当前没有执行路径查询!!!请确认!");}else{this.axMapControl1.Extent = m_ipPolyline.Envelope;}}#region 自定义路径查询函数public void OpenFeatureDatasetNetwork(IFeatureDataset FeatureDataset){CloseWorkspace();if (!InitializeNetworkAndMap(FeatureDataset))Console.WriteLine("打开network出错");}//关闭工作空间private void CloseWorkspace(){m_ipGeometricNetwork = null;m_ipPoints = null;m_ipPointToEID = null;m_ipEnumNetEID_Junctions = null;m_ipEnumNetEID_Edges = null;m_ipPolyline = null;}//初始化几何网络和地图private bool InitializeNetworkAndMap(IFeatureDataset FeatureDataset){IFeatureClassContainer ipFeatureClassContainer;IFeatureClass ipFeatureClass;IGeoDataset ipGeoDataset;ILayer ipLayer;IFeatureLayer ipFeatureLayer;IEnvelope ipEnvelope, ipMaxEnvelope;double dblSearchTol;INetworkCollection ipNetworkCollection = FeatureDataset as INetworkCollection;int count = ipNetworkCollection.GeometricNetworkCount;//获取第一个几何网络工作空间m_ipGeometricNetwork = ipNetworkCollection.get_GeometricNetwork(0);INetwork ipNetwork = m_work;if (m_ipMap != null){ipFeatureClassContainer = m_ipGeometricNetwork as IFeatureClassContainer;count = ipFeatureClassContainer.ClassCount;for (int i = 0; i < count; i++){ipFeatureClass = ipFeatureClassContainer.get_Class(i);ipFeatureLayer = new FeatureLayerClass();ipFeatureLayer.FeatureClass = ipFeatureClass;for (int j = 0; j < m_yerCount; j++){if (m_ipMap.get_Layer(j).Name.ToUpper() == .ToUpper()){continue;}}}}count = m_yerCount;ipMaxEnvelope = new EnvelopeClass();for (int i = 0; i < count; i++){ipLayer = m_ipMap.get_Layer(i);ipFeatureLayer = ipLayer as IFeatureLayer;ipGeoDataset = ipFeatureLayer as IGeoDataset;ipEnvelope = ipGeoDataset.Extent;ipMaxEnvelope.Union(ipEnvelope);}m_ipPointToEID = new PointToEIDClass();m_ipPointToEID.SourceMap = m_ipMap;m_ipPointToEID.GeometricNetwork = m_ipGeometricNetwork;double dblWidth = ipMaxEnvelope.Width;double dblHeight = ipMaxEnvelope.Height;if (dblWidth > dblHeight)dblSearchTol = dblWidth / 100;elsedblSearchTol = dblHeight / 100;m_ipPointToEID.SnapTolerance = dblSearchTol;return true;}//返回路径的几何体public IPolyline PathPolyLine(){IEIDInfo ipEIDInfo;IGeometry ipGeometry;if (m_ipPolyline != null) return m_ipPolyline;m_ipPolyline = new PolylineClass();IGeometryCollection ipNewGeometryColl = m_ipPolyline as IGeometryCollection;//引用传递ISpatialReference ipSpatialReference = m_ipMap.SpatialReference;IEIDHelper ipEIDHelper = new EIDHelper();ipEIDHelper.GeometricNetwork = m_ipGeometricNetwork;ipEIDHelper.OutputSpatialReference = ipSpatialReference;ipEIDHelper.ReturnGeometries = true;IEnumEIDInfo ipEnumEIDInfo = ipEIDHelper.CreateEnumEIDInfo(m_ipEnumNetEID_Edges);int count = ipEnumEIDInfo.Count;ipEnumEIDInfo.Reset();for (int i = 0; i < count; i++){string[] info;info = new string[count];ipEIDInfo = ipEnumEIDInfo.Next();ipGeometry = ipEIDInfo.Geometry;ipNewGeometryColl.AddGeometryCollection(ipGeometry as IGeometryCollection);info[i] = m_ipPolyline.Length.ToString();}return m_ipPolyline;}public bool SolvePathGan(string WeightName){try{int intJunctionUserClassID;int intJunctionUserID;int intJunctionUserSubID;int intJunctionID;IPoint ipFoundJunctionPoint;ITraceFlowSolverGEN ipTraceFlowSolver = new TraceFlowSolver() as ITraceFlowSolverGEN;INetSolver ipNetSolver = ipTraceFlowSolver as INetSolver;if (m_ipGeometricNetwork == null){return false;}INetwork ipNetwork = m_work;ipNetSolver.SourceNetwork = ipNetwork;INetElements ipNetElements = ipNetwork as INetElements;if (m_ipPoints == null){ MessageBox.Show("请选择点!!"); return false; }int intCount = m_ipPoints.PointCount;//这里的points 有值吗?////定义一个边线旗数组//*********最近点***************//////////IJunctionFlag[] pJunctionFlagList = new JunctionFlag[intCount];for (int i = 0; i < intCount; i++){INetFlag ipNetFlag = new JunctionFlag() as INetFlag;IPoint ipJunctionPoint = m_ipPoints.get_Point(i);//查找输入点的最近的网络点m_ipPointToEID.GetNearestJunction(ipJunctionPoint, out intJunctionID, out ipFoundJunctionPoint);ipNetElements.QueryIDs(intJunctionID, esriElementType.esriETJunction, out intJunctionUserClassID, out intJunctionUserID, out intJunctionUserSubID);erClassID = intJunctionUserClassID;erID = intJunctionUserID;erSubID = intJunctionUserSubID;IJunctionFlag pTemp = (IJunctionFlag)(ipNetFlag as IJunctionFlag);pJunctionFlagList[i] = pTemp;}ipTraceFlowSolver.PutJunctionOrigins(ref pJunctionFlagList);INetSchema ipNetSchema = ipNetwork as INetSchema;INetWeight ipNetWeight = ipNetSchema.get_WeightByName(WeightName);INetSolverWeights ipNetSolverWeights = ipTraceFlowSolver as INetSolverWeights;ipNetSolverWeights.FromToEdgeWeight = ipNetWeight;//开始边线的权重ipNetSolverWeights.ToFromEdgeWeight = ipNetWeight;//终止边线的权重object[] vaRes = new object[intCount - 1];//通过findpath得到边线和交汇点的集合ipTraceFlowSolver.FindPath(esriFlowMethod.esriFMConnected,esriShortestPathObjFn.esriSPObjFnMinSum,outm_ipEnumNetEID_Junctions, out m_ipEnumNetEID_Edges, intCount - 1, ref vaRes);m_dblPathCost = 0;for (int i = 0; i < vaRes.Length; i++){double m_Va = (double)vaRes[i];m_dblPathCost = m_dblPathCost + m_Va;}m_ipPolyline = null;return true;}catch (Exception ex){Console.WriteLine(ex.Message); return false;}#endregion}private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e){if (clicked != true)return;IPoint ipNew;if (m_ipPoints == null){m_ipPoints = new Multipoint();}ipNew = m_ipActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);object o = Type.Missing;m_ipPoints.AddPoint(ipNew, ref o, ref o);IElement element;ITextElement textelement = new TextElementClass();element = textelement as IElement;clickedcount++;textelement.Text = clickedcount.ToString();element.Geometry = m_ipActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(e.x, e.y);pGC.AddElement(element, 0);m_ipActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);}3.4实验结果在得到的窗口中加载“甘地的个人地理数据库”(在压缩包中有)中的几何网络“road_Net”,将几何网络地图加载到地图显示窗口中,如下图所示:点击图标添加起始点,效果如下图:然后点击图标,计算最短路径,效果如下图:最后点击图标得到最短路径的缩放,效果如下图:这样就完成了最短路径的查询分析和显示的功能。
Arcgis操作 实验十五:最短路径分析
实验十五:最短路径分析一、实验目的1、掌握各种类型的最短路径分析;2、理解网络分析原理。
二、实验准备数据准备:City.mdb软件准备:ArcGIS Desktop9.x,ArcCatalog三、实验内容根据不同的要求,获得到达指定目的地的最佳路径,并给出路径的长度;找出距景点最近的某设施的路径。
1、在网络中指定一个商业中心,分别求出在不同距离、时间的限制下从家到商业中心的最佳路径;2、给定访问顺序,按要求找出从家出发,逐个经过访问点,最终到达目的地的最佳路径;3、研究阻强的设置对最佳路径选择的影响。
四、实验步骤启动ArcMap ,打开city. mdb ,双击city数据库,加载数据。
对点状要素place符号化:以HOME字段,1值为家,0值为商业中心。
具体步骤见操作视频:最短路径分析.exe图1 无权重参照的最短路径显示(1)无权重最佳路径的生成1)在网络分析工具条上,选择旗标工具,将旗标放在“家”和想要取得“商业中心”点上。
2)选择Analysis/Options命令,打开Analysis Options对话框,确认Weights和Weight Filter 标签项全部是None,这种情况下进行的最短路径分析是完全按照这个网络自身的长短来确定。
3)在Track Task文本框中选择Find path。
单击solve按钮。
显示最短路径(图1),这条路径的总成本显示在状态栏中。
(2)加权最佳路径生成1)在设施网络分析工具条下,点选旗标工具,将旗标分别放在“家”和想去的某个“商业中心”的位置上。
2)选择Analysis/Options命令,打开Analysis Options对话框(图2)进入Weights标签页,在边的权重上,全部选择长度权重属性。
图2 长度权重属性设置3)在Track Task文本枢中选择Find path,单击solve按钮,则以长度为比重的最短路径将显示出来(图3),这条路径的总成本显示在状态栏中。
基于ArcGIS对矢量数据模型的最短路径分析
基于ArcGIS对矢量数据模型的最短路径分析高晟【摘要】In this paper, using the module of network analysis in ArcGis, problems of how to find different the shortest path in different circumstances discussed are given respectively.%利用ArcGIS中网络分析模块对最短路径问题分情况进行了探讨,分别给出了在不同情况下如何找到不同最短路径。
【期刊名称】《微型机与应用》【年(卷),期】2011(030)015【总页数】3页(P84-86)【关键词】矢量数据;网络分析;ArcGIS;最短路径【作者】高晟【作者单位】山西农业大学,山西太谷030801【正文语种】中文【中图分类】TN9人们每天都会提出如下一些问题:应该在道路的何处开挖,才能迅速找到煤气总管?将冰箱送到客户家里,如何走最好?这个城市卖掉的土地和财产总值多少?要回答上述问题需要访问具有多维 (x、y、z坐标和时间)、大容量和高处理费用特征的地理信息;同时,即使回答明显简单的地理学问题,也要求按统一的标准集成多种数据源。
1 矢量数据模型的概念与特点以计算机能够接受和处理的数据形式,为了反映空间实体的某些结构特性和行为功能,按一定的方案建立起来的数据逻辑组织方式,是对现实世界的抽象表达。
空间数据模型是地理信息系统的基础,它不仅决定了系统数据管理的有效性,而且是系统灵活性的关键。
空间数据模型是在实体概念的基础上发展起来的,它包含两个基本内容,即实体组和它们之间的相关关系。
实体和相关关系可以通过性质和属性来说明。
空间数据模型可以被定义为一组由相关关系联系在一起的实体集(D.J.Peuqoet)[1]。
结合空间数据的具体特点进行空间数据模型的设计是地理信息系统的关键。
由于空间数据模型的设计与计算机硬件、系统软件和工具软件的发展现状密切相关,所以,就目前的发展现状而言,很难用一个统一的数据模型来表达复杂多变的地理空间实体。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十、网络分析(道路网络分析)一、实验目的网络分析是GIS空间分析的重要功能分。
有两类网络,一为道路(交通)网络,一为实体网络(比如,河流、排水管道、电力网络)。
此实验主要涉及道路网络分析,主要内容包括:●最佳路径分析,如:找出两地通达的最佳路径。
●最近服务设施分析,如:引导最近的救护车到事故地点。
●服务区域分析,如:确定公共设施(医院)的服务区域。
通过对本实习的学习,应达到以下几个目的:(1)加深对网络分析基本原理、方法的认识;(2)熟练掌握ARCGIS下进行道路网络分析的技术方法。
(3)结合实际、掌握利用网络分析方法解决地学空间分析问题的能力。
二、实验准备软件准备:ArcMap, 要求有网络分析扩展模块的许可授权数据准备:Shape文件创建网络数据集(高速公路:Highways, 主要街道:Major Streets, 公园:Parks,湖泊:Lakes,街道:Streets)Geodatabase网络数据集:NetworkAnalysis.mdb:包含:街道图层:Streets 仓库图层:Warehouses 商店图层:Stores在ArcMap中加载启用NetWork Anylyst网络分析模块:执行菜单命令[工具Tools]>>[Extensions], 在[Extensions]对话框中点击[Network Analyst] 启用网络分析模块,即装入Network Analyst空间分析扩展模块。
道路网络分析步骤1. 创建分析图层2. 添加网络位置3. 设置分析选项4. 执行分析过程显示分析结果三、实验内容及步骤(一) 最佳路径分析根据给定的停靠点,查找最佳路径(最省时的线路)1.1 数据准备(1).双击ArcMap 工程,或从ArcMap 中打开工程EX10_1.mxd.(2).如果网络分析扩展模块(Network Analyst Extension )已经启用(参考实验准备中的步骤)(3) 如果网络分析工具栏没有出现,则在工具栏显区点右键打开或执行菜单命令[View-视图]>>[Toolbars-工具栏],并点击[Network Analyst ]以显示网络分析工具栏。
(4)如果网络分析窗口没有推开,则在网络分析工具栏中点击网络分析窗口按钮(上图红色区域),以打开网络分析窗口:注意:这是一个悬停窗口,它可以嵌入并固定在ArcMap 的窗体中,或是作为一个单独的窗口悬浮在操作区上。
在练习中,为了方便可以将其固定在TOC 面板之下。
1.2 创建路径分析图层在网络分析工具栏[ Network Analyst]上点击下拉菜单[Network Analyst],然后点击[New Route ]菜单项.此时在网络分析窗口[ Network Analyst Window]中包含一个空的列表,显示停靠点(Stops),路径(Routes),路障(Barriers)的相关信息。
同时,在TOC(图层列表)面板上添加了新建的一个路径分析图层[Route]组合。
1.3 添加停靠点通过以下步骤添加停靠点,最佳路径分析将找到最佳的经停顺序以计算并得到最佳路径(1) 在网络分析窗口[Network Analyst Window]中点选Stops(0).(2). 在网络分析工具栏[Network Analyst]上点击“新建网络位置”[Create Network Location]工具。
(3) 在地图的街道网络图层的任意位置上点击以定义一个新的停靠点。
程序将在街道网络上自动的计算并得到一个距离给定位置最近的停靠点,已定义的停靠点会以特别的符号进行显示。
停靠点会保持被选中的状态,除非它被明确地反选(Unselected)或者又新增了一个另外的停靠点。
停靠点的所在的位置会同时显示一个数字“1”,数字表示经停的顺序。
(4)再添加4 个停靠点。
新增加的停靠点的编号为2,3,4,5。
经停的顺序可以在网络分析窗口[Network Analyst Window]中更改。
第一个停靠点被认定为出发点,最后一个停靠点被认定为是目的地。
如果一个停靠点无法定位于道路网络上,则会显示一个“未定位”的符号。
“未定位”的停靠点可以通过移动操作将其定位到道路网络上,在网络分析[Network Analyst]工具栏上点选[选择/移动网络位置][Select/Move Network Location]按钮,使用此工具将“未定位”的停靠点拖放到附近的道路网络上。
1.4 设置分析选项以下操作基于规则(单向行驶规划必须遵守,任意路口可以调头)计算最省时间的线路(1). 如图所示,在网络分析窗口[Network Analyst Window]中点击分析图层属性按钮[Analysis Layer Properties] 打开图层Route的属性设置对话框:(2) 在分析图层-Route属性对话框中,点击分析设置[Analysis Settings]选项页,并确认-阻抗[impedance]设置为分钟Minutes (Minutes).(3).不使用时间限制(保持Use Time Windows 前的检查框为非选中状态)。
当必须在规定时间在某个停靠点停留时才使用这个选项,选则这个选项后可以通过设置停靠点属性来设置某个停靠点到达的时间,离开的时间(在ArcMap联机帮助中查询关键词network analysis, routing with time windows 可以了解详细内容)(4).不使用“经停点重排序功能”(保持[Reorder stops to Find Optimal Route]检查框为未选中状态)。
这保证了经停顺序为你事先指定的顺序。
(5) 在“允许路口调头”[Allow U-turns]下拉列表中选择任何路口[EveryWhere](6).在“输出图形类型”[Output Shape Type]下拉列表中选择实际形状[True Shape](7).选中“忽略无效位置”[Ignore Invalid Locations]检查框。
这样分析时将会忽略那些不在道路网络上的停靠点。
(8).在“约束规划”[Restrictions]列表框中选择单行线[Oneway]。
(9) 点击方向[Directions]选项页,确定距离单位[Distance Units]设置为米[Meters], 显示时间[Display Time]检查框被选中,时间属性[Time Attribute]被设置为分钟[Minutes]。
点击[确定]按钮退出“图层属性”对话框。
1.5 运行最佳路径分析得到分析结果(1)在网络分析工具栏[Network Analyst]上点击“求解”[Solve]按钮。
分析结果-最佳路径线状要素图层将在地图中显示,在“网络分析窗口”[Network Analyst Window]中“路径”[Route]目录下也会同时显示:(2).在网络分析窗口[Network Analyst Window]中点击Route树状结点左边的加号(+)显示最佳路径(3).右键击最佳路径“Graphic Pick…”或在网络分析工具栏中点击方向[Direction]按钮打开“行驶方向”窗口。
(4).在行驶方向[Directions]窗口中点击“超链接”[Map]可以显示转向提示地图(5). 关闭“行驶方向”[Directions]窗口1.6 设置路障(barrier)通过在行驶路径步增加障碍,表示真实情况下,道路上无法通行的路障。
在进行最佳路径分析将会绕开这些路径查找替代路线(1).在ArcMap的中执行菜单命令[Window]>>[Magnifier]显示放大镜窗口[Magnifier](2).通过按住放大镜窗口[Magnifier]的标题栏在地图上移动,在地图中找到已经计算得到的最佳路径,松开鼠标。
这时最佳路径的一部分应该显示在放大镜窗口[Magnifier]的中心位置,我们将这这个区域的某个路段上放置一个路障。
.(3).在网络分析窗口[Network Analyst Window]中单击“路障”[Barrier (0)].(4).在网络分析工具栏[Network Analyst]上点击“新建网络位置”[Create Network Location]工具按钮。
(5).在放大镜窗口[Magnifier]中最佳路径上的某个位置放置一个路障。
(6).在网络分析工具栏[Network Analyst]上点击“求解”[Solve]按钮,得到新的最佳路径,从而避开路障(8).关闭“放大镜”[Magnifier] 窗口1.7 保存分析结果――最佳路径(1). 在网络分析窗口[Network Analyst Window]中右键点击“路径”[Routes (1) ],在出现的右键菜单中点击“导出数据”[Export Data]菜单命令。
(2).在“导出数据”[Export Data]对话框中指定导出的文件命,比如“D:\Ex10_1\Ex10_Route.shp”(3).点击[OK]按钮,最佳路径就会保存为指定的Shape文件。
.(4).当ArcMap询问“是否要将导出数据作为一个图层添加到地图中”时,点击否[NO](5) 关闭ArcMap(二) 最近服务设施分析(查找最近的消防队)在这个实验中,当某个位置发生火灾时将找到距事故最近的四个消防队,并且可以进一步找到能够最快到达事故地点的路线You will also generate the fastest route from each of these fire stations that will be provided to each driver of the fire engine.2.1 数据准备(1).双击ArcMap工程EX10_2.mxd,或从ArcMap中打开工程EX10_2.mxd.(2).如果网络分析扩展模块(Network Analyst Extension)已经启用(参考实验准备中的步骤)(3)如果网络分析工具栏没有出现,则在工具栏显区点右键打开或执行菜单命令[View-视图]>>[Toolbars-工具栏],并点击[Network Analyst]以显示网络分析工具栏。
(4)如果网络分析窗口没有推开,则在网络分析工具栏中点击网络分析窗口按钮(上图红色区域),以打开网络分析窗口。
2.2 创建“最近服务设施分析图层”在网络分析工具栏[ Network Analyst]上点击下拉菜单[Network Analyst],然后点击“新建最近服务设施”[New Closest Facility]菜单命令此时在网络分析窗口[ Network Analyst Window]中包含一个空的列表,显示“设施”[Facilities], 事故[Incidents], 路径[Routes], 路障[Barriers]树状目录。