首页 / 浏览问题 / 组件GIS / 问题详情
地图显示设置
35EXP 2019年12月10日

iobjectscpp 9.1.0

win10 x64

1.地图初始显示全幅过小(再次点击全幅会放大)

        qMapControl1 = new QMapControl;
		qMapControl1->resize(1600,900);
		qMapControl1->setParent(widget_1_1);
		qMapControl1->setFocus();
		map1 = qMapControl1->GetMap();  //获取地图对象
		map1->SetLineSmoothingMode(false);
		map1->SetWorkspace(workspace);
			
		UGString mapName1 = workspace->m_MapStorages.GetNameAt(0);  //获取第一幅地图名称
		
		if(!map1->Open(mapName1))
		{
			QMessageBox::critical(this, errortip, QStringLiteral("地图打开失败"));
			return;
		}
		qMapControl1->Refresh(); 

2.希望地图显示到具体范围,但无效。

map1->SetViewBounds(bounds, true);

3.在叠加或缓冲分析时候光标改变(qMapControl中的设置等待光标为不可访问)

1个回答

您好,

  1. 地图打开显示的是上次保存的时的大小范围,不一定是全幅,要全幅显示,需调用UGMap::ViewEntire(); 然后刷新地图

  2. UGMap::SetViewBounds()后刷新地图即可,如使用地图范围bounds = map1.GetBounds(),设置次此bounds相当于全幅。

  3.  修改光标是修改Qt中的QCursor, 你用的是sample下Extension4qt中的QMapControl,有需要自己修改QMapControl源码即可
694EXP 2019年12月11日

1.是否是因为重新设置了qMapControl的大小,导致打开时不是上次打开的大小。

		qMapControl1 = new QMapControl;
		qMapControl1->resize(1600,900);
		qMapControl1->setParent(widget_1_1);
		qMapControl1->setFocus();
		map1 = qMapControl1->GetMap();  //获取地图对象
		map1->SetLineSmoothingMode(false);
		map1->SetWorkspace(workspace);
			
		UGString mapName1 = workspace->m_MapStorages.GetNameAt(0);  //获取第一幅地图名称
		
		if(!map1->Open(mapName1))
		{
			QMessageBox::critical(this, errortip, QStringLiteral("地图打开失败"));
			return;
		}
		
		map1->SetViewBounds(workspace->GetDataSource(0)->GetDataset(_U("Design_L"))->GetBounds(), true);
		qMapControl1->Refresh();  //刷新

进去地图显示为下图:

点击全幅后

上次打开的需要保存地图,保存工作空间才起作用,至于resize(),只是影响窗口大小,而不是地图大小。如果是QMapControl中封装的地图窗口没有适应resize()修改后的大小,就需要修改QMapControl相关实现了。但从能够设置全幅显示正常,说明地图窗口大小是适应大小修改的。
用的桌面版保存,无论保存时候显示位置是什么地方,打开后依然是上面第一个图
有一个问题,当我更改地图后,map->save()返回真,但是workspace->save()返回假,导致虽然原先存在图层的操作(设置可视,进行移动等)下次打开有保存,但是如果是新加的图层下次打开就会没有;但使用另存可以保存新的图层。
若不是地图范围问题,就是Widget窗口大小发生了改变,没有触发地图刷新,还是默认大小。你需要修正这个问题。

文件型工作空间保存,需要设置m_pUGWorkspace->m_WorkspaceConnection.m_bFailIfExists = false; save()才能返回ture,你的修改研究保存到工作空间了。

已设置

	workspace->m_WorkspaceConnection.m_bFailIfExists = false;
	if(workspace->Save())
	{
		QMessageBox::about(this, nullptr, QStringLiteral("yes"));
		return;
	}
	else
	{
		QMessageBox::critical(this, QStringLiteral("错误"), QStringLiteral("no"));
		return;
	}

方法没有问题的,可能是你打开的工作空间的问题了,检查一下C++组件产品包bin/bind_x64/log目录中的日志看看有什么提示了。
打开时候使用的是全路径,未使用连接信息,是因为这个吗?

workspace->Open(Translator::QStr2UGStr(path))
是的,这个函数调用后,内部连接信息不全,建议用连接信息来打开
好的,谢谢
...