Exemplo n.º 1
0
        /// <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);
        }