ThinkGeo.com    |     Blog    |     Wiki    |     Support

Customstyle not working

Hi,


I am trying to display image based on some status. So I have defined valuestyle as below (commented); but I could not see any image; So I modified code to atleast show some symbol, still no luck. Am I doing anything wrong here?


 


Map1.MapUnit = GeographyUnit.DecimalDegree;            

            Map1.CurrentExtent = new RectangleShape(4.41672665322312, 50.884346665835, 4.43487330827975, 50.8778708746709);



            ServerLayerOverlay serverLayerOverlay = new ServerLayerOverlay("Sylvia", "SilverlightMapConnector1");

            Map1.Overlays.Add(serverLayerOverlay);



//            Map1.Refresh();



            InMemoryFeatureLayer featureLayer = new InMemoryFeatureLayer();



            ValueStyle FeatureStyle = new ValueStyle {ColumnName = "Status"};



            //PointStyle okStyle = new PointStyle(new GeoImage(new Uri("/Theme/PTZOk.png", UriKind.RelativeOrAbsolute)));

            //PointStyle eventStyle = new PointStyle(new GeoImage(new Uri("/Theme/PTZEvent.png", UriKind.RelativeOrAbsolute)));

            //PointStyle alarmStyle = new PointStyle(new GeoImage(new Uri("/Theme/PTZAlarm.png", UriKind.RelativeOrAbsolute)));            



            PointStyle okStyle = new PointStyle(PointSymbolType.Square, new GeoSolidBrush(GeoColor.SimpleColors.Blue), new GeoPen(GeoColor.SimpleColors.BrightBlue), 10);

            okStyle.RotationAngle = 45;            



            PointStyle eventStyle = new PointStyle(PointSymbolType.Square, new GeoSolidBrush(GeoColor.SimpleColors.Yellow), new GeoPen(GeoColor.SimpleColors.BrightYellow), 10);

            okStyle.RotationAngle = 45;



            PointStyle alarmStyle = new PointStyle(PointSymbolType.Square, new GeoSolidBrush(GeoColor.SimpleColors.Red), new GeoPen(GeoColor.SimpleColors.BrightRed), 10);

            okStyle.RotationAngle = 45;



            FeatureStyle.ValueItems.Add(new ValueItem("Ok", okStyle));

            FeatureStyle.ValueItems.Add(new ValueItem("Event", eventStyle));

            FeatureStyle.ValueItems.Add(new ValueItem("Alarm", alarmStyle));

            

            featureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Clear();

            featureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(FeatureStyle);

            featureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;



            LayerOverlay layerFeatureOverlay = new LayerOverlay();

            layerFeatureOverlay.Layers.Add(featureLayer);

            Map1.Overlays.Add("layerFeatureOverlay", layerFeatureOverlay);



            Feature pointFeature = new Feature(new Vertex(4.42007,50.88026));

            pointFeature.ColumnValues["Status"] = "Alarm";

                        



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

            Map1.Overlays["layerFeatureOverlay"].Refresh();



            Map1.Refresh();


-Muneswar



 Muneswar,


I guess you’ve put the image in the Silverlight project, and its “Build Action” is “Content”. In other words, the image is in “.xap” file after building. It is a problem that the code for reading the image is in SilverlightEdition.dll, it can just read the file embedded in it, unable to read the file from “.xap” file of the Silverlight project.   The workaround is that we put the “image” under Asp.net project which uses “SilverlightMapConnector.dll”, exactly under “ClientBin” folder, and then we can read it properly. The attached is a demo, please check it out. 


 Here is the screenshot of the demo. You might find an issue with 6.0.0 that the icons disapears under certain extents after zooming of panning. We are still working on it. 




Thanks,


Bai





PointStyleDemo.zip (27.2 KB)

Thanks for your reply;


I have not checked the solution yet; but wondering why it is not even rendering symbols though my intension is to render image; Can you please look at the code and see why it is not rendering symbols (PointStyle eventStyle = new PointStyle(PointSymbolType.Square....)


-Muneswar



Bai, 
  
 Build action is resource and hence silverlight should be able to load the image; I am not sure why it is not working still. I am using server overlay and trying to render image on top of raster layer.

Also, I am adding the image in silverlight project and not asp.net host project

I myself got it working. we need to add columns for the feature layer when we are using custom styles.  
  
 InMemoryFeatureLayer featureLayer = new InMemoryFeatureLayer(); 
 if(!featureLayer.IsOpen) 
 { 
        featureLayer.Open(); 
 } 
 featureLayer.Columns.Add(new FeatureSourceColumn("Status"));

Hello Muneswar, 
  
 I’m glad it’s working and thanks for sharing your experience. Just feel free to let us know your problems. 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 I hold the valid full license and I do not know how to raise the formal support ticket.  
  
 Though I could solve the above mentioned problem, I am facing another issue where respective image is not being rendered when the value for the column changes in the run time; when I change the value in the code and run the application it renders the respective image; but when the value is changed in the run time (WCF service pushes this value) it is not rendering the image and showing nothing; but when I zoom in & out I could see the image on the map; Another observation is that Map suite GeoImage class is downloading the image every time I change the column value; 
  
 Please help me to resolve this issue; 
  
 Thanks - 
 Muneswar

Hello Menswear, 
  
 For create a ticket, you can log in the helpdesk.thinkgeo.com, then you will find out there is a "New Ticket", click it and select the product to use for this ticket like choose sliverlight edition. Then write the subject and any description, if you can provide any sample or images can help us recreate the problem, please use the attachment. 
  
 Regards, 
  
 Gary