ThinkGeo.com    |     Documentation    |     Premium Support

Selecting Feature from MapShapeLayer

Hello ThinkGeo,


I am feeling that this is the end of my summer as I am here bothering you with my questions again . My issue today is related with interactivity. I have a MapShapeLayer that hosts my "moving" assets. I used the MapShapelayer as this is the one that allows me to assign differenct "images" per feature/asset. Now, I want to be able to click on the Map and be able to select the "asset". 


The simpler way to do this is to itterate through the MapShapes of my MapShapeLayer, and for each mapshape find the distance between the point I clicked and that mapShape. The MapShape with the smaller distance is the one I selected. You obvisouly see that this is not a great way to do it. I was hoping for something like "a mouse click handler" on the layer that contains the features I want to select. Then by clicking on the Map, the click propagates to the layer and the layer event handler returns the features you have clicked on. Is there anyhing like this available?


Kind Regards


Yiannis



Ioannis, 



Thank you for your post, please have a look at this code below: 




void winformsMap1_MapClick(object sender, MapClickWinformsMapEventArgs e)
        {
            FeatureLayer worldLayer = winformsMap1.FindFeatureLayer("WorldLayer");

            worldLayer.Open();
            Collection<Feature> selectedFeatures = worldLayer.QueryTools.GetFeaturesContaining(e.WorldLocation, new string[1] { "CNTRY_NAME" });
            worldLayer.Close();

            if (selectedFeatures.Count > 0)
            {
                //you can choose you asset
            }
        }

Any more questions please feel free to let me know. 



Regards, 



Gary



Hi Garry, 
  
 Thank you for your answer. I am afraid that your example will not work for 2 reasons. First as I am using MapShape layer, I don’t have access to the QueryTools which are available on layers that have inherited from FeatureLayer abstract class. Second, even if I had access to the QueryTools, in fact I did this by temporary copying the features from the MapShapeLayer to an InMemoryFeatureLayer, the GetFeaturesContaining call is a very long shot as it will have to find a Point feature containing the Point feature created by the mouse click. So unless if I am missing something fundamental, that will work just by sheer chance. So the only solution I have found so long and using your code, is to copy in the MouseClick method the features from the MapShapeLayer to the temporaryInMemoryLayer altering at the same time those features and making them a square or a circle, i.e a shape where the GetFeaturesContaining has a meaning. It would be great however if in the next version of MapSuite that functionality to be more seamless.   
  
 Thanks and kind regards 
 Yiannis

Ioannis, 
  
 Sorry for waiting and I misunderstanding something at the beginning. 
  
 Yes, as you said, you need to use FeatureLayer to get the QueryTools, you can get the features and copy to InMemoryFeatureLayer then use QueryTools to find which feature you were clicked and get that feature id, with this, you can get the feature in you MapShape layer because the feature id never change. 
  
 Regards, 
  
 Gary