ThinkGeo.com    |     Documentation    |     Premium Support

Column Data not appearing properly in output shapefile

Hi,


I have the following code that I am using to output a shape file from all the features on a layer that I've created.  The resultant points in the shape file appear fine; however, the column value information is not being written into the dbf file correctly.


            DbfColumn dbfNameField = new DbfColumn("Name", DbfColumnType.String, 30, 0);

            WellKnownType shapeType = WellKnownType.Point;

            ShapeFileType shapeFileType = (ShapeFileType)shapeType;


            ShapeFileFeatureSource.CreateShapeFile(shapeFileType,

                shapeName, new DbfColumn[] { dbfNameField }, Encoding.Unicode, OverwriteMode.Overwrite);

            ShapeFileFeatureSource shapeFileLayer = new ShapeFileFeatureSource(

                shapeName, ShapeFileReadWriteMode.ReadWrite);


            foreach (Layer layer in layerOverlay.Layers)

            {

                layer.Open();

                

                InMemoryFeatureLayer fl = (InMemoryFeatureLayer)layer;

                Collection<Feature> allFeatures = fl.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);

                Collection<FeatureSourceColumn> allColumns = fl.QueryTools.GetColumns();


                foreach (Feature feature in allFeatures)

                {

                    shapeFileLayer.Open();

                    Dictionary<string, string> shapeColumnValues = new Dictionary<string, string>();

                    BaseShape baseShape = feature.GetShape();


                    // Loop through all columns and add their values

                    foreach (FeatureSourceColumn column in allColumns)

                    {

                        string featureColumnValue = feature.ColumnValues[column.ColumnName].ToString();

                        shapeColumnValues.Add(column.ColumnName, featureColumnValue);

                    }


                    try

                    {

                        shapeFileLayer.BeginTransaction();

                        shapeFileLayer.AddFeature(baseShape, shapeColumnValues);

                        TransactionResult result = shapeFileLayer.CommitTransaction();

                    }

                    finally

                    {

                        shapeFileLayer.Close();

                    }

                }

                layer.Close();

            }

 


I have validated that the data are being passed properly into the shapeColumnValues dictionary, but the resultant shape file only shows a field called "N a m e" spaced out very awkwardly and none of the 45 column values are included.  I tried to upload the shape file with this message, but it said it wasn't allowed. 


 



Hi Damian, 
  
 I created a test project and reproduced your problem. I am working for it. I will update the status if I get any progress. 
  
 And if you want to upload any file, you can zip it first or send that to support@thinkgeo.com via email. 
  
 Regards, 
  
 Don

Hi Damian,  
  
 I think this is a bug. I will talk with the development team and try to find a solution tomorrow. 
  
 Regards, 
  
 Don

Hi Don, 
  
 Okay, thanks.   
  
 If you can find another way to get it working in the interim that would be great. 
  
 Regards, 
 Damian

Damian, 
  
 Yes, we are trying to find a workaround for you first. 
  
 I will update if I get any progress. 
  
 Regards, 
  
 Don

Hi Damian, 
  
 I did some research and try, unfortunately it looks we won’t have a workaround now, just need wait for change the code. 
  
 Today we may cannot complete the fix, I will keep update status next Monday. 
  
 Regards, 
  
 Don

Hi Damian,


Our developer found this reason. The encoding shouldn't be set to Encoding.Unicode, in our developer's machine, it will throw exception if it is unicode, but in my machine it won't throw exception, I guess in your machine it just same as mine, I guess that's because the difference region and language setting.


Here I build a simple sample, you can review it and let me know if you have any question.


Regards,


Don



003_002_001_Sample.zip (12.7 KB)

Sorry for the delayed reply Don.  Was on a holiday. 
  
 Thanks for the answer.  The ASCII encoding works fine.

Hello Damian, 
  
 Any more questions please feel free to let us know. 
  
 Regards, 
  
 Gary