当比例尺过小,而该区域点要素过多时,就会造成许多点重复覆盖,密密麻麻,影响地图美观,对于这个问题ArcGIS Api for WPF|Silverlight 引入了Clusterer聚集来解决,当点比较密集时,它会将临近的点当做一个来显示,然而又可以通过动画的方式将其弹出展示,效果如下图:
上面是一个FlareCusterer的演示,它的相关属性有FlareBackground:Flare的背景填充颜色,即上图黄色部分;FlareForeground:Flare符号文本或边框的颜色,默认为白色,即上图黄色填充部分的边框和其上的文字;MaximumFlareCount:Flare符号所代表的要素的最大个数,即显示成黄色弹出样式和蓝色大量聚集样式的边界个数;Radius:表示聚集的半径,在该聚集内的要素都将被聚合在一起。以像素为单位定义,默认值为20,即元素距离在该半径内,才会被聚集显示;Gradient:大聚集符号使用的LinearGradientBrush渲染,即大量聚集时不同数量用不同的颜色表示。
由上可得FlareCuster聚集有两种样式显示,一种是可弹出查看子元素的形式,一种是大量聚集。具体实现如下:
这里只提供XAML实现方式,C#代码实现的思路一样,只需设置好上述的属性即可
1.定义Gradient渐变色资源
<Grid.Resources>
<LinearGradientBrush x:Key="BlueGradient" MappingMode="RelativeToBoundingBox" ><!--线性渐变-->
<GradientStop Color="#990011FF" Offset="0"/>
<GradientStop Color="#990055FF" Offset="0.25"/>
<GradientStop Color="#990099FF" Offset="0.5"/>
<GradientStop Color="#9900CCFF" Offset="0.75"/>
<GradientStop Color="#9900FFFF" Offset="1"/>
</LinearGradientBrush>
</Grid.Resources>
2.设置FeatureLayer|GraphicsLayer Custerer相关属性
<esri:FeatureLayer.Clusterer>
<esri:FlareClusterer Gradient="{StaticResource BlueGradient}" MaximumFlareCount="5" Radius="10" FlareBackground="Yellow" FlareForeground="Blue">
</esri:FlareClusterer><!--属性介绍,可见上文-->
</esri:FeatureLayer.Clusterer>
除了FlareCusterer聚集渲染外,还可以扩展GraphicsClusterer,自定义实现。