QGIS的地图交互工具


发布日期 : 2015-07-20 07:32:26 UTC

访问量: 169 次浏览

1.概述

地图交互工具作为GUI交互的主要手段,在GIS占用重要地位。

GIS交互工具主要是使用鼠标进行地图操作,维护不同的鼠标状态。

主要的地图工作有pan,zoomIn/zoomOut,identify等。

2.原理

交互工具要有明确的作用对象(主窗口),并且有一个action与之对应,用于切换状态。

主窗口设置当前工具时,可以激活当前的工具,进行操作。

3.使用方法

Qgs主要开发库中只包含pan,zoom,identify三个基本工具。其它工具在app库中。

对于Pan和Zoom工具的使用,可以直接使用canvas生成对象,设定为当前工具就可以使用了。

对于Identify等相对来说比较复杂的工具就需要进行一些定制开发了。 相对于Arcgis来说,开发量大了一点,但好处是QgisApp中具有完整的源码, 可以更好的理解其工作原理,而且在QgisApp中可以调试,难度较Arcgis应该不能算高。

(1)Pan和Zoom

    //addmaptool

    QgsMapTool*pPanTool=newQgsMapToolPan(pMapCanvas);//setconnectcanvas

    pPanTool->setAction(ui->actionPan);//adddisplayaction

    QgsMapToolZoom*pZoomOutTool=newQgsMapToolZoom(pMapCanvas,true);//setconnectcanvas

    pPanTool->setAction(ui->actionZoomOut);//adddisplayaction

    QgsMapToolZoom*pZoomInTool=newQgsMapToolZoom(pMapCanvas,false);//setconnectcanvas

    pPanTool->setAction(ui->actionZoomIn);//adddisplayaction

    m_pPanTool  =pPanTool;

    m_pZoomOutTool=pZoomOutTool;

m_pZoomInTool=pZoomInTool;



    createActions();



    m_pMapCanvas->setMapTool(m_pPanTool);//initializemapcanvastool

voidMainWindow::createActions(void)

{

    connect(ui->actionPan,SIGNAL(triggered()),this,SLOT(pan()));

    connect(ui->actionZoomOut,SIGNAL(triggered()),this,SLOT(zoomOut()));

    connect(ui->actionZoomIn,SIGNAL(triggered()),this,SLOT(zoomIn()));

    connect(ui->actionSelect,SIGNAL(triggered()),this,SLOT(select()));



}



voidMainWindow::pan()

{

    m_pMapCanvas->setMapTool(m_pPanTool);

}



voidMainWindow::zoomOut()

{

    m_pMapCanvas->setMapTool(m_pZoomOutTool);

}



voidMainWindow::zoomIn()

{

    m_pMapCanvas->setMapTool(m_pZoomInTool);

}

(2)Select

(3)Identify