在DotSpatial中,当要素进入地图或者图层的选中要素集合后,颜色会高亮显示,但是默认颜色为Color.Cyan,其RGB为(0,255,255),在地图中并不是很显眼,就是下图这个颜色。实际需求中,可能更需要类似于红色这种颜色进行强调显示要素,而且高亮要素的线宽也会相较于正常模式更粗,方便区别。文末附送代码传送门。
下面两张图是在没有底图的情况下进行修改后、默认高亮效果的对比,可以发现修改后的效果在小比例尺的情况下更加好。如果叠加了底图后,默认的高亮效果应该会更加的难易凸显要素。
在DotSpatial中,每个图层都有自己的符号化属性,共包含了两个,一个为Symbolizer(这个用于未选中状态下用户自定义的符号化样式),一个为SelectionSymbolizer(用于要素选中状态下的要素符号化样式)。
通过设置SelectionSymbolizer属性即可更改图层的选择高亮样式,但是由于要素类型粗分为点线面三种类型,其绘制的方式也不同,图层的SelectionSymbolizer继承于IFeatureSymbolizer,通过查看帮助文档可知,其子类有LineSymbolizer、PointSymbolizer、PolygonSymbolizer等几种。在对应的要素类型图层中设置对应的IFeatureSymbolizer,便可完成高亮样式的设置。代码如下:
/// <summary>
/// 设置图层的高亮显示效果
/// </summary>
/// <param name="tempLayer"></param>
private void setHighLightColor(FeatureLayer tempLayer) {
try
{
switch (tempLayer.FeatureSet.FeatureType)
{
case FeatureType.Line:
tempLayer.SelectionSymbolizer = new LineSymbolizer(Color.Red, Color.DarkRed, 2, System.Drawing.Drawing2D.DashStyle.Solid
, System.Drawing.Drawing2D.LineCap.Round, System.Drawing.Drawing2D.LineCap.Round);
break;
case FeatureType.MultiPoint:
case FeatureType.Point:
tempLayer.SelectionSymbolizer = new PointSymbolizer(Color.Red, DotSpatial.Symbology.PointShape.Star, 2);
break;
case FeatureType.Polygon:
tempLayer.SelectionSymbolizer = new PolygonSymbolizer(Color.Red, Color.DarkRed, 2);
break;
default:
break;
}
}
catch (Exception ex)
{
throw;
}
}
更加详细的代码传送门 https://github.com/Spe1993/SpeRemarks/blob/master/DotSpatial/ChangeDefaultHighLightSymbol