/// <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(); }
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(); }