二.分析提取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);
}
浙公网安备 33010602011771号