QGIS 加载数据库图层
POSTGIS 数据库插件安装
可参考 PostGIS 快速入门
现在本地搭个数据库。
代码
/*virtual*/ void HelloWorldPlugin::initGui() { std::cout << "HelloWorldPlugin::initGui" << std::endl; // add an action to the menu m_action = new QAction(QIcon("" ), tr("Hello World121212"), this); m_action->setText(QString::fromLocal8Bit("选择 QGIS 工程")); m_action->setWhatsThis(tr("Draw on the map canvas.")); connect(m_action, SIGNAL(triggered(bool)), this, SLOT(run(bool))); m_qgis_if->addRasterToolBarIcon(m_action); m_qgis_if->addPluginToMenu(tr("&Hello World"), m_action); project = QgsProject::instance(); }
void HelloWorldPlugin::run(bool checked) { QString INIT_QGSPROJECT_PATH = QFileDialog::getOpenFileName(NULL, QString::fromLocal8Bit("选择 QGIS 工程"), "", "*.qgs"); bool status = project->read(INIT_QGSPROJECT_PATH); if (false == status) { QMessageBox::information(NULL, QString::fromLocal8Bit("找不到文件"), INIT_QGSPROJECT_PATH + QString::fromLocal8Bit("无法打开")); } /*QString filename = QFileDialog::getOpenFileName(NULL, QString::fromLocal8Bit("选择矢量图层"), "", "*.shp"); QStringList temp = filename.split(QDir::separator()); QString basename = temp.at(temp.size() - 1);*/ //QgsVectorLayer* vectorLayer = new QgsVectorLayer(filename, basename, "ogr"); //QgsEditFormConfig formConfig = vectorLayer->editFormConfig(); QgsDataSourceUri uri = QgsDataSourceUri::QgsDataSourceUri(); uri.setConnection("localhost", "5432", "demo", "postgres", "postgres"); /*std::map<qint32, QString> objlMap; objlMap.insert(std::pair<qint32, QString>(1, "Administrator area(Named)")); objlMap.insert(std::pair<qint32, QString>(2, "Airport/airfield")); std::map<qint32, QString>::iterator iter; for (iter = objlMap.begin(); iter != objlMap.end(); iter++) { uri.setDataSource("public", "objnam", "the_geom", QString("id = %1").arg(iter->first)); QgsVectorLayer* vectorLayer = new QgsVectorLayer(uri.uri(false), iter->second, "postgres"); if (!vectorLayer->isValid()) { QMessageBox::information(NULL, QString::fromLocal8Bit("无法打开图层"), QString::fromLocal8Bit("您所选的不是矢量图层")); } project->addMapLayer(vectorLayer); }*/ uri.setDataSource("public", "objnam", "the_geom"); QgsVectorLayer* vectorLayer = new QgsVectorLayer(uri.uri(false), QString::fromLocal8Bit("多点"), "postgres"); if (!vectorLayer->isValid()) { QMessageBox::information(NULL, QString::fromLocal8Bit("无法打开图层"), QString::fromLocal8Bit("您所选的不是矢量图层")); } QgsAttributeList l = vectorLayer->attributeList(); for (int i: l) { qDebug() << i << endl; qDebug() << vectorLayer->attributeDisplayName(i) << endl; } QgsEditFormConfig formConfig = vectorLayer->editFormConfig(); formConfig.setReadOnly(0, true); //formConfig.setLabelOnTop(0, true); //formConfig.clearTabs(); //formConfig.setLayout(QgsEditFormConfig::EditorLayout::TabLayout); vectorLayer->setEditFormConfig(formConfig); vectorLayer->setFieldAlias(1, "Object label code"); vectorLayer->setFieldAlias(2, "Scale maximum"); vectorLayer->setFieldAlias(3, "Scale minimum"); vectorLayer->setFieldAlias(4, "Zoom level"); vectorLayer->setEditorWidgetSetup(1, QgsEditorWidgetSetup("Enumeration", QVariantMap())); //vectorLayer->setDefaultValueDefinition(1, QgsDefaultValue("1", false)); project->addMapLayer(vectorLayer); }
发表评论
评论列表, 共 0 条评论