Hi All I try to create some multipolygons with OGR. After creating them, but when I want view them in arcscene, it just make arcscene crash! Then I tried osgviewer with ESRI Shapefile, I was warned: ESRIShape loader: .dbf file containe different record number that .shp file.
.dbf record skipped. Actually, only one feature in the dataset had been readed out. Then, I tried osgviewer with ogr, got warnings like this: Warning something wrong with a polygon in a multi polygon. And, the result is not quite as expected! Here is my code: const char* pszDriverName = "ESRI Shapefile"; OGRSFDriver *poDriver; OGRRegisterAll(); poDriver = OGRSFDriverRegistrar::GetRegistrar()->GetDriverByName( pszDriverName ); if( poDriver == NULL ) { printf( "%s driver not available.\n", pszDriverName ); return false; } OGRDataSource *poDS; poDS = poDriver->Open(shpfile,TRUE); if(poDS == NULL) poDS = poDriver->CreateDataSource(shpfile,NULL); if(poDS == NULL) { printf("Creation of output file failed.\n"); return false; } OGRLayer* poLayer = poDS->GetLayerByName (layername); if(poLayer == NULL) { if( !poDS->TestCapability( ODsCCreateLayer ) ) { fprintf( stderr, "Layer Roadway not found, and CreateLayer not supported by driver." ); return FALSE; } CPLErrorReset(); poLayer = poDS->CreateLayer(layername,NULL,wkbMultiPolygon25D,NULL); if(poLayer == NULL) { printf( "Layer creation failed.\n" ); return false; } } for(Roadway::RoadWayArray::iterator itrw = _roadwayArr.begin(); itrw != _roadwayArr.end();itrw++) { OGRFeature *poFeature; OGRMultiPolygon multiPoly; poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn()); Roadway::Triangle_list tris = (*itrw)->getTrianglelist(); for(Triangle_list::const_iterator ittri = tris.begin();ittri != tris.end();ittri++) { OGRPolygon polygon; OGRLinearRing poRing; poRing.addPoint((*ittri).a().x(),(*ittri).a().y(),(*ittri).a().z()); poRing.addPoint((*ittri).b().x(),(*ittri).b().y(),(*ittri).b().z()); poRing.addPoint((*ittri).c().x(),(*ittri).c().y(),(*ittri).c().z()); poRing.addPoint((*ittri).a().x(),(*ittri).a().y(),(*ittri).a().z()); polygon.addRing(&poRing); multiPoly.addGeometry(&polygon); } poFeature->SetGeometry(&multiPoly); if( poLayer->CreateFeature( poFeature ) != OGRERR_NONE ) { printf( "Failed to create feature in shapefile.\n" ); return false; } OGRFeature::DestroyFeature( poFeature ); } OGRDataSource::DestroyDataSource( poDS ); Any help is appreciated!!
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev