/// <summary> /// Create and add a cluster style to the coyote layer /// </summary> private void AddClusterPointStyle(ShapeFileFeatureLayer layer) { // Create the point style that will serve as the basis of the cluster style var pointStyle = new PointStyle(new GeoImage(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Resources/coyote_paw.png"))) { ImageScale = .4, Mask = new AreaStyle(GeoPens.Black, GeoBrushes.White), MaskType = MaskType.RoundedCorners }; // Create a text style that will display the number of features within a clustered point var textStyle = new TextStyle("FeatureCount", new GeoFont("Segoe UI", 12, DrawingFontStyles.Bold), GeoBrushes.DimGray) { HaloPen = new GeoPen(GeoBrushes.White, 2), YOffsetInPixel = 1 }; // Create the cluster point style var clusterPointStyle = new ClusterPointStyle(pointStyle, textStyle) { MinimumFeaturesPerCellToCluster = 1 }; // Add the point style to the collection of custom styles for ZoomLevel 1. layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(clusterPointStyle); // Apply the styles for ZoomLevel 1 down to ZoomLevel 20. This effectively applies the point style on every zoom level on the map. layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; }
private void mapView_Loaded(object sender, RoutedEventArgs e) { GeoFont geoFont = new GeoFont("unicode", 8); var random = new Random(); var inMemoryFeatureLayer1 = new InMemoryFeatureLayer(); for (var i = 0; i < 100000; i++) { var feature = new Feature(random.Next(-1000000, 1000000), random.Next(-1000000, 1000000)); inMemoryFeatureLayer1.InternalFeatures.Add(feature); } inMemoryFeatureLayer1.ZoomLevelSet.ZoomLevel01.DefaultPointStyle = new PointStyle(geoFont, startGlyphContent, GeoBrushes.Black); inMemoryFeatureLayer1.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; var inMemoryFeatureLayer2 = new InMemoryFeatureLayer(); foreach (var feature in inMemoryFeatureLayer1.InternalFeatures) { inMemoryFeatureLayer2.InternalFeatures.Add(feature); } var clusterStyle = new ClusterPointStyle(new PointStyle(geoFont, startGlyphContent, GeoBrushes.Red), new TextStyle("FeatureCount", geoFont, new GeoSolidBrush(GeoColors.White))); clusterStyle.DrawingClusteredFeature += ClusterStyle_DrawingClusteredFeature; clusterStyle.CellSize = 100; clusterStyle.MinimumFeaturesPerCellToCluster = 10; inMemoryFeatureLayer2.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(clusterStyle); inMemoryFeatureLayer2.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; var layerOverlay1 = new LayerOverlay(); layerOverlay1.Layers.Add(inMemoryFeatureLayer1); var layerOverlay2 = new LayerOverlay() { TileType = TileType.SingleTile }; layerOverlay2.Layers.Add(inMemoryFeatureLayer2); var backgroundOverlay = new BackgroundOverlay() { BackgroundBrush = new GeoSolidBrush(GeoColors.LightGray) }; mapView.Overlays.Add(backgroundOverlay); mapView.Overlays.Add(layerOverlay1); mapView.Overlays.Add(layerOverlay2); mapView.MapUnit = GeographyUnit.Meter; mapView.CurrentExtent = new RectangleShape(-100000, 100000, 100000, -100000); }