[Gdal-dev] Problem writing to MapInfo files
Woon Wei Lee
wlwoon at must.edu.my
Sun Jul 11 23:19:48 EDT 2004
Hi again
Actually it turns out that the problem can also be fixed by simply passing the reference
to the feature straight to setfeature()
i.e.: so by changing the following line in function createfeature() in
mitab_imapinfofile.cpp:
if (SetFeature(poTABFeature) > -1)
to:
if (SetFeature((TABFeature*) poFeature) > -1)
Is there any problem with doing this instead of transferring all the definitions from the
original feature to a copy??
Cheers
Wei Lee
On 12 Jul 2004 at 0:50, Woon Wei Lee wrote:
> Dear all,
>
> It turns out that the problem seems to be that the pen style isn't
> transferred across by simply doing a "setstylestring()" command ->
> this is a member of class TABFeature but what really matters when
> writing to a file seems to be class ITABFeature (class TABPolyline is
> derived from both these classes).
>
> Somehow there is some kind of problem with synching the pen styles
> between the two so it is possible to appear to get the correct
> settings when executing a "setstylestring()" (and checking the outcome
> using getstylestring()) on the feature object, but
> TABPolyline->GetPenColor() still returns a zero...
>
> I was able to get the pen colors to transfer correctly by adding
> something like this to the function CreateFeature() in file
> mitab_imapinfofile.cpp:
>
> // Declaring utility pointers
> TABPolyline *mod_poTABFeature,*mod_poFeature;
>
> // Cast as pointers to TABPolyline object so that we can call the
> class functions // GetPenColor() and GetPenPattern()
> mod_poFeature=(TABPolyline*) poFeature;
> mod_poTABFeature=(TABPolyline*) poTABFeature;
>
> // Set the Pen Colors and Pen Patterns
> mod_poTABFeature->SetPenColor(mod_poFeature->GetPenColor());
> mod_poTABFeature->SetPenPattern(mod_poFeature->GetPenPattern());
>
> I'm afraid it's a bit of a hack and only works for Polylines (plus it
> doesn't address the underlying problem of how the two styles came to
> be different in the first place) - I haven't had time to really
> understand the full class structure or to figure out how to devise a
> proper fix yet but I hope this sheds some light on the problem which
> some of us have encountered..
>
> Best Regards
> Wei Lee
>
>
>
>
> On 7 Jul 2004 at 16:50, Frank Warmerdam wrote:
>
> > Woon Wei Lee wrote:
> > > Hi all
> > >
> > > I have been trying to put together a little program to re-write
> > > data from an existing *.TAB file to a new layer but with different
> > > colours for the features (I am working on an app to process
> > > traffic data then return a colour-coded congestion map) but the
> > > ogr library refuses to transfer the stylestring info over to the
> > > new layer.
> > >
> > > I noticed from a previous posting that this is a known bug (
> > > http://xserve.flids.com/pipermail/gdal-dev/2004-July/006558.html )
> > > so I thought I could have a short at debugging it but I can't seem
> > > to find the relevant part of the ogr source.
> > >
> > > My program uses the function OGR_L_CreateFeature() from the c api
> > > which is a wrapper for OGRLayer::CreateFeature() but the closest I
> > > can find is this bit of code from ogrlayer.cpp:
> > >
> > > OGRErr OGRLayer::CreateFeature( OGRFeature * )
> > >
> > > {
> > > return OGRERR_UNSUPPORTED_OPERATION;
> > > }
> > >
> > > which presumably is a stub for some driver specific version which
> > > is contained in another file.. however I just can't find where the
> > > "real" function is. Could anyone help me out please??
> >
> > Wei Lee,
> >
> > The MITAB driver overrides the CreateFeature in the IMapInfoFile
> > class found in gdal/ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp.
> > Looking at this method, I see it makes no effort to transfer the
> > style string to the internal feature. I am suspecting this is
> > responsible for the problems generating proper styling results. Try
> > adding something like this down just before the SetFeature() call to
> > apply the passed in style string to the real MapInfo feature object
> > used for writing and see if that helps.
> >
> > if( poFeature->GetStyleString() != NULL )
> > poTABFeature->SetStyleString( poFeature->GetStyleString()
> > );
> >
> > Best regards,
> >
> > --
> > ---------------------------------------+----------------------------
> > -- -------- I set the clouds in motion - turn up | Frank
> > Warmerdam, warmerdam at pobox.com light and sound - activate the
> > windows | http://pobox.com/~warmerdam and watch the world go round -
> > Rush | Geospatial Programmer for Rent
> >
> >
>
>
> _______________________________________________
> Gdal-dev mailing list
> Gdal-dev at xserve.flids.com
> http://xserve.flids.com/mailman/listinfo/gdal-dev
>
Woon Wei Lee, Ph.D
Assistant Professor,
Malaysia University of Science and Technology.
Tel: 603-78801777 ext 129
Fax: 603-78801762
More information about the Gdal-dev
mailing list