ThinkGeo.com    |     Documentation    |     Premium Support

Creating groups of features

Hello,


I am using the following to create points on a map.  How do you select points, save them in a list (dropdownlist ect).  For example, I would like to create a group called "Colorado".  Then add the features (Aspen, Vail, Brecenridge).


Thanks, Steven


  public void CreateShapeLayersLocalData()

  {

    CreateShapLayer("ShapeLayerAspen", "38.929237", "-119.984347", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerWilmotMtn", "42.512778", "-88.181944", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerVail", "39.635757", "-106.362984", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerBreckenridge", "39.486445", "-106.043516", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerLakeTahoe", "38.929237", "-119.984347", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerParkCity", "40.659306", "-111.499828", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerSnowBird", "40.617147", "-111.820361", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);

    CreateShapLayer("ShapeLayerSolitude", "38.373038", "-110.714039", 10, PointSymbolType.Circle, GeoColor.StandardColors.Blue);


    LoopThroughShapes();

   }




  protected void CreateShapLayer(string cellName, string cellLat, string cellLong, float cellSize, PointSymbolType symbolType, GeoColor symbolColor)

  {

    InMemoryFeatureLayer addShapeLayer = new InMemoryFeatureLayer();

    addShapeLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = PointStyles.CreateSimplePointStyle(symbolType, symbolColor, cellSize);

    addShapeLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

    Map1.DynamicOverlay.Layers.Add(cellName, addShapeLayer);


    Feature pointFeature = new Feature

     (new PointShape(

      double.Parse(cellLong, CultureInfo.InvariantCulture),

      double.Parse(cellLat, CultureInfo.InvariantCulture)));


    addShapeLayer.InternalFeatures.Add(pointFeature.Id, pointFeature);

    Map1.DynamicOverlay.Redraw();

   }



Hi Steve, 
  
 The group name can be stored in ColumnValues property which is for storing attributes for Feature object, after that you can filter these features by the column values. 
  
 aspenFeature.ColumnValues.Add("Condition", "Colorado"); 
 vailFeature.ColumnValues.Add("Condition", "Colorado"); 
 brecenridgeFeature.ColumnValues.Add("Condition", "Colorado"); 
  
 A better solution for your scenario is to use ValueStyle; first of all, add all features with the filter information (i.e. group name) to one layer, set the ValueStyle to render the features differently according to the filter info, whenever the DropDownList index changed, clear the old ValueStyle items and add another ValueStyle for the new selected group name. In this way, you can make the features render differently with the help of one layer and one valuestyle; it is more convenient. 
   
 For more information about ValueStyle, please refer to our installed sample at: 
 “\Samples\CSharp Samples\Samples\Styles\DrawFeaturesBasedOnValues.aspx” 
  
 Any queries please let me know. 
  
 Thanks, 
  
 Ben

Thanks Ben, 
  
 I wasn’t very clear.  What I am trying to do is allow the end user to be able to select different points and the create a group out of it.  For example, a user may select (Aspen, Vail, Breckenridge) and name the group “MyColorado”.  Once they submit this information, I need to capture the lat and long values for which I will store in a datatable.  So is it possible to select multiple points, have them change to a different color and then get thier coordinates?  I would need to iterate through the selected list somehow? 
  
 Thanks again, Steven




 


Steven,


Here is a small sample for you. I load 3 points on the map with the same render. Whenever you select a point by clicking on it, that point will be added to a Feature Collection in Session. In that way, client can multi select the points as a group and you can either get the coordinates of those points, or iterate through the features in the list. Also if you want to highlight those points, you can either add them to a separate inMemoryLayer, or you can add another column dynamicly and use ValueStyle to render it, just what I mentioned in the last message.


Thanks,


Ben




638-GroupPoints.zip (7.66 KB)




 


Steven,


You can do it like this.


1, Add all the ski resorts to one inMemoryFeatureLayer and loop all the features within that layer


2, Within that loop, call method countyLayer.QueryTools.GetFeaturesIntersecting(oneSkiResort) to get all the county features which  intersects with that ski resort. For every return features, you can get its name from the corresponding column like feature.ColumnValue[“Name”],  also you can get the Ski Resort's name by the similar way.


Also, please have a look at the reply of the related post here.


gis.thinkgeo.com/Support/Dis...fault.aspx


Let us know if you have any issues.


 


Thanks,


Ben