ThinkGeo.com    |     Documentation    |     Premium Support

How to select assets

Hi


Another v2 to v4 question.


In v2 I used to search and select assets using a sql query to return record id's then layer.selects() to select them.


In v4 I have figured out that I can use layer.FeatureSource.GetBoundingBoxById(id) to zoom to an asset but how do I select it?


I also need to allow a user to click on an asset and to select it.


Any ideas?


Cheers


Steve


 


 



Steve,


Thanks for your post and question.
 
Following HowDoI samples show you how easily is to do selecting based on MapSuite component, hope it helps, take a look if you are interested:
 
Select one feature:
HowDoI\Get Started\Find the feature(s) a user clicked on
 
Select features:
HowDoI\Querying Feature Layers\ SQL Query a feature layer
HowDoI\Querying Feature Layers\ Spatial Query a feature layer

 
Any more questions just feel free to let me know.
 
Thanks.
 
Yale

Yale 
  
 I have 2 requirements. 
  
 The first is to search data for an address then highlight the feature. I am having trouble highlighting the feature. I used to achieve this using layer.selects() but cannot find a way to do this in v4. 
  
 My second requirement is to allow the user to click on the map to select a feature. I have looked at the the examples you have suggested but these all perform queries on one layer only.  I have 15 layers split over multiple overlays. Do I have to iterate through all my layers and query them individually? This was very easy in v2. 
  
 Cheers 
  
 Steve

I have figured out how to select an address (based on the how do I sample). I'll post it here to help others:


First create an in memory query results layer:



        private void AddQueryResultLayer()
        {
            InMemoryFeatureLayer queryResultLayer = new InMemoryFeatureLayer();
            queryResultLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = new AreaStyle(new GeoSolidBrush(GeoColor.FromArgb(200, GeoColor.SimpleColors.PastelRed)));
            queryResultLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.OutlinePen.Color = GeoColor.StandardColors.Red;
            queryResultLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay spatialQueryResultOverlay = new LayerOverlay();
            spatialQueryResultOverlay.Layers.Add("QueryResultLayer", queryResultLayer);
            gisMap.Overlays.Add("QueryResultOverlay", spatialQueryResultOverlay);
        }

Then use the layer to highlight a feature - this is one feature based on an id:



        private void SelectAddress(int recId)
        {
            ShapeFileFeatureLayer addressLayer = (ShapeFileFeatureLayer)gisMap.FindFeatureLayer("AddressLayer");
            InMemoryFeatureLayer queryResultLayer = (InMemoryFeatureLayer)gisMap.FindFeatureLayer("QueryResultLayer");

            addressLayer.Open();
            Feature feature = addressLayer.QueryTools.GetFeatureById(recId.ToString(), ReturningColumnsType.NoColumns);
            RectangleShape rect = feature.GetBoundingBox();
            addressLayer.Close();

            queryResultLayer.InternalFeatures.Clear();
            queryResultLayer.InternalFeatures.Add(feature.Id, feature);

            rect.ScaleUp(150);
            gisMap.CurrentExtent = rect;
            gisMap.Refresh();
        }

I still need to figure out how to allow the user to seelct a feature when I have many layers...


Any ideas?


Cheers


Steve



Steve,


Thanks for your post and questions.


Hope the remaining problem is exactly the same one mentioned in following post, in which you let me know the result already.

gis.thinkgeo.com/Support/Dis...aspx#18037


Any more questions just feel free to let me know.


Thanks.


Yale