IconStyle¶
Namespace: ThinkGeo.Core
This class displays an icon with text from the data of the feature.
public class IconStyle : TextStyle
Inheritance Object → Style → PositionStyle → TextStyle → IconStyle
Remarks:
You can use the IconStyle when you have an icon you want to display on the map with characters inside of that icon. For example, if you have a circular icon and you want to label the number 1-100 inside of the icon, you can use this class. You need to specify the column name where the numbers or letters will come from, as well as a font. Through various properties, you can also control the positioning of the icon, just as you would with the TextStyle.
Properties¶
IconPathFilename¶
This property gets and sets the filename and path for the image you want to use in the style.
public string IconPathFilename { get; set; }
Property Value¶
This property gets the filename and path for the image you want to use in the
style.
Remarks:
You can also optionally use the IconImage property if the image you want to use is derived from a stream.
IconImage¶
This property gets and sets the NativeImage you want to use for the image.
public GeoImage IconImage { get; set; }
Property Value¶
GeoImage
This property gets the NativeImage you want to use for the image.
Remarks:
You will typically want to use this property if your image is derived from a stream. Otherwise, you can use the IconFilePathName property to specify where the icon is located and we will handle the rest.
IconImageScale¶
This property gets and sets the scale of the image you want to draw.
public double IconImageScale { get; set; }
Property Value¶
Double
This property gets the scale of the image you want to draw.
Remarks:
This property allows you to scale the image up and down depending on how large or small you want it. It can be changed dynamically, so you could change it at every scale level to resize the bitmap based on the current scale. A scale of 1 would be the original size, while a scale of 2 would double the size. A scale of .5 would reduce the size of the image by half, and so on.
SuppressPartialLabels¶
This property gets and sets whether a partial label in the current extent will be drawn or not.
public bool SuppressPartialLabels { get; set; }
Property Value¶
Remarks:
This property provides a solution to the "cut off" label issue in Map Suite Web Edition and Desktop Edition, which occurs when multiple tiles exist. When you set this property to true, any labels outside of the current extent will not be drawn.
XOffsetInPixel¶
This property gets and sets the X pixel offset for drawing each feature.
public float XOffsetInPixel { get; set; }
Property Value¶
Single
This property gets the X pixel offset for drawing each feature.
Remarks:
This property allows you to specify an X offset. When combined with a Y offset, it is useful to allow you to achieve effects such as drop shadows, etc. There also may be times when you need to modify the location of feature data so as to better align it with raster satellite data.
YOffsetInPixel¶
This property gets and sets the Y pixel offset for drawing each feature.
public float YOffsetInPixel { get; set; }
Property Value¶
Single
This property gets the Y pixel offset for drawing each feature.
Remarks:
This property allows you to specify a Y offset. When combined with an X offset, it is useful to allow you to achieve effects such as drop shadows, etc. There also may be times when you need to modify the location of feature data so as to better align it with raster satellite data.
FittingLineInScreen¶
This property gets and sets whether the labeler will try to fit the label as best as it can on the visible part of a line on the screen.
public bool FittingLineInScreen { get; set; }
Property Value¶
This property gets whether the labeler will try to fit the label as best as it can on
the visible part of a line on the screen.
Remarks:
A label will normally be displayed in the center of a line. If only a small piece of the line is visible on the screen, we cannot see it's label by default. If we set this property to ture though, the label will be displayed in the center of that piece in screen.
FittingPolygonInScreen¶
This property gets and sets whether the labeler will try to fit the label as best as it can on the visible part of a polygon on the screen.
public bool FittingPolygonInScreen { get; set; }
Property Value¶
This property gets whether the labeler will try to fit the label as best as it can on
the visible part of a polygon on the screen.
Remarks:
A label will normally be displayed in the center of a polygon. If only a small piece of the polygon is visible on the screen, we cannot see it's label by default. If we set this property to ture though, the label will be displayed in the center of that piece in screen.
CustomTextStyles¶
This property returns a collection of area styles allowing you to stack multiple area styles on top of each other.
public Collection<TextStyle> CustomTextStyles { get; }
Property Value¶
Collection<TextStyle>
This property returns a collection of area styles.
Remarks:
Using this collection, you can stack multiple area styles on top of each other. When we draw the features, we will draw them in order that they exist in the collection. You can use these stacks to create drop shadow effects, multiple colored outlines, etc.
RotationAngle¶
This property gets and sets the rotation angle of the item being positioned.
public double RotationAngle { get; set; }
Property Value¶
Double
This property gets the rotation angle of the item being positioned.
Remarks:
None
TextFormat¶
This property gets and sets the format that will be applied to the text.
public string TextFormat { get; set; }
Property Value¶
String
This property gets the format that will be applied to the text.
Remarks:
With this property, you can apply formats to the text that is retrieved from the feature.
NumericFormat¶
This property gets and sets the format that will be applied to the text which can be parsed to double type.
public string NumericFormat { get; set; }
Property Value¶
String
This property gets the format that will be applied to the text which can be parsed to double type..
Remarks:
With this property, you can apply formats to the text that is retrieved from the feature.
DateFormat¶
This property gets and sets the format that will be applied to the text which can be parsed to DateTime type.
public string DateFormat { get; set; }
Property Value¶
String
This property gets the format that will be applied to the text which can be parsed to DateTime type..
Remarks:
With this property, you can apply formats to the text that is retrieved from the feature.
TextBrush¶
This property gets and sets the SolidBrush that will be used to draw the text.
public GeoBrush TextBrush { get; set; }
Property Value¶
GeoBrush
This property gets the SolidBrush that will be used to draw the text.
Remarks:
You can use this property to draw a solid color; however, if you need to use other brushes, you can access them through the Advanced property of this class.
Font¶
This property gets and sets the font that will be used to draw the text.
public GeoFont Font { get; set; }
Property Value¶
GeoFont
This property gets the font that will be used to draw the text.
Remarks:
None
HaloPen¶
This property gets and sets the halo pen you may use to draw a halo around the text.
public GeoPen HaloPen { get; set; }
Property Value¶
This property gets the halo pen you may use to draw a halo around the
text.
Remarks:
The halo pen allows you to draw a halo effect around the text, making it stand out more on a busy background.
TextColumnName¶
This property gets and sets the column name in the data that you want to get the text from.
public string TextColumnName { get; set; }
Property Value¶
This property gets the column name in the data that you want to get the text from.
Remarks:
This property is used when retrieving text from a feature. You will want to specify the name of the column that contains the text you want to draw.
Mask¶
This property gets and sets the AreaStyle used to draw a mask behind the text.
public AreaStyle Mask { get; set; }
Property Value¶
AreaStyle
This property gets the AreaStyle used to draw a mask behind the text.
Remarks:
A mask is a plate behind the text that is rectangular and slightly larger than the width and height of the text. It allows the label to stand out well on a busy background. You can also try the HaloPen property instead of the mask, if the mask effect is too pronounced.
MaskMargin¶
This property gets and sets the margin around the text that will be used for the mask.
public DrawingMargin MaskMargin { get; set; }
Property Value¶
DrawingMargin
This property gets the margin around the text that will be used for the mask.
Remarks:
This determines how much larger the mask is than the text, in pixels.
ForceHorizontalLabelForLine¶
This property gets and sets whether we should force horizontal labeling for lines.
public bool ForceHorizontalLabelForLine { get; set; }
Property Value¶
Boolean
This property gets whether we should force horizontal labeling for lines.
Remarks:
Normally, lines are labeled in the direction of the line. There may be some cases, however, when you want to have the line labeled horizontally regardless of the line's direction. In such a case, you can set this property to force the lines to be labeled horizontally.
SplineType¶
Gets or sets the SplineType for labeling.
public SplineType SplineType { get; set; }
Property Value¶
DrawingLevel¶
Gets or sets the DrawingLevel for this style.
public DrawingLevel DrawingLevel { get; set; }
Property Value¶
LabelPositions¶
Gets a value represents a keyValuePair which is a feature id and label position of the feature
public Dictionary<string, WorldLabelingCandidate> LabelPositions { get; }
Property Value¶
Dictionary<String, WorldLabelingCandidate>
Alignment¶
Controls the horizontal alignment of multi-line text content. This property has no effect on single-line text.
public DrawingTextAlignment Alignment { get; set; }
Property Value¶
LetterCase¶
public DrawingTextLetterCase LetterCase { get; set; }
Property Value¶
MaxCharAngleDelta¶
public double MaxCharAngleDelta { get; set; }
Property Value¶
MinDistance¶
public double MinDistance { get; set; }
Property Value¶
Spacing¶
public double Spacing { get; set; }
Property Value¶
WrapWidth¶
public double WrapWidth { get; set; }
Property Value¶
BasePoint¶
public PointStyle BasePoint { get; set; }
Property Value¶
PolygonLabelingLocationMode¶
This property gets and sets the mode that determines how to locate polygon's labeling
public PolygonLabelingLocationMode PolygonLabelingLocationMode { get; set; }
Property Value¶
This property gets the mode that determines how to locate polygon's labeling
Remarks:
There are two ways to handle polygon's labeling location. The first is to use polygon's centroid as the labeling location, the second way is to use polygon's boungdingbox center as the labeling location.
MaxNudgingInPixel¶
public int MaxNudgingInPixel { get; set; }
Property Value¶
NudgingIntervalInPixel¶
public float NudgingIntervalInPixel { get; set; }
Property Value¶
BestPlacementSymbolWidth¶
public float BestPlacementSymbolWidth { get; set; }
Property Value¶
BestPlacementSymbolHeight¶
public float BestPlacementSymbolHeight { get; set; }
Property Value¶
AbbreviationDictionary¶
public Dictionary<string, string> AbbreviationDictionary { get; set; }
Property Value¶
LeaderLineStyle¶
public LineStyle LeaderLineStyle { get; set; }
Property Value¶
LeaderLineRule¶
public LabelLeaderLinesRule LeaderLineRule { get; set; }
Property Value¶
LeaderLineMinimumLengthInPixels¶
public float LeaderLineMinimumLengthInPixels { get; set; }
Property Value¶
GridSize¶
This property gets and sets the grid size used for deterministic labeling.
public int GridSize { get; set; }
Property Value¶
Int32
This property gets the grid sized used for deterministic labeling.
Remarks:
The grid size determines how many labels will be considered as candidates for drawing. The smaller the grid size, the higher the density of candidates. Making the grid size too small may have a performance impact.
DuplicateRule¶
This property gets and sets the rule that determines how duplicate labels are handled.
public LabelDuplicateRule DuplicateRule { get; set; }
Property Value¶
This property gets the rule that determines how duplicate labels are
handled.
Remarks:
There are three ways to handle duplicate label names. The first is to suppress all duplicates, which means if there are two street segments with the same name then only one will be drawn. The second way is to suppress duplicate labels only if they are in one quarter of the screen. In this way, the screen will be divided into four quadrants, and if the two duplicate labels are in different quadrants, then they will both draw. The last way is to draw all duplicates.
OverlappingRule¶
This property gets and sets the rule that determines how overlapping labels are handled.
public LabelOverlappingRule OverlappingRule { get; set; }
Property Value¶
LabelOverlappingRule
This property gets the rule that determines overlapping labels are handled.
Remarks:
This defines the rules for label overlapping. Currently, either we allow overlapping or we do not. In the future, we may extend this to allow some percentage of partial overlapping.
AllowLabelNudging¶
public bool AllowLabelNudging { get; set; }
Property Value¶
AllowLineCarriage¶
This property gets and sets whether the labeler will allow carriage returns to be inserted.
public bool AllowLineCarriage { get; set; }
Property Value¶
This property gets whether the labeler will allow carriage returns to be
inserted.
Remarks:
This property enables the labeler to split long labels into multiple lines if need be. For instance, if you have a lake whose name is "Southern Homestead Lake," then the labeler may try and break the name onto multiple lines in order to better label the feature.
ForceLineCarriage¶
This property gets and sets whether the labeler will force carriage returns to be inserted.
public bool ForceLineCarriage { get; set; }
Property Value¶
This property gets whether the labeler will force carriage returns to be
inserted.
Remarks:
This property forces the labeler to split long labels into multiple lines. For instance, if you have a lake whose name is "Southern Homestead Lake," then the labeler will break the name onto multiple lines in order to better label the feature.
FittingPolygon¶
This property gets and sets whether the labeler will try to fit the label as best as it can within the boundary of a polygon.
public bool FittingPolygon { get; set; }
Property Value¶
This property gets whether the labeler will try to fit the label as best as
it can within the boundary of a polygon.
Remarks:
None
LabelAllPolygonParts¶
This property gets and sets whether the labeler will label every part of a multi-part polygon.
public bool LabelAllPolygonParts { get; set; }
Property Value¶
This property gets whether the labeler will label every part of a multi-part
polygon.
Remarks:
In some cases, you may want to label all of the parts of a multi-part polygon, while in other cases you may not. For example, you may have a series of lakes where you do want to label each polygon. In another case, you may have a country with many small islands and in this case you only want to label the largest polygon.
LabelAllLineParts¶
This property gets and sets whether the labeler will label every part of a multi-part line.
public bool LabelAllLineParts { get; set; }
Property Value¶
This property gets whether the labeler will label every part of a multi-part
line.
Remarks:
In some cases, you may want to label all of the parts of a multi-part line, while in other cases you may not.
FittingPolygonFactor¶
This property gets and sets the factor to which it will keep the label inside of the polygon.
public double FittingPolygonFactor { get; set; }
Property Value¶
This property gets the factor to which it will keep the label inside of the
polygon.
Remarks:
None
TextLineSegmentRatio¶
This property gets and sets the ratio required for the label length to match the line length.
public double TextLineSegmentRatio { get; set; }
Property Value¶
This property gets the ratio required for the label length to match the line
length.
Remarks:
This allows you to suppress labels where the label length would greatly exceed the line length. For example, if you set the ratio to 1, then the label will be suppressed if it is longer than the line. If the ratio is lower, then the label would need to be shorter than the line. If higher, then the label is allowed to run past the length of the line. This allows you to control the look of things like road labeling.
TextPlacement¶
This property gets and sets the location of the label for point features relative to the point.
public TextPlacement TextPlacement { get; set; }
Property Value¶
This property gets the location of the label for point features relative to the
point.
Remarks:
This property allows you to choose where the labels are created relative to the point. For example, you can set the property to RightCenter, which would ensure that all labels are placed to the right of and vertically centered with the point. Different kinds of point layers can be positioned differently. If the point layer is dense and position is not a main concern, then you can try the BestPlacement property. That property overrides this property and tries to fit the label in the best location so that the minimum number of labels are suppressed due to overlapping issues.
MaskType¶
public MaskType MaskType { get; set; }
Property Value¶
TextContent¶
This property gives you the option to customize the labeling by using one or more columns. For example supposing I have 2 columns "ColumnA" and "ColumnB" with the values of "ValueA" and "ValueB", by setting this property to "{ColumnA} - {ColumnB}", it will draw "ValueA - ValueB" for the corresponding feature. Do remember to add the columns you want to draw (ColumnA and ColumnB in the case above) to RequiredColumnNames collection;
public string TextContent { get; set; }
Property Value¶
MaxAdjacentCharDeltaAngle¶
public double MaxAdjacentCharDeltaAngle { get; set; }
Property Value¶
Name¶
This property gets and set the name of the style.
public string Name { get; set; }
Property Value¶
String
This property gets the name of the style.
Remarks:
This name is not used by the system; it is only for the developer. However, it can be used if you generate your own legend.
IsActive¶
This property gets and sets the active status of the style.
public bool IsActive { get; set; }
Property Value¶
Boolean
This property gets the active status of the style.
Remarks:
If the style is not active then it will not draw.
RequiredColumnNames¶
This property gets the collection of fields that are required for the style.
public Collection<string> RequiredColumnNames { get; }
Property Value¶
This property gets the collection of fields that are required for the
style.
Remarks:
This property gets the collection of fields that are required for the style. These are in addition to any other columns you specify in styles that inherit from this one. For example, if you have use a ValueStyle and it requires a column name for the value comparison, then that column does not need to be in this collection. You only use the RequiredColumnNames for columns you need beyond those required by specific inherited styles.
Filters¶
public Collection<string> Filters { get; }
Property Value¶
Constructors¶
IconStyle()¶
This is the constructor for the class.
public IconStyle()
Remarks:
If you use this, then you should set the properties manually -- such as the column name, font, solid brush and the image.
IconStyle(String, String, GeoFont, GeoBrush)¶
This is the constructor for the class.
public IconStyle(string iconPathFilename, string textColumnName, GeoFont textFont, GeoBrush textBrush)
Parameters¶
iconPathFilename
String
This parameter is the path and filename of the icon you want to use.
textColumnName
String
This parameter is the column name from which to get the data for the text.
textFont
GeoFont
This parameter is the font used to draw the text on the icon.
textBrush
GeoBrush
This parameter is the solid brush that is used to draw the text on the
icon.
Remarks:
This constructor allows you to pass in the path to the icon, along with the column name, font and solid brush to use. This is the most commonly used constructor. If you need to use an image from a stream, then you should use the constructor that takes a NativeImage.
IconStyle(GeoImage, String, GeoFont, GeoBrush)¶
This is the constructor for the class.
public IconStyle(GeoImage iconImage, string textColumnName, GeoFont textFont, GeoBrush textBrush)
Parameters¶
iconImage
GeoImage
This parameter is the image to use in this style.
textColumnName
String
This parameter is the column name from which to get the data for the text.
textFont
GeoFont
This parameter is the font used to draw the text on the icon.
textBrush
GeoBrush
This parameter is the solid brush that is used to draw the text on the
icon.
Remarks:
This constructor allows you to use a NativeImage instead of specifying a path and filename of the icon. This is commonly used if the image comes from a stream.
Methods¶
DrawSampleCore(GeoCanvas, DrawingRectangleF)¶
protected void DrawSampleCore(GeoCanvas canvas, DrawingRectangleF drawingExtent)
Parameters¶
canvas
GeoCanvas
drawingExtent
DrawingRectangleF
DrawCore(IEnumerable<Feature>, GeoCanvas, Collection<SimpleCandidate>, Collection<SimpleCandidate>)¶
This method draws the features on the view you provided.
protected void DrawCore(IEnumerable<Feature> features, GeoCanvas canvas, Collection<SimpleCandidate> labelsInThisLayer, Collection<SimpleCandidate> labelsInAllLayers)
Parameters¶
features
IEnumerable<Feature>
This parameter represents the features you want to draw on the view.
canvas
GeoCanvas
This parameter represents the view you want to draw the features on.
labelsInThisLayer
Collection<SimpleCandidate>
The labels will be drawn in the current layer only.
labelsInAllLayers
Collection<SimpleCandidate>
The labels will be drawn in all layers.
Exceptions¶
InvalidOperationException
In the event you attempt to call this method when the GeoCanvas's IsDrawing mode is false, it will throw an InvalidOperationException.
ArgumentNullException
If you pass a null as the view, we will throw an ArgumentNullException.
ArgumentNullException
If you pass a null as the features, we will throw an ArgumentNullException.
Remarks:
This overridden method is called from the concrete public method Draw. In this method, we take the features you passed in and draw them on the view you provided. Each style (based on its properties) may draw each feature differently.
When overriding this method, consider each feature and its column data values. You can use the full power of the GeoCanvas to do the drawing. If you need column data for a feature, be sure to override the GetRequiredColumnNamesCore and add the columns you need to the collection. In many of the styles, we add properties to allow the user to specify which field they need; then, in the GetRequiredColumnNamesCore, we read that property and add it to the collection.
GetLabelingCandidateCore(Feature, GeoCanvas, GeoFont, Single, Single, Double)¶
This method determines which labels will be candidates for drawing.
protected Collection<LabelingCandidate> GetLabelingCandidateCore(Feature feature, GeoCanvas canvas, GeoFont font, float xOffsetInPixel, float yOffsetInPixel, double rotationAngle)
Parameters¶
feature
Feature
This parameter represents the features you want to draw on the view.
canvas
GeoCanvas
This parameter represents the view you want to draw the features on.
font
GeoFont
xOffsetInPixel
Single
yOffsetInPixel
Single
rotationAngle
Double
Returns¶
Collection<LabelingCandidate>
This method returns a collection of labeling candidates.
Exceptions¶
ArgumentNullException
If you pass a null as the view, we will throw an ArgumentNullException.
InvalidOperationException
In the event you attempt to call this method when the GeoCanvas's IsDrawing mode is false, it will throw an InvalidOperationException.
Remarks:
This overridden method is called from the concrete public method GetLabelingCandidate. In this method, we determine if the feature passed in will be a candidate for drawing. If you have the grid method enabled, then we determine this by ensuring that only one label will be eligible per grid cell. In this way, we can ensure that labels always draw in the same place at the same scale.
Events¶
Formatting¶
public event EventHandler<FormattingPositionStyleEventArgs> Formatting;
Formatted¶
public event EventHandler<FormattedPositionStyleEventArgs> Formatted;