ThinkGeo.com    |     Documentation    |     Premium Support

Fixed text on a layer

Hello,


I can set the text of the features of a specific layer with the column values of shape file as -


 



 saLayer.ZoomLevelSet.ZoomLevel12.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("ZCTA5CE10", "Arial", 8, DrawingFontStyles.Italic, GeoColor.StandardColors.Black, 3, 3);

But, I want to set a fixed text for a paricular layer for a particular zoom level.


e.g, saLayer.ZoomLevelSet.ZoomLevel12 ==> I want to show the whole layer with a fixed text like "This is my sales area".

Would you please suggest how to do that?


Thank you

shwe



shwe,


 
Thanks for you post, you have a couple options to accomplish what you want.  The approach depends on the answer to the following question.  Do you want the label to move when you pan the map or do you want the label placed in a fixed position on the map regardless of the panning?
 
Judging by your question I'm guessing that you do want the label to be on top of the entire territory and have the label move when the map is panned.  To accomplish this I would suggest getting the bounding box of the all the zip codes that make up your territory and then add this as a new feature on an InMemoryLayer which would allow you to label it just like a regular shapefile by setting the style for the zoom level(s). To get the all the zip code features for a given territory you could call the QueryTools.GetFeaturesByColumnValue method and this will return you all of the zip code shapes for that territory.  Then once you have this collection of features you would want to use the ExtentHelper.GetBoundingBoxOfItems method to get the BoundingBox shape containing all these features.  Finally once you have the bounding box feature you will want to create an InMemoryFeatureLayer to hold it and then add the new layer to the map so it will render your label.  Below is what the code would look like to accomplish this:
 

            Collection<Feature> myFeatures; 
            //Get all the zip code features for a given territory
            myFeatures = mapShapeLayer.QueryTools.GetFeaturesByColumnValue("Territory", "Territory1");
            //Create an InMemoryLaer to store are new feature that we will base our labeling on.
            InMemoryFeatureLayer TerritoryLabelLayer = new InMemoryFeatureLayer();
            //Add a column to the InMemoryFeatureLayer so we can store the value to base the label on.
            TerritoryLabelLayer.Columns.Add(new FeatureSourceColumn("Label"));
            //Get the bounding box of all the zip code features in the territory
            Feature myTerritoryBoundingBox = new Feature(ExtentHelper.GetBoundingBoxOfItems(myFeatures));
            //Set how I want to albel the Territory
            myTerritoryBoundingBox.ColumnValues.Add("Label", "My Territory Label");

            //Add the new feature to the InMemoryFeature Layer.
            TerritoryLabelLayer.EditTools.BeginTransaction();
            TerritoryLabelLayer.EditTools.Add(myTerritoryBoundingBox);
            TerritoryLabelLayer.EditTools.CommitTransaction();

            //Setup the Text Style to do the actual labeling
            TerritoryLabelLayer.ZoomLevelSet.ZoomLevel12.DefaultTextStyle = TextStyles.CreateSimpleTextStyle("Label", "Arial", 8, DrawingFontStyles.Italic, GeoColor.StandardColors.Black, 3, 3);
            //Add Your Territory Label Layer to the overlay so it will render (Make sure you add it after your zip code layer otherwise it will be covered up).

            MyOverlay.Layers.Add(TerritoryLabelLayer);

If you don't want the label to pan with the map then you would want to look at adding your own AdornmentLayer that would act like a title for the map and always be in a fixed place.

I hope this code helps, but please let us know if you have any questions or run into any problems.

Thanks!



Thank you Clint.


It works.


shwe



You are welcome and it worked for you!