ThinkGeo.com    |     Documentation    |     Premium Support

GetFeaturesContaining on ShapeFileLayer and MultipleShapeFileLayer

Hello,


I get the Feature of a ShapeFileLayer on winformsMap_MapClick.



  mylayer.Open()
  Dim selectedFeatures As Collection(Of Feature) = Nothing
  selectedFeatures = DirectCast(mylayer, FeatureLayer).QueryTools.GetFeaturesContaining(e.WorldLocation, ReturningColumnsType.AllColumns)

And selectedFeatures.count = 1


 


But if I create the layer as a MultipleShapeFileLayer (but only with one shapefile -the same as above),


then selectedFeatures.count = 0


Do you know why ?

Thank you for your help.



Hello Eric, 
  
 Thanks for your post, the way you use of get feature is check if there is features exist on your mouse click location. Can you check if you click the same place in same zoomlevel? 
  
 If that dose not resolve the problem, could you please provide a very simple sample? If your shapefile is not big, please contains it. 
  
 Thanks for your help. 
  
 Regards, 
  
 Gary

Gary,


Thank you for your reply.


Please see attachment, may be I miss something !

 


 


Change 
Dim worldLayer As New MultipleShapeFileFeatureLayer(shp)
by 
Dim worldLayer As New ShapeFileFeatureLayer(shpFile)
and "worldLayer.QueryTools.GetFeaturesContaining " = 1 ...


 



MapSuite.zip (15.6 KB)

Eric, 
  
 Thanks for your post, I believe the issue is because the index is incorrect/missing for your MultipleShapeFileFeatureLayer.  When I built the Index using the code below everything worked as expected.   
  
 worldLayer.BuildIndex(shpFile) 
  
 Hope this helps. 
  
 Thanks! 
  
  


Clint, thank you for your reply.


You are right, the Built of the index changes the behavior of GetFeaturesContaining.


But I'm confused between :

 the index built with ShapeFileFeatureLayer.BuildIndexFile(fileShape, fileIndex, BuildIndexMode.Rebuild)

 and those built with MultipleShapeFileFeatureLayer.BuildIndex(fileShape, fileIndex, BuildIndexMode.Rebuild)


 Should we rebuild the index depending how we open the shapefile (ShapeFileFeatureLayer or MultipleShapeFileFeatureLayer) ?

 or is it possible to build the index once (eg ShapeFileFeatureLayer.BuildIndexFile), then use this index when opening the shapefile with MultipleShapeFileFeatureLayer ?

 


Regards,

G



 Eric,


 
Thanks for your response.  I believe you will need to create different indexes one for the regular shapefilefeaturelayer and one for the multishapefilefeaturelayer.  The reason I say this is that I believe the MultiShapeFileFeatureLayer index needs more information in it to point to the various files that make up the index, while the index for the shapefilefeaturesource is tied to only one file.   However if you want you can try creating the index with the same name using the MultiShapeFileFeatureLayer and see if it works, if it doesn't you can simply just delete the index files and rebuild them as it won't do any damage to original shapefile.
 
Also if you are interested in some of the different uses for the overloads for the BuildIndex you can check out the wiki posts at:
 
MultiShapeFileFeatureLayer
 
wiki.thinkgeo.com/wiki/Think...dexMode.29
 
ShapefileFeatureLayer
 
wiki.thinkgeo.com/wiki/Think...jection.29

Thank you Clint.


After several tests, it seems to me that:

 1) with MultipleShapeFileFeatureLayer.BuildIndex, the index is not created if there is only one ShapeFile  in the list

 2) use a MultipleShapeFileFeatureLayer.BuildIndex to open a ShapeFileFeatureLayer -> Input string was not in the correct format

 3) use a ShapeFileFeatureLayer.BuildIndexFile to open a MultipleShapeFileFeatureLayer -> no error, but GetFeaturesContaining  returns no Feature

 4) open a single shapefile with MultipleShapeFileFeatureLayer, specifying the index MultipleShapeFileFeatureLayer.BuildIndex, created with several ShapeFiles -> display all the Shapefiles referenced by the index and not just the ShapeFile mentioned ?


 Do you agree with these behaviors?


 On the other hand, for the opening of several Shapefiles with MultipleShapeFileFeatureLayer, is it possible to search for Shapefiles in different folders (do not use * xxx.shp, but a list of shapefiles)?


Regards,


 


 


 



Eric,  
  
 That sounds like what I would expect.   
  
 For adding shape files in different folders, try adding the shapefile directly to the ShapeFiles collection off of the MultipeShapeFileFeatureLayer and see fi that works.   
  
             myLayer.ShapeFiles.Add(YourShapeFileInfo); 
  
 Thanks!