ThinkGeo.com    |     Documentation    |     Premium Support

Shapefile RequireIndex

Hello,

If I try to open an existing Shapefile with - layer.RequireIndex = false - (currently exported from Arcgis, without any IndexFiles (ids, idx) I got an error after Map.Refresh "The input double value is out of range, Parametername maxX".

If I create these Indexfiles and set layer.RequireIndex = true, there are no errors.


So my question: Is this now not possible to open Shapefiles without Indexfiles? If so, this is really bad. Often our customers have not "write access" to the gis-folders.


 



 



ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(@"d:\kram_linie.shp");false;ApplyUntilZoomLevel.Level20;try

{


((


}


 


LayerOverlay)winformsMap1.Overlays[0]).Layers.Add("test", layer);finally

{


winformsMap1.Overlays[0].Lock.ExitWriteLock();


}


 


// allgemein

 


 


this.SetCurrentExtent();this.winformsMap1.Refresh();


layer.RequireIndex =


SetStyleByWellKnownType(layer);


layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel =


winformsMap1.Overlays[0].Lock.EnterWriteLock();


 



Hi Torsten, 



Thanks for providing your shapefile! 



Map Suite can load shapefiles that do not have IndexFiles. A simple test of this would be to delete the .ids and .idx files from the Countries02.shp that is included with the sample applications and set up your code to not require an index. 



As your shapefile does not contain a .prj file I was not able to determine the correct MapUnit that should be used and believe this might be the issue. I was able to load it into Map Suite Explorer and it would seem that perhaps you are using something smaller than feet or meters for your Unit System. Do you have a .prj file or the Projection information for this shapefile?



Hi Ryan,

Tanks for yours answer. I havn't a prj file. The Shapefile is in Gauss-Krueger CoordSys (EPSG 31468). I set the MapUnit to meter.

Hope this helps..


Regards

Torsten



Hi Torsten,


I believe the issue is that you have some invalid features in your shapefile.

I setup the following code to check if each of your Featues was Valid:



winformsMap1.MapUnit = GeographyUnit.Meter;
            ShapeFileFeatureLayer testfile = new ShapeFileFeatureLayer(@"C:\shapefiles\kram_linie.shp");
            testfile.RequireIndex = false;
            BaseShape.GeometryLibrary = GeometryLibrary.Unmanaged;
            testfile.Open();
            foreach (Feature feature in testfile.FeatureSource.GetAllFeatures(ReturningColumnsType.NoColumns))
            {
                if (!feature.IsValid())
                {
                    Debug.WriteLine(feature.Id + " " + feature.IsValid());
                }
            
            }

The result was that the following features were found to be invalid: (FeatureID, IsValid?)

228 False

229 False

230 False

231 False

243 False

244 False

285 False

544 False

554 False


Please note that I tested this using the 6.0.183.0 Dlls and that these dlls by default use BaseShape.GeometryLibrary = GeometryLibrary.Unmanaged. 

This means that the IsValid logic used in my sample is the latest SQL Server Validation test as described at this link: gis.thinkgeo.com/Support/Dis...fault.aspx

and in the UnmanagedAssembliesDeploymentGuide.txt located at 'C:\Program Files (x86)\ThinkGeo\Map Suite Desktop Evaluation Edition 6.0\Developer Reference\Desktop Edition' on your local system.


Based on this evidence you may want to revisit your shapefile to make sure it meets all the necessary validation tests.