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 条评论