最佳路径分析总结

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一步:在View类里声明一个路径分析类的对象:

public: CSePathAnalyst m_PathAnalyst;//定义一个路径分析类对象

第二步:调用SetDatasetNetwork方法,具体方法如下:

⑴得到网络分析数据集

CSeDatasetVector* pDatasetNetwork = NULL;

CSeDataSource* pDataSource = theApp.m_WorkSpace.GetDataSourceByAlias(_T("新世界阳光花园"));

if( pDataSource != NULL )

{

CSeDatasetVector* pDataset = (CSeDatasetVector

*)pDataSource->GetDataset(_T("道路网络"));

pDatasetNetwork= pDataset;

}

⑵设置网络分析数据集

bool m_setNetWork= m_PathAnalyst.SetDatasetNetwork( pDatasetNetwork );

⑶设置分析模型

m_bRuleParamSetted = true;//判断是否设置分析模型成功,成功的话在LbuttunDown里

m_nAction=10;//值为时表明为路径分析模式,在在LbuttunDown里用到

m_MapWnd.SetAction( CSeDrawParameters::uaNull);//此时将地图上的操作设为空操作

⑷在C路径分析View::OnLButtonDown(UINT nFlags, CPoint point)里进行路径分析 if(m_nAction==10)//如果操作为路径分析模式的话

{//路径搜索

if(m_bRuleParamSetted)//已经设置了路径分析参数

{ //设置路径分析模式和模型后

CSeDatasetVector *pSeDatasetNetwork = m_PathAnalyst.GetDatasetNetwork();

if( pSeDatasetNetwork )//如果网络数据集存在的话

{

//获取网络数据集的节点子数据集

CSeDatasetVector *pSeDatasetNode = pSeDatasetNetwork->GetChildDataset(); if( pSeDatasetNode )//如果网络数据集的节点子数据集存在的话

{

CPoint pntNode; //得到的一个最近的点

CPoint pntMouse = CPoint(point);//获取鼠标点对象

//将像素坐标转换为地图坐标

m_MapWnd.GetDrawParam()->ClientToMap(&pntMouse);

//获取鼠标点击点最近的节点

long nNodeID = pSeDatasetNetwork->FindNearestNode( pntMouse, pntNode );//pntMouse点击点,pntNode得到的最近的点

if( nNodeID >= 0 )//如果找到相应节点

{

if (m_nFromNodeID == -1)//路径分析的起始点

{

m_nFromNodeID = nNodeID; //将得到的最近节点ID赋值给起始点ID

m_pntToNode = m_pntFromNode = pntNode;//起始点坐标

m_pntFromNode = pntNode;

//刷新跟踪层,等待将分析的路径放入

if( m_MapWnd.m_TrackingLayer.GetCount() > 0 )

{

m_MapWnd.m_TrackingLayer.ReleaseAll();

m_MapWnd.RefreshTrackingLayer(false);

}

//显示起始点(为实现)

//显示起始点(为实现)

}

else//在执行完上面的If语句后,开始设置路径分析的终止点

{

m_pntToNode = pntNode;//将得到的最近点的点的坐标给终止点坐标

//DisplayNodePoint(m_pntToNode);//显示终止点未实现

CDWordArray arrIDs;//路径的各个弧段ID【输出】

CDWordArray pntIDs;//路径的各个节点ID【输出】

double dPathLength = 0.0;//路径的长度

//开始分析

m_PathAnalyst.Analyse( m_nFromNodeID, nNodeID,

arrIDs,dPathLength,pntIDs );

CSeGeometry *pSeGeometry = NULL;

CSeDatasetVector *pSeDtV = NULL;

long nCount = arrIDs.GetSize();//获取分析后路径弧段的个数

if( nCount == 0 )

{//如果没有弧度,即没有找到路径

//AfxMessageBox(_T("Hello World"),MB_OK,NULL);

}

else

{

//AfxMessageBox(_T("Hello World"),MB_OK,NULL);

//如果找到路径

//获取弧度的记录集

CSeRecordset* pSeRecordset = pSeDatasetNetwork->QueryByIDs( (long *)arrIDs.GetData(), nCount );

//设置跟踪图层的风格

CSeStyleLine *pStyle = new CSeStyleLine;

pStyle->m_dwPenStyle = 0;

相关文档
最新文档