Exemplo n.º 1
0
        /// <summary>
        /// Clear the previously displayed features from the map, and add new features
        /// </summary>
        private void ClearMapAndAddFeatures(Collection <Feature> validatedFeatures, Collection <Feature> resultFeatures, Collection <Feature> filterFeatures = null)
        {
            // Get the InMemoryFeatureLayers from the MapView
            InMemoryFeatureLayer validatedFeaturesLayer = (InMemoryFeatureLayer)mapView.FindFeatureLayer("Validated Features");
            InMemoryFeatureLayer filterFeaturesLayer    = (InMemoryFeatureLayer)mapView.FindFeatureLayer("Filter Features");
            InMemoryFeatureLayer resultFeaturesLayer    = (InMemoryFeatureLayer)mapView.FindFeatureLayer("Result Features");

            validatedFeaturesLayer.Open();
            filterFeaturesLayer.Open();
            resultFeaturesLayer.Open();

            // Clear the existing features from each layer
            validatedFeaturesLayer.Clear();
            filterFeaturesLayer.Clear();
            resultFeaturesLayer.Clear();

            // Add (blue) filter features to the map, if there are any
            if (filterFeatures != null)
            {
                foreach (Feature filterFeature in filterFeatures)
                {
                    filterFeaturesLayer.InternalFeatures.Add(filterFeature);
                }
            }

            // Add (green) validated features to the map
            foreach (Feature validatedFeature in validatedFeatures)
            {
                validatedFeaturesLayer.InternalFeatures.Add(validatedFeature);
            }

            // Add (red) invalid features to the map
            foreach (Feature resultFeature in resultFeatures)
            {
                resultFeaturesLayer.InternalFeatures.Add(resultFeature);
            }

            // Refresh/redraw the layers and reset the map extent
            LayerOverlay featureOverlay = (LayerOverlay)mapView.Overlays["Features Overlay"];

            mapView.CurrentExtent = RectangleShape.ScaleUp(featureOverlay.GetBoundingBox(), 20).GetBoundingBox(); mapView.Refresh();

            validatedFeaturesLayer.Close();
            filterFeaturesLayer.Close();
            resultFeaturesLayer.Close();
        }
Exemplo n.º 2
0
        private void MainForm_Loaded(object sender, RoutedEventArgs e)
        {
            // set map properties
            Map.MinimumScale = 0;
            Map.MapUnit      = GeographyUnit.DecimalDegree;
            Map.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.AliceBlue);
            Map.MapTools.Logo.IsEnabled           = false;

            // create source overlay and layer style
            var sourceOverlay = new LayerOverlay()
            {
                TileType       = TileType.SingleTile,
                DrawingQuality = DrawingQuality.HighSpeed
            };

            var layerStyle = new ValueStyle("State", new Collection <ValueItem>()
            {
                new ValueItem("0", new AreaStyle(GeoPens.Black, GeoBrushes.Green)),
                new ValueItem("1", new AreaStyle(GeoPens.Black, GeoBrushes.Yellow)),
                new ValueItem("2", new AreaStyle(GeoPens.Black, GeoBrushes.Red)),
                new ValueItem("3", new AreaStyle(GeoPens.Black, GeoBrushes.Orange))
            });

            for (int layerIndex = 0; layerIndex < layerCount; layerIndex++)
            {
                // create source layer
                var sourceLayer = new InMemoryFeatureLayer()
                {
                    Name = $"Source Layer #{layerIndex}"
                };
                sourceLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(layerStyle);
                sourceLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                // add rectangle shape features to source layer, calculate position and size of each rectangle shapes
                double featureInterval = 1.0;
                double featureSize     = 1.0;
                for (int row = 0; row < featureRowCount; row++)
                {
                    for (int column = 0; column < featureColumnCount; column++)
                    {
                        double upperLeftX = column * (featureSize + featureInterval);
                        double upperLeftY = (layerIndex * featureRowCount + row) * (featureSize + featureInterval);
                        var    feature    = new Feature(new PolygonShape(new RingShape(new Collection <Vertex>()
                        {
                            new Vertex(upperLeftX, upperLeftY),
                            new Vertex(upperLeftX, upperLeftY + featureSize),
                            new Vertex(upperLeftX + featureSize, upperLeftY + featureSize),
                            new Vertex(upperLeftX + featureSize, upperLeftY)
                        })))
                        {
                            Id = $"{column}.{row}"
                        };
                        feature.ColumnValues.Add("State", "0");
                        sourceLayer.InternalFeatures.Add(feature.Id, feature);
                    }
                }

                sourceOverlay.Layers.Add(sourceLayer);
                Layers.Add(sourceLayer);
            }

            // refresh the map
            Map.Overlays.Add("SourceOverlay", sourceOverlay);
            Map.CurrentExtent = sourceOverlay.GetBoundingBox();
            Map.Refresh();
        }