TransWikia.com

Modifying QGIS Project with C++

Geographic Information Systems Asked by Edip Ahmet on January 7, 2021

I have a QGIS project file, it has a point layer in GPKG format and online map layers. Coordinate System of online map layers is WGS 84 / Pseudo-Mercator. Point layer’s default coordinate system is WGS84 4326. I try to modify coordinate system of point layer using QGIS C++ API and QgsQuick based on user’s input with EPSG code. The code below creates new project. When I open the project and create new points on online map layer, it is OK. But when I open the project again, the points are at wrong place, like middle of Africa. I think there is a problem about on-the-fly projection about the project file. I wrote this C++ code from an answer about creating project with PyQGIS.

Is there a way to fix this problem? Should I set the extent, project coordinate system before saving the project?

You can see the project’s source code here.

QString ProjectModel::addNewProject(QString name, QString epsgcode )
{
    // create CRS with EPSG
    QgsCoordinateReferenceSystem my_crs = QgsCoordinateReferenceSystem( "EPSG:" + epsgcode );
    if ( !(my_crs.isValid()) ) {
        return "crs_not_found";
    }

    // new project folder path name
    QString new_path = dataDir() + "/" + name;

    // folder path name to directory
    QDir dir( new_path );

    if ( !(dir.exists()) ) {
        // Copy sample qgs project and point layer to destination path
        copy_survey_project( name );
        // New project path
        QString projectName = new_path + "/" + name + ".qgs";
        // initialize project and clear project
        mProject = QgsProject::instance();
        mProject->clear();
        // Read the copied qgs project
        mProject->read( projectName );
        // Point layer
        QgsMapLayer *myLayer = mProject->mapLayersByName("survey")[0];

        if( myLayer && myLayer->isValid() ){
            // Set new CRS to the layer
            myLayer->setCrs( my_crs );
            // Save the project
            mProject->write( projectName );
            mProject->clear();
        }
        return "ok";
    }
    else{
        return "fileExists";
    }
}

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP