ThinkGeo.com    |     Documentation    |     Premium Support

Filter Functionality



Hello,


I would like to implement filter functionality in InMemoryFeatureLayer.

For example, I have 10 features and I would like to display only 7 out of 10. So I am using GetAllFeatures method and FeatureIdsToExclude to hide features.

But next time, when I filter again and want to display 3 features out of all 10, I cannot - GetAllFeatures is giving me only 7  features and not all 10.

 

How can I get all features – visible and hidden?




Thanks,

Inna



Hello Inna,


Thanks for your post, I did some test with GetAllFeatures and FeatureIdsToExclude, I can't recreate the problem you mentioned, I guess there is a possibility you didn't clear the FeatureIdsToExclude before you do the second time filter?


Please check my test code.



            PointShape p1 = new PointShape();
            PointShape p2 = new PointShape();
            PointShape p3 = new PointShape();
            PointShape p4 = new PointShape();
            InMemoryFeatureLayer i = new InMemoryFeatureLayer();
            i.Open();
            i.FeatureSource.BeginTransaction();
            i.FeatureSource.AddFeature(new Feature(p1));
            i.FeatureSource.AddFeature(p2);
            i.FeatureSource.AddFeature(p3);
            i.FeatureSource.AddFeature(p4);
            i.FeatureSource.CommitTransaction();
            i.FeatureSource.FeatureIdsToExclude.Add(i.InternalFeatures[0].Id);
            Collection<Feature> features = i.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);
            i.FeatureSource.FeatureIdsToExclude.Clear();
            Collection<Feature> features1 = i.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);

Regards,


Gary



Hi Gary,


It is really weird, I cannot reproduce it in my test application, but it does happen in my production application. And yes, I am clearing excluded features before calling GetAllFeatures method.

And also I found that my code works fine with version 5.5.153, but does not work with version 5.5.171.0.


Do you know about any significant changes between versions?


This is my code I am using to filter features:



private void Filter()
 {
            FeatureLayer layer = wpfMap1.FindFeatureLayer("FeatureLayer");
            if (layer == null) return;
            lock (layer)
            {
                layer.Open();
            
                layer.FeatureIdsToExclude.Clear();
                            
                Collection<Feature> allfeatures = layer.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);
                foreach (Feature f in allfeatures)
                {
                    string name = GetFeaturesName(f);
                    if (!filteredFeatures.ContainsKey(name))
                    {
                        
                        layer.FeatureIdsToExclude.Add(f.Id); 
                    }
                   
                }
             
                layer.Close();
                overlay.Refresh();
            
    }
}
 

Thank you for your help,

Inna


 



Hello Inna, 
  
 Thanks for your further information, yes we did a lot of changes in featuresource for 6.0 release, but I did a general review, it won’t effect the FeatureIdsToExclude, but if you confirm it’s because different dlls cause the problem, it’s easy to reslove, please provide us a sample can recreate with 5.5.171.0, it will be done very quick. 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 Unfortunately I cannot provide you a working sample, as it seems it does not work only in my production application.  
 But I think a problem is in TileType, because when I switched to MultipleTile from SingleTile, everything is working as expected. 
  
 I guess it is enough for now, but I still want to work with  SingleTiles and not MultipleTiles. 
  
 Thanks, 
 Inna

Hello Inna, 
  
 Ok, I’m glad it has workaround now, I’m truly sorry that we are preparing the 6.0 release so we can’t do some too deep research for now, if we met this problem in our test, we will find the root cause and fix it. 
  
 Also if you have some other way to recreate it, feel free to let us know, I can do the test. 
  
 Regards, 
  
 Gary