OGR cannot create the PCIDSK polygon vector data, Found in the GDAL library
code is not achieved, I realize part of the code, surface vector data can
create PCIDSK type.
The modified code is as follows[ogrpcidsklayer.cpp file OGRErr
OGRPCIDSKLayer::SetFeature( OGRFeature *poFeature )]:

                else if( wkbFlatten(poGeometry->getGeometryType()) == 
wkbPolygon )
                {
                        OGRPolygon *poPoly = (OGRPolygon *) poGeometry;
                        int nRingSize = poPoly->getNumInteriorRings();
                        
                        std::vector<PCIDSK::int32> anRingStart;
                        anRingStart.resize(nRingSize+1);
                        
                        OGRLinearRing *poRing = NULL;
                        poRing = poPoly->getExteriorRing();
                        anRingStart[0] = poRing->getNumPoints();
                        
                        aoVertices.resize(poRing->getNumPoints());
                        for(int i = 0; i < aoVertices.size(); i++ )
                        {
                                aoVertices[i].x = poRing->getX(i);
                                aoVertices[i].y = poRing->getY(i);
                                aoVertices[i].z = poRing->getZ(i);
                        }

                        for (int iRing=0; iRing < nRingSize; iRing++)
                        {
                                int nCurrentStart = aoVertices.size();
                                poRing = poPoly->getInteriorRing(iRing);
                                anRingStart[iRing+1] = nCurrentStart + 
poRing->getNumPoints();
                                aoVertices.resize(nCurrentStart + 
poRing->getNumPoints());

                                for(int i = nCurrentStart; i < 
aoVertices.size(); i++ )
                                {
                                        aoVertices[i].x = 
poRing->getX(i-nCurrentStart);
                                        aoVertices[i].y = 
poRing->getY(i-nCurrentStart);
                                        aoVertices[i].z = 
poRing->getZ(i-nCurrentStart);
                                }
                        }
                        
                        if(iRingStartField == -1)
                        {
                                iRingStartField = poVecSeg->GetFieldCount();
                                //poVecSeg->AddField( "RingStart", 
PCIDSK::FieldTypeCountedInt, "", ""
);
                                OGRFieldDefn oField( "RingStart", 
OFTIntegerList );
                                //oField.SetWidth(100);
                                CreateField( &oField );
                        }

                        std::vector<PCIDSK::ShapeField> aoShapeFields;
                        poVecSeg->GetFields(id, aoShapeFields);

                        aoShapeFields[iRingStartField].SetValue(anRingStart);
                        poVecSeg->SetFields( id, aoShapeFields );
                }




--
View this message in context: 
http://osgeo-org.1560.x6.nabble.com/OGR-can-t-create-PCIDSK-polygon-file-tp5180339.html
Sent from the GDAL - Dev mailing list archive at Nabble.com.
_______________________________________________
gdal-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/gdal-dev

Reply via email to