版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ArcEngine中最短路径的实现最短路径分析属于ArcGIS的网络分析范畴。而ArcGIS的网络分析分为两 类,分别是基于几何网络和网络数据集的网络分析。它们都可以实现最短路径功能。 下面先介绍基于几何网络的最短路径分析的实现。以后会陆续介绍基于网络数据集的 最短路径分析以及这两种方法的区别。几何网络是一种特殊的特征要素类,由一系列不同类别的点要素和线要素(可以度 量并能图形表达)组成的,可在FeatureDataset下面创建,可进行图形与属 性的 编辑。包括流向分析和追踪分析两大功能。主要接口是ITraceFlowSolver。我们先 在一幅地图上做出一个几何网络才能进行最短路径分析。下
2、面是主要的一些步骤:1、打开ArcCatalog ,连接到包含地图的文件夹。2、在空白处,右键新建一个“ Personal GeoDatabase ”。3、在生成的 Personal GeoDatabase 上右键新建一个 feature dataset o4、双击 Personal GeoDatabase jfii,找到刚才 new 出的 feature dataset ,右键 Import导入Feature Class (Single),选择要建立几何网络的图层或者shape文 件。5、然后再右键新建一个Geometric Network ,选择从已存在的图元中建立几何 网 络。6 打开
3、ArcMap,把刚才建立的 “ Personal GeoDatabase Feature Class ” 添加 到地 图中,这样几何网络就建立好了。这样我们就建立好一个几何网络了。我们现在要通过编程来实现最短路径,用到 的接口主要有 INetworkCollection , IGeometricNetwork , IPointT。日D , ITraceFlowSolverGEN (它实现 了 ITraceFlowSolver 的接口),INetSchema, EIDHelpero主要步骤如下:1、获取几何网络工作空间2、定义一个边线旗数组,把离点串最近的网络元素添加进数组3、设置开始和结束边线
4、的权重4、进行路径分析5、得到路径分析的结果上次介绍了用几何网络实现的“最短路径”,这次用网络数据集实现真正的最短 路径功能,跟上次一样,先处理下数据。1、先打开ArcCatalog,连接到目标文件夹,假定该文件下有一个名为road的道路图层。Cgtents Previ ew Met ad ata INameml Adm_iAjrea_regi on shp "2"AdmALandm ark_p 01 nt r slip AAGreenBel t_regi oxi. shp.inAdLandm ark_point. shp Landus e j> olyl i na.
5、 shp Landnse_r egi on. Ahp o ad_p olyl i ne. whp Ar.lFOI point, shphl Rai 1W SUH 01yLi P-g-B hp绘数据集I Typg Shape file Shape: £il * Shapefile Map document Shapefile Shap&file!ShapefileShap&fileShapefile Sh 斗 p e: "总2、在road图层上右键新建一个网络数据集,并按照其默认设置直至完成庵 CopyX DelateCtrl+CRenameF2Create
6、La2er. .ExportNew Network Dataset.IdrContents Previ ew Metadata U4JH4lAl Adni_Are=a_regi on wh* 2LJ AdirALandm ark_p 0 i nt. shpGrt_regi©n. shp JlAhefei. mxdI Landm ark point, shp " Landus e_p olyl i ne a shp 03 Landus ®_r 皂 on. mhp adjpolyline, shp A*IFOI j>oint. shp ”八Tl Rai 1 Wa
7、y_polylin 电.shp 耳Jir og-uhpProperties.I Type ShapefileShapefileShape file Map DocumentShapefi 1 色Shapefile ShapefileShapefile ShapefileShape filer oad ND. MD网络数据集 Shap&file Network Dataset siiavfiid3、打开该地图的工作空间,把刚才新建的网络数据集添加工作空间中Add DataLook in:,最短路径网络数据集3但I葡I后蠢圈Iroad_ND NDAdni_Area_regi on. shp
8、Adm_Landmark_point. shpGreeriEelt_region. shpMroad. shp圆Iroad ND Junctions. shpLandmark point. shprHLandus«_polyline. shpLanduse_regi on. shp mainroad_polyline shp|P0I point. shpZJ"1 Railway polyline, shpName:|road_ND.NDShow M type: |Datasets and Layers4、在网络分析菜单中选择新建最近设施点Geastati stical Ar
9、ualystGr aphi cLabeling7 LayoutNAp CacheMyToolb&rPubliEh&rRaster PaintiiigR«preseikt&ti onRo-ute E di tingSmpl 电 Ex tens! on ToolbarS chemati cNew gouteNew Servi ce AreaNew Closest Facili tyMew OD Cost H&trixNew Conne 匚OptI OTLE.hefei.axd - Arclap - ArcinfoFile Edi t Vi ew Inser
10、t Selection Tools Window Help田国昌/鼬第x|也通eNetwork Analyst .1:3,411':Q :.sJ U44 H<4Network Dataset:X金五里墩邮江淮仪表厂Jj3 0c 回回眄因园E3团旧团|iow jJ I 0Closest Facility最短路径分析图层Facilities Error 。Located?O Unlocated 0 Incidents1 ErrorBB Located ?| |Unlocated 0 BarriersO ErrorLocated? Unlocated-0 Routes Routesro
11、ad_ND JunctionsP0I_pointAdm_L«indm w k_p 01ntLandm arkoint roadroad_NDEdgesRailWay-polyline lay>mainro ad_p olyl i neroad_polyline layerLanduse_polyli neGreenBelt_regi onLanduse_region layerAdm Ayaa r finNJ >Display I Source Selection |Drawing 五里量三I |10 二JB Z U 4 8这时在工作空间里,可以看到多了一个名为“ Clo
12、sest Facility "的图层。它下面还有4个子图层,名字分别为 “Facilities ","Incidents ",“ Barriers ",“ Routesv Facilities ”就是设施点图层,也就是目的点,uIncidents ”的意思就是出发点,“ Barriers n是障碍点,意思就是地图某条道 路附近有一个障碍点,如果障碍点与道路距离在容限范围内,则表示此道路不通,“Routes”就是最终的结果。这样我们编程实现最短路径的思路就出现了 :1、 添加出发点。2、 添加目的点。3、生成最优路径,获取结果百。3 ©
13、 :; : a Q射 卜0 添加 晦 刷新 平移M赊最短路及安徽省医药学校这里的添加出发点或者目的点,是往“ Facilities "或"Incidents ”图层上添 加元素。获取结果也是从“ Routes"中获取Polyline。往“ Facilities "或“In cide nts ”图层上添加元素用到的主要方法是INALocator的QueryLocationByPoint函数,生成路径主要接口是INASolver和它的Solve方 法。获取结果是按属性查找,因为“ Routes ”类其实就是一个图层类,只不过只是存在于内存。1 CMapCon
14、trolDefaultm_map;2 IPointCollectionPtr mJpPointCollection;33 ILayerPtr ipLayer = m_map.GetLayer(O);/ 网络数据集4 INALayerPtr ipNaLayer = ipLayer;5 if (NULL = ipNaLayer)6 7 return;8 )1011 INAContextPtr ipNaContext;12 HRESULT hr = ipNaLayer->get_Context(&ipNaContext);13 INACIassLoaderPtr ipNACIassLo
15、ader(CLSID_NACIassLoader);14 INALocatorPtr ipNALocator = NULL;15 hr = ipNaContext->get_Locator(&ipNALocator);16 ipNALocator->put_SnapToleranceUnits(esriMeters);17 ipNALocator->put_SnapT olerance(200);18 ipNaContext;19 hr = ipNACIassLoader->putref_Locator(ipNALocator);2020 INamedSetPt
16、r ipNamedSet = NULL;21 ipNaContext->get_NACIasses(&ipNamedSet);2322 CString szName = "Facilities"23 BSTR bstrName = szName.AllocSysString();24 INACIassPtr ipNAFacilitiesClass = NULL;25 hr = ipNamedSet->get_ltemByName(bstrName,(IUnknown*)&ipNAFacilitiesClass);26 szName = "
17、;Incidents”;27 bstrName = szName. AllocSysString();28 INACIassPtr ipNAIncidentsClass = NULL;29 hr = ipNamedSet->get_ltemByName(bstrName,(IUnknown*)&ipNAIncidentsClass);30 szName = nCFRoutesH;31 bstrName = szName. AllocSysString();32 INACIassPtr ipNARoutesClass = NULL;33 hr = ipNamedSet->ge
18、t_ltemByName(bstrName,(IUnknown*)&ipNARoutesClass);3634 INALocationPtr ipNALocationl (CLSID_NALocation);35 INALocationPtr ipNALocation2(CLSID_NALocation);36 ipNACIassLoader->get_Locator(&ipNALocator);37 IPointPtr ipBeginPoint(CLSID_Point);38 m_ipPointCollection->get_Point(0, &ipBeg
19、inPoint);39 IPointPtr ipEndPoint(CLSID_Point);40 mJpPointCollection->get_Point(1, &ipEndPoint);41 IPointPtr ipPointl (CLSID_Point);42 IPointPtr ipPoint2(CLSID二Point);&ipNALocation1,&ipNALocation2,43 double dbLVal = 0.0;44ipNALocator->QueryLocationByPoint(ipBeginPoint,&ipPoint1,
20、 &dbLVal);45ipNALocator->QueryLocationByPoint(ipEndPoint,&ipPoint2, &dbLVal);4950 INALocationObjectPtr ipNALocationObject = NULL;51 IFeatureClassPtr ipFeatureClass = ipNAIncidentsClass;52 IFeaturePtr ipFeature = NULL;53 ipFeatureClass->CreateFeature(&ipFeature);54 IRowSubtypesP
21、tr ipRowSubtypes = ipFeature;55 ipRowSubtypes->lnitDefaultValues();56 ipFeature->putref_Shape(ipBeginPoint);57 ITablePtr ipTable = NULL;58 ipFeature->get_T able(&ipT able);59 long nlndex = 0;60 szName = "Sequence"61 bstrName = szName.AllocSysString();62 ipTable->FindField(b
22、strName, &nlndex);63 VARIANT varjnt;64 varJVal = 1;65 varjnt.vt = VTJNT;66 ipFeature->put_Value(nlndex, varjnt);67 szName = "Name"68 bstrName = szName. AllocSysString();69 ipTable->FindField(bstrName, &nlndex);70 ipFeature->put_Value(nlndex, COIeVariant(nStart Point&
23、quot;);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
24、; 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(&ipFe
25、ature);89 ipRowSubtypes = ipFeature;90 ipRowSubtypes->lnitDefaultValues();91 ipFeature->putref_Shape(ipEndPoint);92 ipTable = NULL;93 ipFeature->get_T able(&ipT able);94 nlndex = 0;95 szName = "Sequence”;96 bstrName = szName. AllocSysString();97 ipTable->FindField(bstrName, &
26、;nlndex);98 varJVal = 2;99 ipFeature->put_Value(nlndex, varjnt);100 szName = "Name"101 bstrName = szName. AllocSysString();102 ipTable->FindField(bstrName, &nlndex);103 ipFeature->put_Value(nlndex, COIeVariant("End Point1');104 ipNALocationObject = ipFeature;105
27、 ipNALocationObject->put_NALocation(ipNALocation2);106 ipFeature->Store();107108 INACIosestFacilitySolverPtr ipNACFSolver = NULL;109 INASolverPtr ipNASolver = NULL;110 ipNaContext->get_Solver(&ipNASolver);111112 IGPMessagesPtr ipGPM(CLSID_GPMessages);113 ITrackCancelPtr ipTrackCancel(CL
28、SID TrackCancel);114 VARIANT_BOOL blsPartialSolution;115 ipNASolver->Solve(ipNaContext, ipGPM, ipTrackCancel,&blsPartialSolution);116117 szName = nCFRoutes"118 bstrName = szName.AllocSysString();119 ipNARoutesClass = NULL;120 hr = ipNamedSet->getJtemByName(bstrName,(IUnknown*)&ipN
29、ARoutesClass);121122 IFeatureClassPtr ipFeatureClassRoutes = ipNARoutesClass;IFeatureCursorPtr ipFCursor = NULL;IQueryFilterPtr ipQueryFilter(CLSID_QueryFilter);CString szQueryFilter("ObjectlD > 0n);BSTR bstr_QueryFilter = szQueryFilter.AllocSysString();ipQueryFilter->put_WhereClause(bstr_QueryFilter); VARIANT_BOOL bCycle =VARIANT_FALSE;try ipFeatureClassRoutes
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 贵州财经职业学院《教师职业道德规范和政策法规》2023-2024学年第一学期期末试卷
- 2025陕西省建筑安全员C证考试题库
- 贵阳学院《数据库课程设计》2023-2024学年第一学期期末试卷
- 2025年河北省建筑安全员B证(项目经理)考试题库
- 广州幼儿师范高等专科学校《政府与非营利组织会计》2023-2024学年第一学期期末试卷
- 2025年-山西省安全员《C证》考试题库
- 广州医科大学《大学生职业生涯规划与就业指导(二)》2023-2024学年第一学期期末试卷
- 2025年福建省安全员B证考试题库附答案
- 2025陕西建筑安全员A证考试题库附答案
- 2025年上海市安全员-C证考试(专职安全员)题库及答案
- 新入职员工年终工作总结课件
- 中华传统文化之文学瑰宝学习通超星期末考试答案章节答案2024年
- 静脉导管维护
- 教代会会场背景(红旗)图片课件
- 2023年外交学院招聘笔试备考试题及答案解析
- 年度先进员工选票标准格式
- 螺杆式风冷冷水(热泵)机组电路图
- CFG桩施工记录表范本
- 《录音技术与艺术》课程教学大纲(新版)(共11页)
- 二、菲涅耳公式表示反射波、折射波与入射波的振幅和位相关
- OBC测试报告模板
评论
0/150
提交评论