ThinkGeo.com    |     Documentation    |     Premium Support

Need help to color point featureLayer

Hi


When adding points to layer in runtime, i can't get color by value to work. If I set the default style the map shows the points, but i would like to give each point af color by value:


Anybody any idea whats wrong....




(well clipboard is not working well on this forum :() long live Notepad




 


 


 


 


        private void Form1_Load(object sender, EventArgs e)

        {

            mapControl.MapUnit = GeographyUnit.DecimalDegree;

            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"C:\Program Files\ThinkGeo\Map Suite Desktop Evaluation Edition 3.0 (BETA)\Samples\SampleData\Data\Countries02.shp");


            InMemoryFeatureLayer pointLayer = new InMemoryFeatureLayer();

            //pointLayer.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Red), 5);


            

            pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay pointOverlay = new LayerOverlay();


            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County2;

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


            LayerOverlay layerOverlay = new LayerOverlay();


            ValueStyle valueStyle = new ValueStyle();

            valueStyle.ColumnName = "WINDSPEED";

            valueStyle.IsActive = true;

            valueStyle.ValueItems.Add(new ValueItem("0", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("1", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("2", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("3", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("4", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("5", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("6", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("7", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

            valueStyle.ValueItems.Add(new ValueItem("9", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));

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


            pointOverlay.Layers.Add("PointLayer", pointLayer);

            layerOverlay.Layers.Add(worldLayer);


            

            mapControl.Overlays.Add(layerOverlay);

            mapControl.Overlays.Add("PointOverlay", pointOverlay);  


            mapControl.CurrentExtent = new RectangleShape(0, 78, 30, 26);


            mapControl.Refresh();

        }




        private void btnInsertPoints_Click(object sender, EventArgs e)

        {

            double longStep = (9.3854 - 8.4) / 10.0;

            double latStep = (56.3780 - 55.5595) / 10.0;


            mapControl.Overlays["PointOverlay"].Lock.EnterWriteLock();

            try

            {

                InMemoryFeatureLayer pointLayer = (InMemoryFeatureLayer)mapControl.FindFeatureLayer("PointLayer");


                double latidude = 55.5595;


                for (int i = 0; i < 10; i++)

                {

                    double longitude = 9.3695;

                    for (int y = 0; y < 10; y++)

                    {

                        Feature feature = new Feature(longitude, latidude, "" + i + ":" + y);

                        

                        feature.ColumnValues.Add("WINDSPEED", i.ToString());

                        

                        pointLayer.InternalFeatures.Add("" + i + ":" + y, feature);

                        longitude += longStep;


                    }

                    latidude += latStep;

                }

            }

            finally

            {

                mapControl.Overlays["PointOverlay"].Lock.ExitWriteLock();

            }


            mapControl.Refresh();

            btnInsertPoints.Enabled = false;

        }

    }



Lars,


Thanks for your post and code!
 
You missed one thing in your application code; you have to add the feature source column when you created the InMemoryFeaturelayer.
 
Try the following code:
 

private void DisplayMap_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
            ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"C:\Program Files\ThinkGeo\Map Suite Desktop Full Edition 3.0 (BETA)\Samples\SampleData\Data\Countries02.shp");

            FeatureSourceColumn column = new FeatureSourceColumn("WINDSPEED", "string", 10);
            Collection<FeatureSourceColumn> columns = new Collection<FeatureSourceColumn>();
            columns.Add(column);

            InMemoryFeatureLayer pointLayer = new InMemoryFeatureLayer(columns,new Feature[]{});

            pointLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            LayerOverlay pointOverlay = new LayerOverlay();

            worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.County2;
            worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            LayerOverlay layerOverlay = new LayerOverlay();

            ValueStyle valueStyle = new ValueStyle();
            valueStyle.ColumnName = "WINDSPEED";
            valueStyle.IsActive = true;
            valueStyle.ValueItems.Add(new ValueItem("0", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 1)));
            valueStyle.ValueItems.Add(new ValueItem("1", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 2)));
            valueStyle.ValueItems.Add(new ValueItem("2", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 3)));
            valueStyle.ValueItems.Add(new ValueItem("3", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Blue), 4)));
            valueStyle.ValueItems.Add(new ValueItem("4", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Red), 1)));
            valueStyle.ValueItems.Add(new ValueItem("5", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Red), 2)));
            valueStyle.ValueItems.Add(new ValueItem("6", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Red), 3)));
            valueStyle.ValueItems.Add(new ValueItem("7", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Red), 4)));
            valueStyle.ValueItems.Add(new ValueItem("9", new PointStyle(PointSymbolType.Circle, new GeoSolidBrush(GeoColor.StandardColors.Red), 5)));
            pointLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(valueStyle);

            pointOverlay.Layers.Add("PointLayer", pointLayer);
            layerOverlay.Layers.Add(worldLayer);


            winformsMap1.Overlays.Add(layerOverlay);
            winformsMap1.Overlays.Add("PointOverlay", pointOverlay);

            winformsMap1.CurrentExtent = new RectangleShape(0, 78, 30, 26);

            winformsMap1.Refresh();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            double longStep = (9.3854 - 8.4) / 10.0;
            double latStep = (56.3780 - 55.5595) / 10.0;

            winformsMap1.Overlays["PointOverlay"].Lock.EnterWriteLock();
            try
            {
                InMemoryFeatureLayer pointLayer = (InMemoryFeatureLayer)winformsMap1.FindFeatureLayer("PointLayer");

                double latidude = 55.5595;

                for (int i = 0; i < 10; i++)
                {
                    double longitude = 9.3695;
                    for (int y = 0; y < 10; y++)
                    {
                        Feature feature = new Feature(longitude, latidude, "" + i + ":" + y);

                        feature.ColumnValues.Add("WINDSPEED", i.ToString());

                        pointLayer.InternalFeatures.Add("" + i + ":" + y, feature);
                        longitude += longStep;

                    }
                    latidude += latStep;
                }

                pointLayer.BuildIndex();
            }
            finally
            {
                winformsMap1.Overlays["PointOverlay"].Lock.ExitWriteLock();
            }

            winformsMap1.Refresh();
        }

 

Thanks.
 
Any more questions just let me know.
 
Yale


Thanks for help, that make the difference


/Lars




 Lars, 
  
 Thanks for letting me know your progress! 
  
 Any more questions just let me know. 
  
 Thanks. 
  
 Yale