一.Qt环境下用GDAL读Shapefile


主要参考了大神之作 https://github.com/Leopard-C/iCGIS

 结果看图

 

 

 

因为工作上会用到GIS显示地图,用的功能简单,而用QGIS会显得非常庞大,故考虑自己写一个简单的GIS,但能力素质实在偏低,终于看到了大神之作 https://github.com/Leopard-C/iCGIS。于是自个根据需求瞎改了一起,用GDAL读地图文件Shapefile,进而用opengl渲染。

 

这里需要一个gdal库的支持,因为我安装了qgis,所以已经配好了,可以利用osgeo4w-setup-x86_64.exe直接配置。

 

建了个类FileReader,写个静态函数readShapefile将图层保存到layers。

 

调用方法:FileReader::readShapefile("D:/work/shp/asia1.shp",layers);

 

 

void FileReader::readShapefile(QString filepath, QVector<OGRLayer*> &layers)

{

    QByteArray bytes = filepath.toLocal8Bit();

    const char* path = bytes.data();

    GDALAllRegister();

    GDALDataset* pDS = nullptr;

    CPLSetConfigOption("GDAL_FILENAME_IS_UTF8", "NO");

    CPLSetConfigOption("SHAPE_ENCODING", "");

    pDS = (GDALDataset*)GDALOpenEx(path, GDAL_OF_VECTOR, NULL, NULL, NULL);

    if (!pDS) {

        qDebug()<<"Open {0} error"<<path;

        return ;

    }

 

    int layerCount = pDS->GetLayerCount();

    if (layerCount == 0) {

        qDebug()<<("poDsIn dosen't have any layer");

        return ;

    }

 

    qDebug()<<"convertGDALDataset layerCount="<<layerCount;

    for (int i = 0; i < layerCount; ++i) {

        OGRLayer* pLayer = pDS->GetLayer(i);

        layers.append(pLayer);

    }

    //GDALClose(poDS);//先不关

}

下一步就开始分析图层里的图元等。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM