二.分析提取OGRLayer

一.分析提取OGRLayer

主要是先把数据结构弄好,paintgl好用。

 

void AkGisWidget::initializeGL(){

    this->initializeOpenGLFunctions();

 

    createShader();    //创建shader,后面说

 

    for(int i=0;i<layers.count();i++)   //循环所有层

    {

        OGRLayer *pLayer= layers[i];

 

        OGRFeature* pFeature = pLayer->GetNextFeature();

 

        pLayer->ResetReading();

        int featureCount = pLayer->GetFeatureCount();

        if (featureCount == 0) {

            qDebug()<<("No features in the layer");

            return ;

        }

//循环图元

        while (pFeature = pLayer->GetNextFeature()) {

 

            int fieldCount = pFeature->GetFieldCount();

 

            OGRFeatureDefn* poFDefn = pFeature->GetDefnRef();

            OGRFieldDefn* poFieldDefn = nullptr;

            //qDebug()<<"convertOGRLayer fieldCount="<<fieldCount;

//循环域,暂时没啥用

            for (int i = 0, j = 0; i < fieldCount; ++i) {

                poFieldDefn = poFDefn->GetFieldDefn(i);

 

                switch (poFieldDefn->GetType()) {

                default:

                    break;

                case OFTInteger:

                    //qDebug()<<poFeature->GetFieldAsInteger(i);

                    break;

                case OFTReal:

                    //qDebug()<<poFeature->GetFieldAsDouble(i);

                    break;

                case OFTString:

                    //qDebug()<<poFeature->GetFieldAsString(i);

                    break;

                }

            }

 

            /* 得到几何特征 */

            OGRGeometry* pGeometry = pFeature->GetGeometryRef();

            if (!pGeometry)

                continue ;

//得到图元类型,这里处理多边形

            OGRwkbGeometryType pGeoType = pGeometry->getGeometryType();

 

            switch (pGeoType)

            {

            default:

                break;

            case wkbPoint:

            case wkbPoint25D:

            {

                break;

            }

            case wkbPolygon:   //多边形,将数据发送到gpu后面说

            {

                if (SendGpuOGRPolygon(pGeometry->toPolygon())) {

                    qDebug()<<"polygon ok";

                    //return;

                }

                else {

                    //return ;

                }

                break;

            }

 

            case wkbLineString:

            {

                break;

            }

            case wkbMultiPoint:

            {

                break;

            }

            case wkbMultiPolygon:    //多多边形,后面说

            {

                if (SendGpuMultiPolygon(pGeometry->toMultiPolygon())) {

                    //geoFeatureOut->setGeometry(geoMultiPolygon);

                }

                else {

                    return ;

                }

                break;

            }

            case wkbMultiLineString:

            {

                break;

            }

 

            }

            // end swicth

            OGRFeature::DestroyFeature(pFeature);

        }

    }

    //glEnable(GL_DEPTH_TEST);

}

posted @ 2020-03-16 20:28  fkess  阅读(788)  评论(0)    收藏  举报