ArcGIS中最短路径的实现

上传人:ali****an 文档编号:109969270 上传时间:2019-10-28 格式:DOCX 页数:20 大小:347.50KB
返回 下载 相关 举报
ArcGIS中最短路径的实现_第1页
第1页 / 共20页
ArcGIS中最短路径的实现_第2页
第2页 / 共20页
ArcGIS中最短路径的实现_第3页
第3页 / 共20页
ArcGIS中最短路径的实现_第4页
第4页 / 共20页
ArcGIS中最短路径的实现_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《ArcGIS中最短路径的实现》由会员分享,可在线阅读,更多相关《ArcGIS中最短路径的实现(20页珍藏版)》请在金锄头文库上搜索。

1、最短路径分析属于ArcGIS的网络分析范畴。而ArcGIS的网络分析分为两类,分别是基于几何网络和网络数据集的网络分析。它们都可以实现最短路径功能。下面先介绍基于几何网络的最短路径分析的实现。以后会陆续介绍基于网络数据集的最短路径分析以及这两种方法的区别。几何网络是一种特殊的特征要素类,由一系列不同类别的点要素和线要素(可以度量并能图形表达)组成的,可在FeatureDataset下面创建,可进行图形与属性的编辑。包括流向分析和追踪分析两大功能。主要接口是ITraceFlowSolver。我们先在一幅地图上做出一个几何网络才能进行最短路径分析。下面是主要的一些步骤(ArcMap帮助中琐碎的说明

2、有三四十项,被我省略很多):1、打开ArcCatalog,连接到包含地图的文件夹。2、在空白处,右键新建一个“Personal GeoDatabase”。3、在生成的Personal GeoDatabase上右键新建一个feature dataset。4、双击Personal GeoDatabase进去,找到刚才new出的feature dataset,右键Import导入Feature Class(Single),选择要建立几何网络的图层或者shape文件。5、然后再右键新建一个Geometric Network,选择从已存在的图元中建立几何网络。6、打开ArcMap,把刚才建立的“Pers

3、onal GeoDatabase Feature Class”添加到地图中,这样几何网络就建立好了。这样我们就建立好一个几何网络了。我们现在要通过编程来实现最短路径,用到的接口主要有INetworkCollection,IGeometricNetwork,IPointToEID,ITraceFlowSolverGEN(它实现了ITraceFlowSolver的接口),INetSchema,IEIDHelper等。主要步骤如下:1、获取几何网络工作空间 2、定义一个边线旗数组,把离点串最近的网络元素添加进数组 3、设置开始和结束边线的权重 4、进行路径分析 5、得到路径分析的结果上次介绍了用几何

4、网络实现的“最短路径”,这次用网络数据集实现真正的最短路径功能,跟上次一样,先处理下数据。1、先打开ArcCatalog,连接到目标文件夹,假定该文件下有一个名为road的道路图层。 2、在road图层上右键新建一个网络数据集,并按照其默认设置直至完成。 3、打开该地图的工作空间,把刚才新建的网络数据集添加工作空间中。 4、在网络分析菜单中选择新建最近设施点。这时在工作空间里,可以看到多了一个名为“Closest Facility”的图层。它下面还有4个子图层,名字分别为“Facilities”,“Incidents”,“Barriers”,“Routes”。“Facilities”就是设施点

5、图层,也就是目的点,“Incidents”的意思就是出发点,“Barriers”是障碍点,意思就是地图某条道路附近有一个障碍点,如果障碍点与道路距离在容限范围内,则表示此道路不通,“Routes”就是最终的结果。这样我们编程实现最短路径的思路就出现了:1、添加出发点。 2、添加目的点。 3、生成最优路径,获取结果。图片看不清楚?请点击这里查看原图(大图)。这里的添加出发点或者目的点,是往“Facilities”或“Incidents”图层上添加元素。获取结果也是从“Routes”中获取Polyline。往“Facilities”或“Incidents”图层上添加元素用到的主要方法是INALoc

6、ator的QueryLocationByPoint函数,生成路径主要接口是INASolver和它的Solve方法。获取结果是按属性查找,因为“Routes”类其实就是一个图层类,只不过只是存在于内存。 1 CMapControlDefault m_map; 2 IPointCollectionPtr m_ipPointCollection; 3 4 ILayerPtr ipLayer = m_map.GetLayer(0); / 网络数据集 5 INALayerPtr ipNaLayer = ipLayer; 6 if (NULL = ipNaLayer) 7 8 return; 9 10 1

7、1 INAContextPtr ipNaContext;12 HRESULT hr = ipNaLayer-get_Context(&ipNaContext);13 INAClassLoaderPtr ipNAClassLoader(CLSID_NAClassLoader);14 INALocatorPtr ipNALocator = NULL;15 hr = ipNaContext-get_Locator(&ipNALocator);16 ipNALocator-put_SnapToleranceUnits(esriMeters);17 ipNALocator-put_SnapToleran

8、ce(200);18 ipNaContext;19 hr = ipNAClassLoader-putref_Locator(ipNALocator);20 21 INamedSetPtr ipNamedSet = NULL;22 ipNaContext-get_NAClasses(&ipNamedSet);23 24 CString szName = Facilities;25 BSTR bstrName = szName.AllocSysString();26 INAClassPtr ipNAFacilitiesClass = NULL;27 hr = ipNamedSet-get_Item

9、ByName(bstrName, (IUnknown*)&ipNAFacilitiesClass);28 szName = Incidents;29 bstrName = szName.AllocSysString();30 INAClassPtr ipNAIncidentsClass = NULL;31 hr = ipNamedSet-get_ItemByName(bstrName, (IUnknown*)&ipNAIncidentsClass);32 szName = CFRoutes;33 bstrName = szName.AllocSysString();34 INAClassPtr

10、 ipNARoutesClass = NULL;35 hr = ipNamedSet-get_ItemByName(bstrName, (IUnknown*)&ipNARoutesClass);36 37 INALocationPtr ipNALocation1(CLSID_NALocation);38 INALocationPtr ipNALocation2(CLSID_NALocation);39 ipNAClassLoader-get_Locator(&ipNALocator);40 IPointPtr ipBeginPoint(CLSID_Point);41 m_ipPointColl

11、ection-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;47 ipNALocator-QueryLocationByPoint(ipBeginPoint, &ipNALocation1, &ipPoint1, &dbLVal);

12、48 ipNALocator-QueryLocationByPoint(ipEndPoint, &ipNALocation2, &ipPoint2, &dbLVal);49 50INALocationObjectPtr ipNALocationObject = NULL; 51IFeatureClassPtr ipFeatureClass = ipNAIncidentsClass;52 IFeaturePtr ipFeature = NULL;53 ipFeatureClass-CreateFeature(&ipFeature);54 IRowSubtypesPtr ipRowSubtypes

13、 = 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.i

14、ntVal = 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); 70 ipFeature-put_Value(nIndex, COleVariant(Start Point);71 ipNALocationObject = ipFeature;72ipNALocationObject-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);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 教育学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号