首页 / 浏览问题 / 组件GIS / 问题详情
数据集如何显示
35EXP 2019年08月27日

iobjects c++            win10

文件型

在创建了一个工作空间,打开了一个数据源的前提下,如何让数据源中的数据显示在窗口上;

新建数据源总是不能成功

    QString path = QFileDialog::getSaveFileName(this, QStringLiteral("新建数据源"), "C:/", tr("udb(*.udb)"));
	UGDsConnection *dc = new UGDsConnection();
	dc->m_nType = UGC::UDB;
	dc->m_bReadOnly = false;
	dc->m_bAutoConnect = true;
	dc->m_strServer = Translator::QStr2UGStr(path);
	dc->m_strAlias = Translator::QStr2UGStr("one");
	UGDataSource *ds = new UGDataSource();   //如何与连接信息关联????
	if(ds->Create())
	{
		QMessageBox::critical(this, "error", QStringLiteral("数据源创建"));
		workspace->SetSaveResources(true);
	}
	else
	{
		QMessageBox::critical(this, "error", QStringLiteral("数据源创建失败"));
	}

1个回答

您好,数据源中是数据集,数据集需添加到地图上,地图在窗口上显示。

创建数据源需要设置链接信息,您的ds与dc毫无关联,通UGDataSource:::Create()的说明就可以知道,需通过UGDataSource::GetConnectionInfo()获得链接信息引用来设置。
幸俊
1
694EXP 2019年08月27日

我试过这样,但是Creat()不成功,返回false

数据集添加到地图之前需要做什么工作吗(例如刷新工作空间?)??还是直接就可以与UGMap对象关联就好了??

您好,抱歉,前面少说了一点,UGDataSource需要用UGDataSourceManager来创建。如下:

UGDataSource* datasource = UGDataSourceManager::CreateDataSource(UGEngineType::UDB);;
    UGDsConnection& cn = datasource->GetConnectionInfo();
    cn.m_strServer = _U("E:\\T.udb");
    cn.m_nType = UGEngineType::UDB;
    cn.m_strAlias = _U("T");
    cn.m_bReadOnly = false;
    cn.m_bExclusive = true;
    
    bool isCreated = datasource->Create();

数据集添加到地图,UGMap::m_Layers->AddDataset()然后刷新地图即可。

您可以参考,我提交到GitHub上的代码https://github.com/Jun0x01/JunSuCpp,Workspace和MapControl两个类。

借楼问一下,关闭工作空间出现问题,在打开一个工作空间前提下,可以直接打开另一个,但是如果关闭workspa->close(),再次打开就会出错

并非工作空间关闭有问题,应该是你其他代码的影响。如是否打开地图,关闭工作空间前是否关闭地图,再次打开,你的代码是否可以复用。请查看调用堆栈判断哪儿出了错。

前面提到的Github上的代码也有关闭打开工作空间,没有问题,可参照检查。
好的。谢谢,我没有找到关闭地图的方法
请使用UGMap::Reset()关闭地图
嗯,谢谢
...