[gdal-dev] create 25D MultiPolygon how to
Mateusz Loskot
mateusz at loskot.net
Sat Mar 28 09:54:47 EDT 2009
legeochen wrote:
> 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.
Inspect your shapefile with ogrinfo as well as with
Shapelib's shpdump and dbfdump.
Check if .dbf contains exactly the same number of records
as .shp file
> 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.
No idea what's osgviewer and what its errors mean.
> for(Roadway::RoadWayArray::iterator itrw = _roadwayArr.begin(); itrw !=
> _roadwayArr.end();itrw++)
++itrw;
if you care about performance.
> {
> OGRFeature *poFeature;
>
> OGRMultiPolygon multiPoly;
> poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());
> Roadway::Triangle_list tris = (*itrw)->getTrianglelist();
No idea what Triangle and Roadway is, I assume it's your own geometry
type.
> for(Triangle_list::const_iterator ittri = tris.begin();ittri !=
> tris.end();ittri++)
++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());
Assure that
TRUE == poRing.get_IsClosed();
> 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!!
I'd suggest you to translate your Roadway/Triangle it to OGRPolygon
and OGRMultiPolygon (what you actually have done) and then dump it to
OGC Well-Known-Text (WKT).
Then, try to validate these geometries with PostGIS using
ST_GeometryFromText and ST_IsValid and friends.
See chapter 4 and 6 of PostGIS manual.
PostGIS (or GEOS) is good for geometries validation.
Best regards,
--
Mateusz Loskot, http://mateusz.loskot.net
Charter Member of OSGeo, http://osgeo.org
More information about the gdal-dev
mailing list