ThinkGeo.com    |     Documentation    |     Premium Support

How to allow the user to select a feature

In v2 I used map.SelectFeatures to identify features selected across multiple layers. This gave me an array of FeatureInfos.


There does not appear to be a similar feature in v4. The only example I have seen (in the how do I samples) uses OnClick to identify a feature in a single layer.



How do I replicate the functionality from v2?


Ultimately I need to present feature info from each of the selected features in a pop up windows.


Cheers


Steve



Steve, 
  
 Thanks for your post and question. 
  
 We do not have the exactly same API map.SelectFeatures as Map Suite 2.x do to select features in multiple layers, while we are able to do it very easily. 
  
 What I suggest you to do is just to loop those layers you want to do query against and query them one by one, the HowDoI sample you mentioned only shows how to do query on a single layer, we just need to loop each single layer and do the query against each of them. 
  
 Any misunderstanding just feels free to let me know. 
  
 Thanks. 
  
 Yale 


Is this how I should do it?



private List<Feature> GetSelectedFeatures(PointShape pointShape)
{
    List<Feature> featureList = new List<Feature>();

    foreach (Overlay overlay in gisMap.Overlays)
    {
        if (overlay.IsVisible && overlay is LayerOverlay)
        {
            LayerOverlay layerOverlay = overlay as LayerOverlay;

            foreach (Layer layer in layerOverlay.Layers)
            {
                if (layer is ShapeFileFeatureLayer)
                {
                    ShapeFileFeatureLayer shapeLayer = layer as ShapeFileFeatureLayer;
                    shapeLayer.Open();
                    Collection<Feature> selectedFeatures = shapeLayer.QueryTools.GetFeaturesContaining(pointShape, ReturningColumnsType.AllColumns);
                    shapeLayer.Close();

                    if (selectedFeatures.Count > 0)
                    {
                        featureList.AddRange(selectedFeatures);
                    }
             
                }
            }
        }
    }

    return featureList;

}

Cheers


Steve



Steve,


Thanks for your post and sharing of code.


This is exactly what we want; while personally minor changes can be done as following if we want to do queries on some other FeatureLayers instead of on ShapeFileFeatureLayers.



if (layer is FeatureLayer)
{
       FeatureLayer shapeLayer = layer as FeatureLayer;
       shapeLayer.Open();
       Collection<Feature> selectedFeatures = shapeLayer.QueryTools.GetFeaturesContaining(pointShape, ReturningColumnsType.AllColumns);
       shapeLayer.Close();

       if (selectedFeatures.Count > 0)
       {
           featureList.AddRange(selectedFeatures);
       }

}

Any more questions just feel free to let me know.


Thanks.


Yale