ThinkGeo.com    |     Documentation    |     Premium Support

The shape you provided does not pass our simple validation

Hello,


When executing the following code :


            var featureLayer = new ShapeFileFeatureLayer("myShapeFile.shp"));

            featureLayer.Open();

            try

            {

                var features = featureLayer.QueryTools.GetFeaturesIntersecting(boundingBox, ReturningColumnsType.AllColumns);

                foreach (var feature in features)

                    feature.ColumnValues["TypeName"] = ((int)_typeName).ToString();



                return features;

            }

            finally 

            {

                featureLayer.Close();

            }


 


I sometimes get this exception :


System.InvalidOperationException: The shape you provided does not pass our simple validation.The shape you provided does not pass our simple validation.

   bei ThinkGeo.MapSuite.Core.x6d719af406ea4c2c.xff365c684fff1baa(BaseShape x873d2ddd87022b07)

   bei ThinkGeo.MapSuite.Core.BaseShape.Intersects(BaseShape targetShape)

   bei ThinkGeo.MapSuite.Core.FeatureSource.x54b9ebf1a24b4f52(BaseShape xb513c0b05488b8ed, IEnumerable`1 x8ad42fcdfcf2a001)

   bei ThinkGeo.MapSuite.Core.FeatureSource.SpatialQueryCore(BaseShape targetShape, QueryType queryType, IEnumerable`1 returningColumnNames)

   bei ThinkGeo.MapSuite.Core.FeatureSource.SpatialQuery(BaseShape targetShape, QueryType queryType, IEnumerable`1 returningColumnNames)

   bei ThinkGeo.MapSuite.Core.FeatureSource.SpatialQuery(BaseShape targetShape, QueryType queryType, ReturningColumnsType returningColumnNamesType)

   bei ThinkGeo.MapSuite.Core.QueryTools.GetFeaturesIntersecting(BaseShape targetShape, ReturningColumnsType returningColumnNamesType)

   bei KubaWmsServices.Wfs.FeatureReader.GetFeatures(Double scale, RectangleShape boundingBox) in C:\projects\Kuba50\Implementation\Src\KubaServices\KubaWmsServices\Wfs\FeatureReader.cs:Zeile 55.

   bei KubaWmsServices.Wfs.FeatureManager.GetFeatures(WfsRequest parameter) in C:\projects\Kuba50\Implementation\Src\KubaServices\KubaWmsServices\Wfs\FeatureManager.cs:Zeile 64.

   bei KubaWmsServices.Wfs.FeatureManager.GetFeaturesAsBinary(WfsRequest parameter) in C:\projects\Kuba50\Implementation\Src\KubaServices\KubaWmsServices\Wfs\FeatureManager.cs:Zeile 28.

   bei Wfs.DoAction() in C:\projects\Kuba50\Implementation\Src\KubaServices\KubaWmsServices\Wfs.aspx.cs:Zeile 54.

   bei Wfs.Page_Load(Object sender, EventArgs e) in C:\projects\Kuba50\Implementation\Src\KubaServices\KubaWmsServices\Wfs.aspx.cs:Zeile 18.


 


Here is a watch of the boundingBox variable during the execution :


-        boundingBox    {626798.572199476,241304.500680686,629287.593547029,239166.932294747}    ThinkGeo.MapSuite.Core.RectangleShape

+        base    {626798.572199476,241304.500680686,629287.593547029,239166.932294747}    ThinkGeo.MapSuite.Core.AreaBaseShape {ThinkGeo.MapSuite.Core.RectangleShape}

        Height    2137.5683859389974    double

+        LowerLeftPoint    {626798.572199476,239166.932294747,0}    ThinkGeo.MapSuite.Core.PointShape

+        LowerRightPoint    {629287.593547029,239166.932294747,0}    ThinkGeo.MapSuite.Core.PointShape

+        UpperLeftPoint    {626798.572199476,241304.500680686,0}    ThinkGeo.MapSuite.Core.PointShape

+        UpperRightPoint    {629287.593547029,241304.500680686,0}    ThinkGeo.MapSuite.Core.PointShape

        Width    2489.0213475530036    double

+        Static members        

+        Non-Public members        



 


I don't really understand this validation, the bounding box seems to be a correct rectangle. 

Is the problem in the shape file ?


Thanks,

Guillaume.



The bounding box seems correct. It might be something with the shapefile. Can you send us the shapefile so that we can look at it? Thank you. 
 Make sure, you include at least the .shp, .shx and .dbf files.

Hello Val,


You can download a zip file containing the shape file here : guillaume-remy.fr/tmp/RbbsNational_full_20100622143605.zip


Thanks,

Guillaume.



Guillaume,  
  
 When I tried your data and find there is one line whose ShapeID is 148 has an issue. We checked the LineString has only one point which is not valid shape. During the querying, we need to validate the shape first then intersects with the specified bounding box. I try to open your shape file with Global mapper and we still cannot query the shape whose ShapeID is 148. 
  
 Hope it helps. 
  
 Thanks, 
 Howard

Hi Howard, 
  
 I just checked the shapefile I sent to you. 
 I noticed that the line whose ShapeId is 148 has 2 points, but they are really close. 
 Furthermore, I tested my shapefile with some free shape viewers (Quantum, Tatuk), and they manage to display my shapefile fully without any problem. 
  
 Thanks, 
 Guillaume. 


Guillaume, 
  
   I think it is one thing to display an invalid shape and another to do a spatial calculation on it.  I think this is a good thing that it threw an error as now you can fix your data. 
  
 David

David, 
  
 I undersand what you say, but it doesn’t answer my question. 
 Howard said that there was a problem with the ShapeId 148, because it had only 1 point. 
 I checked the shapeId 148, and it has 2 points. His geometry is LINESTRING (756809.98 190375.303, 756819.078 190376.037) 
 For now I have nothing to fix, or I don’t understand what to fix. 
  
 Furthermore, I agree it is a good choice that it threw an error, but with the error message I get I cannot do anything, but post here. 
 It could be helpfull if it had the wrong geometry in the message, ot at least a more helpfull message. 
  
 Guillaume.

Guillaume, 



Here is what I tested. I use two different 3rd part tools to query the shape file, but the result is the same. Here are some screenshot for it.



[Figure 1, use Global mapper: no features found, but it queries fine with shape id 147 and 149]





[Figure 2, use Tatuk; the result is the same, we can found a feature with shape id 148, but we cannot find it highlighted on the map]





Also, you can query with MapSuite Query tools, here is the code.

ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(@"RbbsNational_full_20100622143605.shp");
layer.Open();
Feature feature = layer.QueryTools.GetFeatureById("149", ReturningColumnsType.AllColumns);
layer.Close();




Could you tell us how do you find the Wkt you pasted? I’d like to double check with your method.

Thanks,

Howard



Hello Howard, 
  
 Hum… how to say that… It seems that I was looking at the wrong file. Sorry for that. 
 Now I found my problem and I could solve it. 
  
 Many thanks for your answer, 
 Guillaume. 
  
 (FYI I usedthe Shape2Sql tool in order to get the WKT from the shapefile) 
  


Hello Guillaume, 
  
 You are welcome; just feel free to let me know if you have more questions. 
  
 Thanks, 
 Howard