ThinkGeo.com    |     Documentation    |     Premium Support

How to promote to EditOverlay

 Greetings....  I am still in my first few hours with MapSuite 4.5 and am very impressed so far.  I am trying to scratch together a prototype application for my boss by Monday (no, I did not procrastinate on some task , I am just presenting options for a project that is going slowly).


Let's say I pull in some shapes from a shp file or use inMemoryLayer.InternalFeatures.Add to get features into an overlay and then add the overlay to the map. How do I promote those features to the EditOverlay?  I saw how to promote from the TrackOverlay to the EditOverlay in the samples but when I try something like this:


InMemoryFeatureLayer inMemoryLayer = (InMemoryFeatureLayer)winformsMap1.FindFeatureLayer("worldLayer")


I get an exception:


Unable to cast object of type 'ThinkGeo.MapSuite.Core.ShapeFileFeatureLayer' to type 'ThinkGeo.MapSuite.Core.InMemoryFeatureLayer'


Thank you for your time,


Dave



Please delete this topic, I just figured it out for InMemoryFeatureLayers, which is all I really needed anyway… 
  
 Dave

 I am not sure what you want to accomplish exactely but to make you understand how to get some features from a shapefile and add them to the EditOverlay, let's take an example. Let's say that you have a shapefile for countries (countries02.shp) made of polygon and you want to add the features (countries) that are landlocked to the EditOverlay to edit them by dragging them. You need to get the features from the shapefile and then add them one by one to the EditOverlay. Look at the code below with the comments. See the screenshot of the features in the EditOverlay ready to be dragged.


 



    winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
    winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean);

    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"../../data/countries02.shp");
    worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;
    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

    LayerOverlay layerOverlay = new LayerOverlay();
    layerOverlay.Layers.Add("worldLayer",worldLayer);
    winformsMap1.Overlays.Add("LayerOverlay", layerOverlay);

    
    ShapeFileFeatureLayer featureLayer = (ShapeFileFeatureLayer)winformsMap1.FindFeatureLayer("worldLayer");
    featureLayer.Open();
    Collection<Feature> features = featureLayer.QueryTools.GetFeaturesByColumnValue("LANDLOCKED", "Y");
    featureLayer.Close();

    //Loops thru all the features of the feature collection from the column query and add a new feature with the MultiPolygonShape
    //to the EditShapesLayer of the EditOverlay.
    winformsMap1.EditOverlay.EditShapesLayer.Open();
    winformsMap1.EditOverlay.EditShapesLayer.EditTools.BeginTransaction();
    foreach (Feature feature in features)
    {
        //Gets the MultiPolygonShape of each feature because countries02.shp is polygon based shapefile.
        MultipolygonShape multipolygonShape = (MultipolygonShape)feature.GetShape();
        winformsMap1.EditOverlay.EditShapesLayer.EditTools.Add(new Feature(multipolygonShape));
    }
    winformsMap1.EditOverlay.EditShapesLayer.EditTools.CommitTransaction();
   
    //Sets the properties so that the features are only draggable.
    winformsMap1.EditOverlay.CanAddVertex = false;
    winformsMap1.EditOverlay.CanRemoveVertex = false;
    winformsMap1.EditOverlay.CanReshape = false;
    winformsMap1.EditOverlay.CanResize = false;
    winformsMap1.EditOverlay.CanRotate = false;
    //Sets the edit overlay so that its features are editable.
    winformsMap1.EditOverlay.CalculateAllControlPoints();

    //Sets the extent of the map to the bounding box of the features of the EditOverlay.
    winformsMap1.CurrentExtent = winformsMap1.EditOverlay.EditShapesLayer.GetBoundingBox();
    winformsMap1.EditOverlay.EditShapesLayer.Close();

    winformsMap1.Refresh();

 



 



I saw your last request after publishing my answer. I will keep this post for everybody to take advantage. Above, I show how to add the features from shapefile to EditOverlay, if you want to add them to your own InMemoryFeatureLayer, it is basically the same principle, EditOverlay.EditShapesLayer being itself an InMemoryFeatureLayer type. Thank you.