1.概述
地图交互工具作为GUI交互的主要手段,在GIS占用重要地位。
GIS交互工具主要是使用鼠标进行地图操作,维护不同的鼠标状态。

主要的地图工作有pan,zoomIn/zoomOut,identify等。
2.原理
交互工具要有明确的作用对象(主窗口),并且有一个action与之对应,用于切换状态。

微信号:MeetyXiao
添加微信好友, 获取更多信息
复制微信号
添加微信好友, 获取更多信息
复制微信号
主窗口设置当前工具时,可以激活当前的工具,进行操作。
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
来源:开源地理空间基金会中文分会
来源链接:https://www.osgeo.cn/post/3816g
本站声明:网站内容来源于 *** ,如有侵权,请联系我们,我们将及时处理。








