ThinkGeo.com    |     Blog    |     Wiki    |     Support

TAB File Projection

Hi,



I was trying to edit (add object/feature) into TAB file and succeed, but when I check the TAB fle using MapInfo it lost its projection. the Projection somehow change from EPSG 4326 into Non-Earth (Meters).



also when I try to create new TAB file, it always ended with Non-Earth Projection.



How do I resolve this?



Thanks.

Hi Syarief, 
  
 Our TAB have some different with MapInfo, our projection information is saved in standalone .prj file. 
  
 So I think maybe you need to set the projection information again in MapInfo. 
  
 Regards, 
  
 Don

Hi Don, 
  
 I don’t really understand what you mean by set the projection again in MapInfo, do I need to reset the projection in MapInfo every time I alter the TAB file? if that so, then what about SHP file, because I’m planning to convert the TAB file into SHP. I already did a research on creating SHP file, and it looks like MapSuite also doesn’t save the projection. could you please give me some snippet how to convert TAB into SHP and preserve the Projection! 
  
 and I don’t see any .prj file, and MapInfo doesn’t produce .prj file when I saved it. 
  
 hope you can elaborate more and give more code-approach way out rather than using third party way out (in this case MapInfo or any other GIS apps). 
  
 Thanks.

1 Like

Hi Syarief,  
  
 I remembered in MapInfo we can choose the projection for current loaded layer, but I am not very sure about that. Maybe I will install the latest version tomorrow and have a try. 
  
 The projection mode we used for TAB just like the SHP, if you haven’t found PRJ file, so the projection should be 4326. SHP file takes the PRJ file also, and the default is 4326. 
  
 Today I asked our developer and I want to let you know what information will lost when you convert MapInfo tab to our shp. 
  
 1. Projection information. 
     
 Don’t worry about this, you can read projection from MapInfo UI and set projection to our ShapeFileFeatureLayer, which will generate prj file after build shape file succeed. 
  
 2. Style information. 
  
 TAB file set style for each feature, shape file set style for each layer. So we can’t save original style, but instead of that, you should want to do further work if you want to make everything looks the same like before: 
 a. Group the shapes and put same group in one layer, then render it. 
 b. Use our classbreakstyle or valuestyle for render different group shapes in one layer. 
  
 Sorry we don’t have an existing sample for that, but I found a topic with simple code for that works maybe helpful. 
  
 thinkgeo.com/forums/MapSuite/tabid/143/aft/7442/Default.aspx 
  
 Regards, 
  
 Don  


Hi Don, 
  
 Just want to let you know 
 - I have tried to convert TAB into SHP but still can’t get the expected result (there is no .prj), I use my own code to convert it, haven’t tried the method in your given link yet. 
  
 
_tabLayer = new TabFeatureLayer(_fullTabFilePath, fileMode);
_tabLayer.Open();

int _tempCount = _tabLayer.FeatureSource.GetCount();
List<Feature> _tabFileFeatures = new List<Feature>();
                    for (int i = 0; i <= _tempCount; i++)
                    {
                        Feature _feat = _tabLayer.FeatureSource.GetFeatureById(i.ToString(), ReturningColumnsType.AllColumns);
                        // do some process
                        Feature _feature = new Feature(_feat.GetShape(), _featureColumns);
                        _tabFileFeatures.Add(_proj4.ConvertToExternalProjection( _feature));
                    }
DbfColumn[] _shapeColumns = MapHelper.GetShapeFileMapColumns(kodePeta, extPeta).ToArray();
                ShapeFileFeatureSource.CreateShapeFile(MapHelper.GetShapeFileObjectType(kodePeta, extPeta),
                    _shapeFilePath, _shapeColumns,
                    System.Text.Encoding.UTF8, OverwriteMode.Overwrite);

_objectShapeFile = new ShapeFileFeatureSource(_shapeFilePath, ShapeFileReadWriteMode.ReadWrite);
                    _objectShapeFile.Open();
                    _objectShapeFile.BeginTransaction();
for (int i = 0; i < _tabFileFeatures.Count; i++)
                    {
                        try
                        {
                            _objectShapeFile.AddFeature(_tabFileFeatures[i]);
                        }
                        catch (Exception _er)
                        {
                        }
                    }
_objectShapeFile.CommitTransaction();

 
  
 - I convert my TAB file into SHP using QGIS, and it did produce .prj file, and when I tried to alter this SHP file using MapSuite I see that it didn’t change the Projection and it works great. 
  
 Is it Mandatory for MapSuite to have prj file in SHP so that it will works without anomaly behavior? 
 does TAB file also use .prj file? 
 How do I create new SHP file (empty) with specified Projection? 
  
 Thanks 


Hi Syarief, 
  
 I am sorry I gave you some incorrect information in previous reply. 
  
 Today I ask our developer about PRJ file support for detail, and make sure only our GisEditor product support that now. 
  
 For other products, we can convert feature to specified projection by ShapeFileFeatureSource.SaveToProjection, but we don’t have a function for read or generate PRJ file. 
  
 So the reprojection feature have been saved in shape file, and the prj file or any file you saved the projection information is only for let viewer know what the projeciton the shape file is now. 
  
  
 And our tab file works just like our shape file here. 
  
 If you want to create a empty SHP file, you can still build it by: ShapeFileFeatureSource.CreateShapeFile(ShapeFileType.Point, @“c:\file.shp”, dbfColumns); 
  
 If you want to save the feature for Google Projection in it. 
  
 1. You can reprojection the features by ManagedProj4Projection, and directly add them to the shape file. 
 2. You can add the features to the shape file, then call the code as below to convert it. 
       ManagedProj4Projection proj4 = new ManagedProj4Projection(); 
             proj4.InternalProjectionParametersString = ManagedProj4Projection.GetWgs84ParametersString(); 
             proj4.ExternalProjectionParametersString = ManagedProj4Projection.GetGoogleMapParametersString(); 
  
             ShapeFileFeatureSource.SaveToProjection(@“d:\file.shp”, @“d:\file_900913.shp”, proj4, OverwriteMode.Overwrite); 
  
  
 Any question please let me know. 
  
 Regards, 
  
 Don

Hi Don,


I've tried creating an empty shape file with your code,




ShapeFileFeatureSource.CreateShapeFile(MapHelper.GetShapeFileObjectType(mapCode, mapExt),
_shapeFilePath, _shapeColumns,
System.Text.Encoding.UTF8, OverwriteMode.Overwrite);
_objectShapeFile = new ShapeFileFeatureSource(_shapeFilePath, ShapeFileReadWriteMode.ReadWrite);
_objectShapeFile.Open();
_objectShapeFile.BeginTransaction();
_objectShapeFile.AddFeature(_tabFileFeatures<i>); // the _tabFileFeatures has WGS84 projection
_objectShapeFile.CommitTransaction();
_objectShapeFile.Close();





but when I tried to open it using QGIS, QGIS does not recognize its projection.





Thanks before.


 



Hi Syarief, 
  
 We don’t have any information describe the projection after you created a new shapefile. 
  
 We just save the feature in layer but don’t save projection information, you should know what the projection the features are for and tell the software when you use it. 
  
 Regards, 
  
 Don