ThinkGeo.com    |     Documentation    |     Premium Support

Are TAB files with RASTER images and TAB collection files supported?

Hello.


I have TAB-files that have Type "RASTER" in them and the File points to a tiff file.  I can't get these to open with TabFileFeatureLayer, I get an TargetInvocationException.  Are these kind of TAB files supported?


Also I have TAB-files which in the associated .ID file refers to a collection of other .TAB files (those with raster files in them).  Are these supported or do they fail just because raster TAB-files aren't supported?


Thanks,


  Jan D.


 



Jan, 
  
 Thanks for your post and questions. 
  
 Which kind of operating system are you using against? X86 or x64?  And in the HowDoI samples attached in the installer package, we have a sample showing how to load Tab file, did you have a try on that to see if it works? 
 HowDoI\Data providers\Load TabFileFeatureLayer 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale

X86 if that matters. 
 I loaded lots of Tab-files, the sample you mention  included.  But those aren’t TAB-files that point out a tiff file.  Here is an example TAB-file: 
  
 !table 
 !version 300 
 !charset WindowsLatin1 
  
 Definition Table 
   File “t05bno.tif” 
   Type “RASTER” 
   (1275000,6350000) (0,0) Label “Pt 1”, 
   (1299995,6350000) (4999,0) Label “Pt 2”, 
   (1299995,6325005) (4999,4999) Label “Pt 3” 
   CoordSys Earth Projection 8, 112, “m”, 15.8082777778, 0, 1, 1500000, 0 
   Units “m” 
   RasterStyle 1 59 
   RasterStyle 2 46 
   RasterStyle 7 0 
  
 and here is one that points out a collection of other TAB-files: 
  
 !table 
 !version 300 
 !charset WindowsLatin1 
  
 Definition Table 
   Type NATIVE Charset “WindowsLatin1” 
   Fields 2 
     Table Char (100) ; 
     Description Char (25) ; 
 ReadOnly 
 begin_metadata 
 “\IsSeamless” = “TRUE” 
 “\IsReadOnly” = “FALSE” 
 end_metadata 
  
  
  


Jan, 
  
 Thanks for you more information. 
  
 I am afraid that our MapSuite doesn’t support that kind of tab file, we use FDO which is a third-part open source library to work for tab files, so just not very sure if it has issue with that kind of tab file, the detail about FDO you can access fdo.osgeo.org/ 
  
 You might provide your sample data and send it to support@thinkgeo.com and let him forward to Yale and James, we will test it and make sure what happened. 
  
 Thanks 
 James

As I am evaluating your product for a project that starts soonish, I have to either come up with a workaround or look for another product. 
 Thanks for clarifying. 
  
   Jan D. 


Jan, 
  
   Maybe this is a stupid question but here it goes.  Why can’t you simply open the Tiff file separate from the Tab file?  Is it that you need the world coordinates of the image?  If so I think we could write something that will read that and then read the Tiff file.  Is this what you want?  If there any other data you need in the tab file related to the raster image? 
  
 David

You are correct, I need the world coordinates.  I made a script that extracts the info and writes a .tfw file that can be used by GeoTiffRasterLayer.  I seems to work OK, but as I am not a GIS expert, I don’t know if it is sufficient.  I don’t handle rotations for example.

Jan, 
 Thanks for your feedback and sharing. 
  
 I am not a GIS expert either:). While, I know it is enough to draw a raster layer if world coordinates is given no matter in world file or streams. I am not exactly sure about your requirement about the rotation. If you came across this issue, please do not hesitate to turn to us, we can discuss it within the capabilities of our product. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Well, I don’t know the full requirements either.  We get the GIS-files from a client, and so far we have only seen a subset.  What the rest has in store I don’t know.  Rotation may be in there or it may not.  But that is a side issue, I can deal with it if it pops up.  
  
 Thanks, 
  
    Jan D.

Jan, 
  
   Having worked with lots of image files 99.999% of the time the world file information is all you need.  If you have a script to extract that from the tab file then I think you are good to go.  Are you OK with doing that yourself and just using our GeoTiff layer, assuming we get the special characters issues ironed out?   
  
 David

It is a workaround that can be made to work for this issue. 
  
   Jan D. 


Jan, 
  
 Thanks for letting me know your status, I am glad seeing your progress. 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


I am also interested in this as I have hundreds of raster images from MapInfo which have associated tab files. 
 the problem is that the tiff files are not geotiffs - the only way to relate them to the real world is through the tab file which has all the geospatial information. Basically it just relates 3 or 4 ‘control point’ pixels to real world coordinates & also give the projection information. 
  
 I guess one way of solving the problem would be to convert the tiff to a geotiff using the tab file for the source of the information - I am not sure if there are applications out there that can do this. (or another way is have Map Suite be able to handle tab files including rasters but that probably isn’t going to happen in the near future) 


I'm a customer, but I would recommend that you consider another option.  Implement your own class by deriving from the GDI Raster layer (or whatever layer is appropriate). When you instantiate the class, let it read the .tab file and extract the georeferencing info. You can write that info back out into a .tfw file (the ESRI world file) and then just read the images as the native tifs. 



Actually even better: Instead of writing out a .tfw, there is some kind of an event that you can capture when the raster class you derive from opens the stream for the world file. You can implement that event and feed it a memory stream that has the world file contents. 



The other thing you will possibly want from the .tab file is the projection information. Your derivation can extract that info, too. But in my experience, on raster data, the only use for hat projection info is for the client application to have a way of knowing that the projection of the image is the same as the intended projection of the map display, and set the image visibility. On all of our layer derivations, we set the projection that is supposed to be used for the map display as a property of the layer. Then, in the IsVisible override, we test for the native image projection being the same as the target projection and return that boolean as one part of the total IsVisible response. 



We've built a class similar to this for wrapping all of our imagery. We store the projection info as a 7th line in the world file, when we can, or in a third proprietary file if we cannot modify the world file. 



I just wanted to throw some ideas out. Someone good could implement this as a code project in half-a-day. It just raised red flags for me when you said you could convert the tifs to geotifs. Maybe there are other good reasons for that, though... compression, internal referencing, etc. Just hate to see anyone do it only because of internal georeferencing.



Ted, 
  
   I agree with you on this.  If Jan and David can send us some sample files or at least the sample tab files that are just the headers for the TIff files we could create a class for this.  Any help they could provide as far as the format of the file would also help.  At the moment we do not support re-projection of raster data so we won’t need that information as much as we need those control points.  It needs to tell us the bounding information of the image and the size of the pixels. 
  
 David

Ok, here is a sample tab file.  I can’t send the tiff file, but it is 5000x5000 pixels. 
 I use Pt 1 and Pt 3 to make a world coordinates (tfw) file.  I don’t know what CoordSys or RasterStyle refers to. 
 But more important than raster tab files are tab files that are a collection of other files.  How can I manage those? 
  
   Jan D. 
  
 !table 
 !version 300 
 !charset WindowsLatin1 
  
 Definition Table 
   File “t05bno.tif” 
   Type “RASTER” 
   (1275000,6350000) (0,0) Label “Pt 1”, 
   (1299995,6350000) (4999,0) Label “Pt 2”, 
   (1299995,6325005) (4999,4999) Label “Pt 3” 
   CoordSys Earth Projection 8, 112, “m”, 15.8082777778, 0, 1, 1500000, 0 
   Units “m” 
   RasterStyle 1 59 
   RasterStyle 2 46 
   RasterStyle 7 0 


We just found another type of TAB-files you don’t support, tab files whose associate MAP-file contains text data. 
 And I don’t mean text like you can have text in one column of a vector data file, because this text  
 isn’t in a column enumerated in the tab-file. 
  
 The MAP/DAT files is a database format and the Obj column tells what kind of data it is. 
 You support MultiPolygon.  For TIFF files, the value is Rectangle, and for collection TAB files it is also Rectangle. 
 For the text style MAP-files it is LegacyText.  This type of file doesn’t give any error, it just doesn’t display anything. 
 The TAB-file is just: 
  
 !table 
 !version 300 
 !charset WindowsLatin1 
  
 Definition Table 
   Type NATIVE Charset “WindowsLatin1” 
   Fields 1 
     ID Integer ; 
  


It seems that I can deal with collections and rasters by parsing files myself.  But the string issue is harder.  I managed to parse MAP-files and there are strings as well as font and rendering information in there.  I see that the mitab library has structures for this. 
 It would be good if more of mitab where exposed to the C#-level, that way I wouldn’t have to parse files myself. 
  
 But it seems we can make things work with your product. 
  
    Jan D. 


Jan, 
  
 Sorry for delaying because we are in holidays. 
  
 We will give your ideas when we back to work. 
  
 Thanks 
 James

Below is a sample of one of my .TAB files which is associated with a raster file (71325aimg.tif).


The coordsys clause in this instance refers to WGS-84. MapInfo comes with a reference manual to decipher the Coordsys clauses - not sure how one would be able to figure WGS-84 from "CoordSys Earth Projection 1, 104" without that manual though a bit of searching shows GDAL might use the same clause?


RasterStyle explanation can be found here:

testdrive.mapinfo.com/tdc/mapinfo-l.nsf/1fcc8c6e8c3268b88525644200498df0/eb644ca1988301d685256f090059e6d2?OpenDocument

(my example doesn't used RasterStyle)


Dave


 


!table

!version 300

!charset WindowsLatin1



Definition Table

  File "71325aimg.tif"

  Type "RASTER"

  (115.854140262823,6.197801573558) (0,0) Label "Pt 1",

  (116.122773182113,6.197801573558) (8526,0) Label "Pt 2",

  (115.854140262823,5.822943285846) (0,11884) Label "Pt 3"

  CoordSys Earth Projection 1, 104

  Units "degree"