ArcGIS中最短路径的实现Word文档下载推荐.docx
- 文档编号:13761246
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:9
- 大小:268.46KB
ArcGIS中最短路径的实现Word文档下载推荐.docx
《ArcGIS中最短路径的实现Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ArcGIS中最短路径的实现Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
6、打开ArcMap,把刚才建立的“PersonalGeoDatabaseFeatureClass”添加到地图中,这样几何网络就建立好了。
这样我们就建立好一个几何网络了。
我们现在要通过编程来实现最短路径,用到的接口主要有INetworkCollection,IGeometricNetwork,IPointToEID,ITraceFlowSolverGEN(它实现了ITraceFlowSolver的接口),INetSchema,IEIDHelper等。
主要步骤如下:
1、获取几何网络工作空间
2、定义一个边线旗数组,把离点串最近的网络元素添加进数组
3、设置开始和结束边线的权重
4、进行路径分析
5、得到路径分析的结果
上次介绍了用几何网络实现的“最短路径”,这次用网络数据集实现真正的最短路径功能,跟上次一样,先处理下数据。
1、先打开ArcCatalog,连接到目标文件夹,假定该文件下有一个名为road的道路图层。
2、在road图层上右键新建一个网络数据集,并按照其默认设置直至完成。
3、打开该地图的工作空间,把刚才新建的网络数据集添加工作空间中。
4、在网络分析菜单中选择新建最近设施点。
这时在工作空间里,可以看到多了一个名为“ClosestFacility”的图层。
它下面还有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 IPointCollectionPtrm_ipPointCollection;
3
4 ILayerPtripLayer=m_map.GetLayer(0);
//网络数据集
5 INALayerPtripNaLayer=ipLayer;
6 if(NULL==ipNaLayer)
7 {
8 return;
9 }
10
11 INAContextPtripNaContext;
12 HRESULThr=ipNaLayer->
get_Context(&
ipNaContext);
13 INAClassLoaderPtripNAClassLoader(CLSID_NAClassLoader);
14 INALocatorPtripNALocator=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);
20
21 INamedSetPtripNamedSet=NULL;
22 ipNaContext->
get_NAClasses(&
ipNamedSet);
23
24 CStringszName="
Facilities"
;
25 BSTRbstrName=szName.AllocSysString();
26 INAClassPtripNAFacilitiesClass=NULL;
27 hr=ipNamedSet->
get_ItemByName(bstrName,(IUnknown**)&
ipNAFacilitiesClass);
28 szName="
Incidents"
29 bstrName=szName.AllocSysString();
30 INAClassPtripNAIncidentsClass=NULL;
31 hr=ipNamedSet->
ipNAIncidentsClass);
32 szName="
CFRoutes"
33 bstrName=szName.AllocSysString();
34 INAClassPtripNARoutesClass=NULL;
35 hr=ipNamedSet->
ipNARoutesClass);
36
37 INALocationPtripNALocation1(CLSID_NALocation);
38 INALocationPtripNALocation2(CLSID_NALocation);
39 ipNAClassLoader->
40 IPointPtripBeginPoint(CLSID_Point);
41 m_ipPointCollection->
get_Point(0,&
ipBeginPoint);
42 IPointPtripEndPoint(CLSID_Point);
43 m_ipPointCollection->
get_Point(1,&
ipEndPoint);
44 IPointPtripPoint1(CLSID_Point);
45 IPointPtripPoint2(CLSID_Point);
46 doubledbLVal=0.0;
47 ipNALocator->
QueryLocationByPoint(ipBeginPoint,&
ipNALocation1,&
ipPoint1,&
dbLVal);
48 ipNALocator->
QueryLocationByPoint(ipEndPoint,&
ipNALocation2,&
ipPoint2,&
49
50 INALocationObjectPtripNALocationObject=NULL;
51 IFeatureClassPtripFeatureClass=ipNAIncidentsClass;
52 IFeaturePtripFeature=NULL;
53 ipFeatureClass->
CreateFeature(&
ipFeature);
54 IRowSubtypesPtripRowSubtypes=ipFeature;
55 ipRowSubtypes->
InitDefaultValues();
56 ipFeature->
putref_Shape(ipBeginPoint);
57 ITablePtripTable=NULL;
58 ipFeature->
get_Table(&
ipTable);
59 longnIndex=0;
60 szName="
Sequence"
61 bstrName=szName.AllocSysString();
62 ipTable->
FindField(bstrName,&
nIndex);
63 VARIANTvar_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->
70ipFeature->
put_Value(nIndex,COleVariant("
StartPoint"
));
71 ipNALocationObject=ipFeature;
72 ipNALocationObject->
put_NALocation(ipNALocation1);
73 ipFeature->
Store();
74 IFieldsPtripFields(CLSID_Fields);
75 hr=ipTable->
get_Fields(&
ipFields);
76 longnFieldCount=0;
77 hr=ipFields->
get_FieldCount(&
nFieldC
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ArcGIS 中最短 路径 实现