ThinkGeo.com    |     Documentation    |     Premium Support

Findout the name of a feature when customercolumnfetchevent is fired

hi


 


actually i am working on an asp.net project in which i am displaying a map of a country only. there are two drop down lists from which user will select the name of feature i.e a new york and from other dropdown list , user will select the data to populate on that farticular feature on the map. for example ppopulation, i want to change the color of that particular feature depending upon some conditions, on the map. hope you  understand what i want to say.


i studied documentation on  mapsuite and its web samples, and now i'm able to display a simple map. i have some questions...


1.  i want to ask that how can i findout the name of the feature when  customer column fetch event is fired, as it gives the id and column name  only. i need to know its name also . as i am new mapsuite user so  please suggest me some solution.


2. how can i zoom to a particular feature giving by user from dropdown list.?


3. how can i change the fill color of that feature only..?


i have studied your mapsuite web samples. they helped me a lot. 


please help me as soon as possible. 


Thanks



 


 


Hi Ahsan,


Thanks for evluating Map Suite products and welcome to the support form. Please check the anwsers as following:


#1:  I think the feature columns have included all the properties of the current feature. I guess you may notice the “Feature” class, here are some important properties or methods : 


• Feature ID: if feature is from a featuresource such as ShapeFileFeatureSource, the id value is assigned to the current record  index. If the feature is a new one, then its value is a guid by default.


• columnValues: this property is the list of keyvalue pair which included all the information which can descript this feature. Such as the keys “CITY_NAME”,”Polulation”…


• GetWellKnownBinary(): this method can get the current features shape binary.


#2:  Once we get a particular feature, we can get its bounding box which is a property of feature. Then, we just assigned the bound box to the CurrentExtent of the map to finish the “zoom to”.


#3:  we can do it with the help of InMemoryFeatureLayer which is always useful as a temporary layer. After we defined the layer style such as what’s color filled, what we need to do is just adding features into the layer. More details please see our installed sample Samples=> DataProviders=> Create an InMemoryFeatureLayer in web edition.


 


Any problem please feel free to let us know and hope you will have a good journey on Map Suite.


 


Thanks,


Johnny


 

 



thanks for replying .


actually i was out of scene since last weak. 


now i am able to zoom in to a particular feature as you guided me, but i didn't get the idea that how can i change the color of that particular feature depending on some conditions. please provide me an example if you can. 


another problem is that when i use the inmemoryfeature layer and then add my layers to the custom overlay then information which is been displayed on the layers is hided by the top most layer. i want to display that information also.


and third problem is that i have a button and in the click event of that button i want to show the result of the user activities as i have told you that initially i will show the map of Pakistan then user will select the area from a dropdownlist, from another droplist he will select the datatype like populationo to be displayed on the map. then he will click a button , in tthe click event of the button i want to show the result of user activity. problem is that when i do so then click event is not been considered and same map is displayed by the browser. is there any buffer maintained by mapsuite? please solve this problem .


and last one is that i want make the graph clickable, i have seen your sample code but it didn't help me because it is hardcoded , when user clicks on a particular country then just 1 level of zoom is performed. i want to make it generic so that when  each time user clicks the next level of that particular feature is been displayed.  provide me some code.


thanks



reply me soon please so that i can proceed my work…

somebody help me please

 Hi Ahsan, 


Sorry for the long delay, please check the answers as following: 


For the question one: we have value style can manage this, this style allows you to match a value with data in the feature to determine how to draw that feature. You can refer HowDoISamples--->Styles--->Draw a feature based on a value and Draw features based on values to know how to use this style. 


Question two: I guess it’s caused by the sequence of the layers which were added into the map. Such as the basic layer should be added at first, and then added the other layers from bottom to top. The codes should be like this:


Map1.CustomOverlays.Add(googleOverlay);


LayerOverlay staticOverlay = new LayerOverlay();


              staticOverlay.Layers.Add("Countries", CountriesLayer);


              staticOverlay.IsBaseOverlay = false;


              Map1.CustomOverlays.Add(staticOverlay);


Also please don’t forget to set the IsBaseOverlay perperty as false if the overlay is not the basic overlay.


Question 3: Let me guess you are using the InMemeryFeature as the container included the selected features from users and you want to refresh the layer when clicking a button. I am not sure if you have cleared the old features in the InMemeryFeature layer before added the result features into it. Can you please provide some codes from you?


 Question 4: I am not sure what your scenario is, but as you said the question is only zoom level 1 is performed. So I guess the reason is your code didn’t apply the specified style from  zoom level 1 to 20. Such as the below partial code:


inMemoryLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1;


inMemoryLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;


The first line means the zoomlevel one would take the “AreaStyles.Country1” style to perform.


The second line means you want to apply the zoomlevel 1 style “AreaStyles.Country1” from zoomlevel 1 to 20.


 Hope that information would be help.


If any questions, please feel free to let us know.


 


Thanks,


Johnny




Thanx for replying Johny.


as i am new user of mapsuite so i am sure i have made kind of childish mistakes in my code. please correct these.


i alredy have used value style to change background colour of my map but in my case i first detect the user selected area  (source code file) now how can i apply value style on that particular area only. if map suite provide this functionallity then let me know.


and click event problem as i mentioned in previous post also needs your attention, please take a look on my code for that pse also.


i am attaching my source code file . please view and modify it according to my requirements. i have mentioned my problems  in sourse code file. 


 


and 1 more thing how can i include my .dbf file in my sql table ?, actually i have to write them manually in my database.


thanks 


ahsan



New_Text_Document.txt (23.7 KB)

You are so welcome, ahsan. Anything problemed please feel free to post it here. Following are the anwsers, please check it out:


#1, map suite does provide the functionality to render different style with value style. Please check the installation sample "Samples\styles\DrawAFeatureBasedOnAValue" or "Samples\styles\DrawFeaturesBasedOnValues" for detail. Both of them are based on value style. Maybe also you can try "ClassBreakStyle" and "RegExStyle" as well.


 


#2. For the click event, I didn't find any incorrect codes, but can you check if there is anything wrong withe map's current extent, or if the current zoomlevel is bigger than 6, can you check you just apply the style from 6 to 20 in the provinceDivisionLayer?


 


#3. A tool is provided to do the transformation, it can be avaiable at sharpgis.net/file.axd?file=SqlSpatialTools_build3413.zip. More detail, please check the post gis.thinkgeo.com/Support/Dis...ault.aspx.


 


Thanks,


Johnny


 



thats your greatness… 
  
 johny I didn’t get r answer no 2. can you please explain a bit. and another question  is that , as I have shown you my code , I have redraw my map in the click event from the beginning .is itneeded or the previous map in the page load event can be considered here for further processing.? 
 please clear my confusion thoroughly. 
 and last thing I want to apply value style on the inmemoryfeature layer. I have write some code for that purpose but does not work showing bellow 
   
protected void Button1_Click(object sender, EventArgs e)
        {
            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays[“StaticOverlay”];
            ShapeFileFeatureLayer provinceLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers[“ProvinceLayer”];
            ShapeFileFeatureLayer divisionLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers[“DivisionLayer”];
            InMemoryFeatureLayer provinceDivisionLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers[“ProvinceDivisionLayer”];
            string Provinces = ProvincesList.SelectedValue;
            foreach (LayerOverlay overlay in Map1.CustomOverlays)
            {
                foreach (FeatureLayer layer in dynamicOverlay.Layers)
                {
                    if (layer == provinceLayer)
                    {
                        provinceLayer.Open();
                        Collection<Feature> features = provinceLayer.QueryTools.GetFeaturesByColumnValue(“NAME_1”, Provinces);
                        provinceLayer.Close();

                        if (features.Count > 0)
                        {
                            Map1.CurrentExtent = features[0].GetBoundingBox();

                            divisionLayer.Open();
                            Collection<Feature> divisionFeatures = divisionLayer.QueryTools.GetFeaturesIntersecting(features[0], ReturningColumnsType.AllColumns);
                            divisionLayer.Close();

                            provinceDivisionLayer.InternalFeatures.Clear();
                            List<string> featureName = new List<string>();
                            foreach (Feature feature in divisionFeatures)
                            {
                                provinceDivisionLayer.InternalFeatures.Add(feature);
                                featureName.Add(feature.ColumnValues[“NAME_2”]);
                                TextBox1.Text += featureName;
                            }
                            
                            //-------------- apply value style-----------------------//
                            //----------------------set background color of map on bases of data attribyte-----------------//
                            //int featureCount = provinceNames.Count();

                            int featureCount = provinceDivisionLayer.InternalFeatures.Count();
                            TextBox2.Text = featureCount.ToString();
                            Collection<GeoColor> colorsInFamily = GeoColor.GetColorsInHueFamily(GeoColor.StandardColors.Green, featureCount);
                            ValueStyle valueStyle = new ValueStyle();
                            valueStyle.ColumnName = “NAME_2”;

                            for (int j = 0; j < featureCount; j++)
                            {
                                valueStyle.ValueItems.Add(new ValueItem(featureName[j], new AreaStyle(new GeoSolidBrush(colorsInFamily[j]))));
                                
                            }
                            divisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);

                            //--------------------------------end----------------------------------------------------------//*/

                           }
                    }
// same process will be repeated here? will it work?
                    else if (layer == divisionLayer)
                    {
                        //Collection<Feature> features = divisionLayer.QueryTools.GetFeaturesByColumnValue(“NAME_2”, Provinces);

                    }
                }



 
 modify my code as you need…! 
 and another thing is I know the way how to populate the data on the map but how  can I populate the population on the map in this click event.? 
 didn’t get any idea. please write me some code for that purpose also. 
 thanks 
 ahsan 
  


Sorry please consider in value style portion  
 [ provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);]  instead of  
 [ divisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);] 
 but its not working with that modification also. 
 thanks

Ahsan, 
  
 The answer #2 above means making sure your map extent is in a range from Zoomlevel 6 to 20, as your provinceDivisionLayer  can only show in this range. We can notice the code: Map1.CurrentExtent = features[0].GetBoundingBox(); in your click event, So can you common out the other code except this to see if the map would zoom to here? 
  
 You needn’t care about the previous map in the next post backs, because we can save the latest map status on server. 
  
 As the reason why your layer with value style didn’t show, I  also didn’t find any confused code in the click event but some layers which are defined in the Page_load event, here is what I am confused: 
 • In provinceLayer: In the customStyles, a same type cannot be added. Such as two textstyle shouldn’t be added at same time, otherwise, the second one would overlap the previous. The same situation is in districtLayer where two AreaStyles were added in. Besides, the provinceLayer’s style only apply from 1 to 6 which means this layer would not be shown if the zoom level larger than 6. So, I am not sure if this is you want.   
 • DefaultAreaStyle.RequiredColumnNames: Also, if we are using the Custom Styles, we can’t use the DefaultStyle at the same style type and you can see the runtime error when you add both defaultareastyle and an area style in custom style. So the below codes from you is not suitable and the second line should be avoid. districtLayer.ZoomLevelSet.ZoomLevel06.CustomStyles.Add( AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(50, GeoColor.SimpleColors.BrightRed))); 
 districtLayer.ZoomLevelSet.ZoomLevel06.DefaultAreaStyle.RequiredColumnNames.Add("Test1"); 
 So you can review your code to avoid the above problems and then try again to see if they are the root of the issue. 
  
 As the last question you asked, we are not very clear for “populate the population”. So can you provide more descriptions about this? 
  
 Thanks 
  
 Gary

thanks for replying!


my question is that how can we fulfill the purpose of below statement using custom styles. 


provinceDivisionLayer.FeatureSource.CustomColumnFetch += new EventHandler<CustomColumnFetchEventArgs>(FeatureSource_CustomColumnFetch);

[districtLayer.ZoomLevelSet.ZoomLevel06.DefaultAreaStyle.RequiredColumnNames.Add("Test1");]


it is used to display custom data on map. as you said this statement is creating problem [DefaultAreaStyle.RequiredColumnNames.Add("Test1")]. then what is the sytax of using custom data in custom styles?  i want to use custom data and value style at same time. thats why i tried to write the above statement using custom styles but i think mapsuite does not provide this functionallity...... if yes then plz let me know. please provide me coding statement for above purpose.


2nd , in my previous posts i have uploaded a file in which all my project work is written , in that file i have redraw the map from the beginning as we do in the load event. that approach is correct or not? i have reject that due some issues like map was not updated in that click event and map of load event was shown again. what you suggest me about that? 


3rd, in statement  Map1.CurrentExtent = features[0].GetBoundingBox(), what is features[0]? plz explain.


4th ,as you suggest i made sure the zoom level of inmemoryfeaturelevel from 1 to 20  . but got the same problem value style is not been applied. then on further analysis , i came to know that value style is been applied not ony on the inmemoryfeatr layer but also on anyother layer in click event. my code is


 


protected void Button1_Click(object sender, EventArgs e)

        {

            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["StaticOverlay"];

            ShapeFileFeatureLayer provinceLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers["ProvinceLayer"];

            ShapeFileFeatureLayer divisionLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers["DivisionLayer"];

            InMemoryFeatureLayer provinceDivisionLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["ProvinceDivisionLayer"];





            List<string> featureName = new List<string>();

            string Provinces = ProvincesList.SelectedValue;



            foreach (FeatureLayer layer in dynamicOverlay.Layers)

            {



                if (layer == provinceLayer)

                {





                    provinceLayer.Open();

                    Collection<Feature> features = provinceLayer.QueryTools.GetFeaturesByColumnValue("NAME_1", Provinces);

                    provinceLayer.Close();

                    provinceDivisionLayer.InternalFeatures.Clear();



                    if (features.Count > 0)

                    {

                        Map1.CurrentExtent = features[0].GetBoundingBox();



                       divisionLayer.Open();

                       Collection<Feature> divisionFeatures = divisionLayer.QueryTools.GetFeaturesIntersecting(features[0], ReturningColumnsType.AllColumns);

                       divisionLayer.Close();



                    

                        foreach (Feature feature in features)

                        {

                            provinceDivisionLayer.InternalFeatures.Add(feature);

                            featureName.Add(feature.ColumnValues["NAME_1"]);

                            TextBox1.Text += featureName;

                        }

                    }

                   

                }

                else if (layer == divisionLayer)

                {

                    divisionLayer.Open();

                    Collection<Feature> divisionFeatures = divisionLayer.QueryTools.GetFeaturesByColumnValue("NAME_2", Provinces);

                    divisionLayer.Close();

                    provinceDivisionLayer.InternalFeatures.Clear();



                    if (divisionFeatures.Count > 0)

                    {

                        Map1.CurrentExtent = divisionFeatures[0].GetBoundingBox();

                        provinceDivisionLayer.InternalFeatures.Clear();

                        foreach (Feature feature in divisionFeatures)

                        {

                            provinceDivisionLayer.InternalFeatures.Add(feature);

                            featureName.Add(feature.ColumnValues["NAME_2"]);

                            TextBox1.Text += featureName;

                        }

                    }



                }

               



            }

            

            if (provinceDivisionLayer.InternalFeatures.Count() > 0)

            {

               //--------------populate data on map---------------------------//

               provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(TextStyles.CreateSimpleTextStyle("Test", "Arial", 10, DrawingFontStyles.Regular, GeoColor.StandardColors.Red, 0, -12));

                provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level06;

                provinceDivisionLayer.DrawingMarginPercentage = 50;



                // -----------event rigistertom  for custom data usage--------------------//

                provinceDivisionLayer.FeatureSource.CustomColumnFetch += new EventHandler<CustomColumnFetchEventArgs>(FeatureSource_CustomColumnFetch);

                provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.RequiredColumnNames.Add("Test");

                

                //-------------------------------end------------------------------------------//



                //-------------- apply value style-----------------------//



                //int featureCount = provinceNames.Count();



                int featureCount = provinceDivisionLayer.InternalFeatures.Count();

                TextBox2.Text = featureCount.ToString();

                Collection<GeoColor> colorsInFamily = GeoColor.GetColorsInHueFamily(GeoColor.StandardColors.Green, featureCount);

                ValueStyle valueStyle = new ValueStyle();

                valueStyle.ColumnName = "NAME_1";

  

                for (int j = 0; j < featureCount; j++)

                {

                    valueStyle.ValueItems.Add(new ValueItem(featureName[j], new AreaStyle(new GeoSolidBrush(colorsInFamily[j]))));



                }

                provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);

                provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                dynamicOverlay.Layers.Add(provinceDivisionLayer);

                

                dynamicOverlay.Redraw();

                //--------------------------------end----------------------------------------------------------//



            }

can we apply value style on the inmemryfeature layer?


last , in my last post  from populate the population i meant using population data on the map. and as you can see in my click event i have also tried to use custom data but in vain.............. please correct my code and please post that corrected code. can you reply me a bit earliar?


thanks


 



Hi Ahsan, 


For the first question: sorry we guess we make mistake at last reply. The way you are using is correct. DefaultAreaStyle.RequiredColumnNames.Add("Test1") can be work in custom styles. So, keep you codes on those.


#2: On the load event, we noticed you wrap your map loading in the “!ispostback” condition which is very correct and changing the map style in client event is also can work. But what we are confused is why the map of load event is fired again?


#3: From your code, we can know the features[0] should be the province feature which user selected.


#4: In the client event, there are two places where the layer is “provinceLayer” and “divisionLayer” you add feature into “provinceDivisionLayer”. Now, what we guess is the feature from “provinceLayer”  would only include column name “NAME_1” and the feature from “divisionLayer”  would only include column name “NAME_2”. So, the problem is at the end of the click event, you only apply the ValueStyle on the features where ColumnName is “NAME_1”, but the ValueItem’s values are from a  featureName set which both “NAME_1” and “NAME_2” are included. So, we suggest you can try setting a breakpoint after added all valueItem and then check the provinceDivisionLayer features and valueItems to see if them are matched.


#5: we now got what you mean and we created a simple demo similar with yours.


If your problem(s) persists, it will be best if you can send us a simple running project, as it’s a little difficult for us to recreate your questions just based on your codes. If the shape files are two big, we hope you can cut off most of them.


Demo code: 



protected void Page_Load(object sender, EventArgs e)

        {

            if (!Page.IsPostBack)

            {

                Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));

                Map1.CurrentExtent = new RectangleShape(-125, 72, 50, -46);

                Map1.MapUnit = GeographyUnit.DecimalDegree;

 

                ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath("~/SampleData/world/cntry02.shp"));

                worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                worldLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green)));

 

                LayerOverlay staticOverlay = new LayerOverlay();

                staticOverlay.IsBaseOverlay = false;

                staticOverlay.Layers.Add(worldLayer);

                Map1.CustomOverlays.Add(staticOverlay);

            }

        }

 

        void FeatureSource_CustomColumnFetch(object sender, CustomColumnFetchEventArgs e)

        {

            // TODO: the population calculate.

            e.ColumnValue = "1000000";

        }

 

        protected void Button1_Click(object sender, EventArgs e)

        {

            ShapeFileFeatureLayer worldLayer = ((Map1.CustomOverlays[0]) as LayerOverlay).Layers[0] as ShapeFileFeatureLayer;

            worldLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(TextStyles.Canal1("CNTRY_NAME"));

            worldLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(TextStyles.Country2("Population"));

            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.RequiredColumnNames.Add("Population");

            worldLayer.FeatureSource.CustomColumnFetch += new EventHandler<CustomColumnFetchEventArgs>(FeatureSource_CustomColumnFetch);

        }

Best regards,


Thanks,


Gary


 



gary , valuestyle is not been applied on the inmemoryfeature layer  only. i have made sure that when i applied value style on province layer  in client event then it works but on inmemory featr layer, it does not. i am sending my project on "noreply@thinkgeo.com". plz check my project keeping in mind the following purposes


1. apply value style on inmemoryfeaturelayer.


2. apply custom data on inmemoryfeature layer.


3. i have written a map click event but its not working. plz check it out also.


moreover i am also showing you my code on this post as follows



protected void Button1_Click(object sender, EventArgs e)

        {

            LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["StaticOverlay"];

            ShapeFileFeatureLayer provinceLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers["ProvinceLayer"];

            ShapeFileFeatureLayer divisionLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers["DivisionLayer"];

            InMemoryFeatureLayer provinceDivisionLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["ProvinceDivisionLayer"];





            List<string> featureName = new List<string>();

            string Provinces = ProvincesList.SelectedValue;

            bool flage1 = false;

            bool flage2 = false;

            foreach (FeatureLayer layer in dynamicOverlay.Layers)

            { 



                if (layer == provinceLayer)

                {





                    provinceLayer.Open();

                    Collection<Feature> features = provinceLayer.QueryTools.GetFeaturesByColumnValue("NAME_1", Provinces);

                    provinceLayer.Close();

                    provinceDivisionLayer.InternalFeatures.Clear();



                    if (features.Count > 0)

                    {

                        Map1.CurrentExtent = features[0].GetBoundingBox();



                       divisionLayer.Open();

                        Collection<Feature> divisionFeatures =  divisionLayer.QueryTools.GetFeaturesWithin(features[0],  ReturningColumnsType.AllColumns);

                       divisionLayer.Close();



                    

                        foreach (Feature feature in divisionFeatures)

                        {

                            provinceDivisionLayer.InternalFeatures.Add(feature);

                            featureName.Add(feature.ColumnValues["NAME_2"]);

                            TextBox1.Text += featureName;

                        }

                        flage1 = true;

                        break;

                    }

                    

                }

                else if (layer == divisionLayer)

                {

                    divisionLayer.Open();

                     Collection<Feature> divisionFeatures =  divisionLayer.QueryTools.GetFeaturesByColumnValue("NAME_2", Provinces);

                    divisionLayer.Close();

                    provinceDivisionLayer.InternalFeatures.Clear();



                    if (divisionFeatures.Count > 0)

                    {

                        Map1.CurrentExtent = divisionFeatures[0].GetBoundingBox();

                        provinceDivisionLayer.InternalFeatures.Clear();

                        foreach (Feature feature in divisionFeatures)

                        {

                            provinceDivisionLayer.InternalFeatures.Add(feature);

                            featureName.Add(feature.ColumnValues["NAME_2"]);

                            TextBox1.Text += featureName;

                        }

                        flage2 = true;

                        break;

                    }

                   

                }

               



            }

            

            if (provinceDivisionLayer.InternalFeatures.Count() > 0)

            {

               //--------------populate data on map---------------------------//

                 //provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(TextStyles.CreateSimpleTextStyle("Test",  "Arial", 10, DrawingFontStyles.Regular, GeoColor.StandardColors.Red, 0,  -12));

               //provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

               //provinceDivisionLayer.DrawingMarginPercentage = 50;



                // -----------event rigistertom  for custom data usage--------------------//

                 //provinceDivisionLayer.FeatureSource.CustomColumnFetch += new  EventHandler<CustomColumnFetchEventArgs>(FeatureSource_CustomColumnFetch);

                //provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.RequiredColumnNames.Add("Test");

                

                //-------------------------------end------------------------------------------//



                //-------------- apply value style-----------------------//



             

               int featureCount = provinceDivisionLayer.InternalFeatures.Count();

                Collection<GeoColor> colorsInFamily =  GeoColor.GetColorsInHueFamily(GeoColor.StandardColors.Green,  featureCount);

               ValueStyle valueStyle = new ValueStyle();

             

                if (flage1 == true)

                {

                    //int featureCount = provinceDivisionLayer.InternalFeatures.Count();

                    TextBox2.Text = featureCount.ToString();

                    

                        valueStyle.ColumnName = "NAME_2";

                    

                        

                     //valueStyle.ValueItems.Add(new ValueItem(featureName[0], new  AreaStyle(new GeoSolidBrush(GeoColor.StandardColors.LightGreen))));  

                    for (int j = 0; j < featureCount; j++)

                    {

                         valueStyle.ValueItems.Add(new ValueItem(featureName[j], new  AreaStyle(new GeoSolidBrush(colorsInFamily[j]))));



                    }



                    provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);

                    provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                    dynamicOverlay.Layers.Add(provinceDivisionLayer);

                    dynamicOverlay.Redraw();

                }

                

                //--------------------------------end----------------------------------------------------------//

                else if (flage2 == true)

                {

                    

                    TextBox2.Text = featureCount.ToString();

                    valueStyle.ColumnName = "NAME_2";

                     //valueStyle.ValueItems.Add(new ValueItem(featureName[0], new  AreaStyle(new GeoSolidBrush(GeoColor.StandardColors.LightGreen))));  

                    for (int j = 1; j < featureCount; j++)

                    {

                         valueStyle.ValueItems.Add(new ValueItem(featureName[j], new  AreaStyle(new GeoSolidBrush(colorsInFamily[j]))));



                    }



                    provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);

                    provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                    dynamicOverlay.Layers.Add(provinceDivisionLayer);



                    dynamicOverlay.Redraw();

                

                

                

                

                

                

                

                

                }

            }

 


 



and 1 more thing , what requirements are needed to convrt my project to MVC. ?


thanks


ahsan



protected void Button1_Click(object sender, EventArgs e) 
         { 
             LayerOverlay dynamicOverlay = (LayerOverlay)Map1.CustomOverlays["StaticOverlay"]; 
             ShapeFileFeatureLayer provinceLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers["ProvinceLayer"]; 
             ShapeFileFeatureLayer divisionLayer = (ShapeFileFeatureLayer)dynamicOverlay.Layers["DivisionLayer"]; 
             InMemoryFeatureLayer provinceDivisionLayer = (InMemoryFeatureLayer)dynamicOverlay.Layers["ProvinceDivisionLayer"]; 
  
  
             List<string> featureName = new List<string>(); 
             string Provinces = ProvincesList.SelectedValue; 
             bool flage1 = false; 
             bool flage2 = false; 
             foreach (FeatureLayer layer in dynamicOverlay.Layers) 
             {  
  
                 if (layer == provinceLayer) 
                 { 
  
  
                     provinceLayer.Open(); 
                     Collection<Feature> features = provinceLayer.QueryTools.GetFeaturesByColumnValue("NAME_1", Provinces); 
                     provinceLayer.Close(); 
                     provinceDivisionLayer.InternalFeatures.Clear(); 
  
                     if (features.Count > 0) 
                     { 
                         Map1.CurrentExtent = features[0].GetBoundingBox(); 
  
                        divisionLayer.Open(); 
                        Collection<Feature> divisionFeatures = divisionLayer.QueryTools.GetFeaturesWithin(features[0], ReturningColumnsType.AllColumns); 
                        divisionLayer.Close(); 
  
                      
                         foreach (Feature feature in divisionFeatures) 
                         { 
                             provinceDivisionLayer.InternalFeatures.Add(feature); 
                             featureName.Add(feature.ColumnValues["NAME_2"]); 
                             TextBox1.Text += featureName; 
                         } 
                         flage1 = true; 
                         break; 
                     } 
                      
                 } 
                 else if (layer == divisionLayer) 
                 { 
                     divisionLayer.Open(); 
                     Collection<Feature> divisionFeatures = divisionLayer.QueryTools.GetFeaturesByColumnValue("NAME_2", Provinces); 
                     divisionLayer.Close(); 
                     provinceDivisionLayer.InternalFeatures.Clear(); 
  
                     if (divisionFeatures.Count > 0) 
                     { 
                         Map1.CurrentExtent = divisionFeatures[0].GetBoundingBox(); 
                         provinceDivisionLayer.InternalFeatures.Clear(); 
                         foreach (Feature feature in divisionFeatures) 
                         { 
                             provinceDivisionLayer.InternalFeatures.Add(feature); 
                             featureName.Add(feature.ColumnValues["NAME_2"]); 
                             TextBox1.Text += featureName; 
                         } 
                         flage2 = true; 
                         break; 
                     } 
                     
                 } 
                 
  
             } 
              
             if (provinceDivisionLayer.InternalFeatures.Count() > 0) 
             { 
                //--------------populate data on map---------------------------// 
                //provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(TextStyles.CreateSimpleTextStyle("Test", "Arial", 10, DrawingFontStyles.Regular, GeoColor.StandardColors.Red, 0, -12)); 
                //provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                //provinceDivisionLayer.DrawingMarginPercentage = 50; 
  
                 // -----------event rigistertom  for custom data usage--------------------// 
                 //provinceDivisionLayer.FeatureSource.CustomColumnFetch += new EventHandler<CustomColumnFetchEventArgs>(FeatureSource_CustomColumnFetch); 
                 //provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle.RequiredColumnNames.Add("Test"); 
                  
                 //-------------------------------end------------------------------------------// 
  
                 //-------------- apply value style-----------------------// 
  
               
                int featureCount = provinceDivisionLayer.InternalFeatures.Count(); 
                Collection<GeoColor> colorsInFamily = GeoColor.GetColorsInHueFamily(GeoColor.StandardColors.Green, featureCount); 
                ValueStyle valueStyle = new ValueStyle(); 
               
                 if (flage1 == true) 
                 { 
                     //int featureCount = provinceDivisionLayer.InternalFeatures.Count(); 
                     TextBox2.Text = featureCount.ToString(); 
                      
                         valueStyle.ColumnName = "NAME_2"; 
                      
                          
                     //valueStyle.ValueItems.Add(new ValueItem(featureName[0], new AreaStyle(new GeoSolidBrush(GeoColor.StandardColors.LightGreen))));   
                     for (int j = 0; j < featureCount; j++) 
                     { 
                         valueStyle.ValueItems.Add(new ValueItem(featureName[j], new AreaStyle(new GeoSolidBrush(colorsInFamily[j])))); 
  
                     } 
  
                     provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle); 
                     provinceDivisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                     dynamicOverlay.Layers.Add(provinceDivisionLayer); 
                     dynamicOverlay.Redraw(); 
                 } 
                  
                 //--------------------------------end----------------------------------------------------------// 
                 else if (flage2 == true) 
                 { 
                      
                     TextBox2.Text = featureCount.ToString(); 
                     valueStyle.ColumnName = "NAME_2"; 
                     //valueStyle.ValueItems.Add(new ValueItem(featureName[0], new AreaStyle(new GeoSolidBrush(GeoColor.StandardColors.LightGreen))));   
                     for (int j = 1; j < featureCount; j++) 
                     { 
                         valueStyle.ValueItems.Add(new ValueItem(featureName[j], new AreaStyle(new GeoSolidBrush(colorsInFamily[j])))); 
  
                     } 
  
                     divisionLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle); 
                     divisionLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; 
                     dynamicOverlay.Layers.Add(divisionLayer); 
  
                     dynamicOverlay.Redraw(); 
                  
                  
                  
                  
                  
                  
                  
                  
                 } 
             } 


Hi Ahsan,


Here are the answers,


 


1.     If you want to apply “ValueStyle” on the InMemoryFeatureLayer, you must specify the columns member through the constructor as following statements:Then, you can use the ValueStyle on the InMemoryFeatureLayer.



protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                if (!Page.IsPostBack)
                {

                    Map1.MapBackground.BackgroundBrush = new GeoSolidBrush(GeoColor.FromHtml("#E5E3DF"));

                    Map1.CurrentExtent = new RectangleShape(-125, 72, 50, -46);

                    Map1.MapUnit = GeographyUnit.DecimalDegree;

                    ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(MapPath("~/SampleData/world/cntry02.shp"));

                    worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                    worldLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Green)));

                    worldLayer.Open();
                    Collection<Feature> layerFeatures = worldLayer.FeatureSource.GetAllFeatures(ReturningColumnsType.AllColumns);
                    worldLayer.Close();
                    Collection<FeatureSourceColumn> columns = new Collection<FeatureSourceColumn>();
                    foreach (string columnName in layerFeatures[0].ColumnValues.Keys)
                    {
                        columns.Add(new FeatureSourceColumn(columnName));
                    }
                    InMemoryFeatureLayer featureLayer = new InMemoryFeatureLayer(columns, new Collection<Feature>() { layerFeatures[0]});
                    featureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
                    featureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(AreaStyles.CreateSimpleAreaStyle(GeoColor.SimpleColors.Transparent, GeoColor.FromArgb(100, GeoColor.SimpleColors.Red)));

                    LayerOverlay staticOverlay = new LayerOverlay();

                    staticOverlay.IsBaseOverlay = false;

                    staticOverlay.Layers.Add(worldLayer);
                    staticOverlay.Layers.Add(featureLayer);

                    Map1.CustomOverlays.Add(staticOverlay);

                }

            }
        }
        void FeatureSource_CustomColumnFetch(object sender, CustomColumnFetchEventArgs e)
        {

            // TODO: the population calculate.

            e.ColumnValue = "300000000";

        }



        protected void Button1_Click(object sender, EventArgs e)
        {

            InMemoryFeatureLayer featureLayer = ((Map1.CustomOverlays[0]) as LayerOverlay).Layers[1] as InMemoryFeatureLayer;
            featureLayer.Open();
            ValueStyle valueStyle = new ValueStyle();
            valueStyle.ColumnName = "LONG_NAME";
            valueStyle.ValueItems.Add(new ValueItem("Finland", new AreaStyle(new GeoSolidBrush(GeoColor.GeographicColors.Lake))));
            featureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear();
            featureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);
            featureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            featureLayer.Close();
        }

        protected void Map1_Click(object sender, MapClickedEventArgs e)
        {
            string a = "";
        }


2. The custom data has been apply as beyond statements.


3. Can you send the sample file to forumSupport@thinkgeo.com? I can’t receive your email on noreply@thinkgeo.com


Regards,


Edgar


 



hay edger, i have mailed my project on forumsupport@thinkgeo.com as you suggested. please check it out.

Hi Ahsan, 
  
 Seems that we have no access to the myDatabase.mdf with the windows authentication, how could we do that? And you could modify your code first with the following steps: 
  
 1. Add columns in the InMemoryFeatureLayer constructor.  
                 Collection<FeatureSourceColumn> inMemoryFeatureLayercolumns = new Collection<FeatureSourceColumn>(); 
                 inMemoryFeatureLayercolumns.Add(new FeatureSourceColumn(“NAME_2”)); 
                 InMemoryFeatureLayer provinceDivisionLayer = new InMemoryFeatureLayer(inMemoryFeatureLayercolumns,new Collection<Feature>()); 
 2. Remove this line: dynamicOverlay.Layers.Add(provinceDivisionLayer); since you have added the layer into overlay in the page load event, there’s no need to add them again. 
  
 As for the question the Map click event didn’t work, please reference our “how do I sample => Getting Started => Add a Click Event” to do a comparison. 
  
 If it still can’t work, please provide an accessible database. 
  
 Thanks. 
 Edgar