GIS软件工程实习报告(最短路径分析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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
②添加代码
privateIActiveViewm_ipActiveView;
private IMapm_ipMap;//地图控件中地图
private IGraphicsContainerpGC;//图形对象
privatebool clicked = false;
intclickedcount = 0;
private double m_dblPathCost = 0;
private IGeometricNetworkm_ipGeometricNetwork;
private IPointCollectionm_ipPoints;//输入点集合
privateIPointToEIDm_ipPointToEID;
private IEnumNetEIDm_ipEnumNetEID_Junctions;
private IEnumNetEIDm_ipEnumNetEID_Edges;
private IPolylinem_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;
ILayeripLayer = m_ipMap.get_Layer(0);
IFeatureLayeripFeatureLayer = ipLayer as IFeatureLayer;
IFeatureDatasetipFDS = 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"))//先解析路径
{
IPolylineipPolyResult = PathPolyLine();//最后返回最短路径
clicked = false;
if (ipPolyResult.IsEmpty)
{