Example #1
0
        private int GetClosestZoomLevelIndex(double scale)
        {
            ZoomLevelSet zoomLevelSet = GisEditor.ActiveMap.ZoomLevelSet;
            var          zoomLevel    = zoomLevelSet.CustomZoomLevels.OrderBy(z => Math.Abs(z.Scale - scale)).FirstOrDefault();

            return(zoomLevelSet.CustomZoomLevels.IndexOf(zoomLevel) + 1);
        }
        private void btnHigh_Click(object sender, RoutedEventArgs e)
        {
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            mapView.CurrentExtent = MapUtil.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, mapView.CurrentExtent, GeographyUnit.Meter, (float)mapView.ActualWidth, (float)mapView.ActualHeight);
            mapView.Refresh();
        }
Example #3
0
        public static void SetZoomLevel(ZoomLevelSet zoomLevelSet, GisEditorWpfMap map)
        {
            zoomLevelSet.AddZoomLevels();
            map.ZoomLevelSet = zoomLevelSet;

            //the following line of code sets the zoom levels back to normal, if the Open Street Map was in the map previously.
            map.MinimumScale = map.ZoomLevelSet.GetZoomLevels().LastOrDefault().Scale;
        }
Example #4
0
        private void btnHigh_Click(object sender, EventArgs e)
        {
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            winformsMap1.CurrentExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, winformsMap1.CurrentExtent, GeographyUnit.DecimalDegree, winformsMap1.Width, winformsMap1.Height);

            winformsMap1.Refresh();
        }
        public T CreateLayer()
        {
            var layer = CreateLayerCore();

            layer.Name = TableName;
            layer.AddBlankZoomLevels();
            layer.DrawingMarginInPixel = 200;
            layer.Open();
            var simpleShapeType = GetSimpleShapeType(layer);

            Styles.Style shapeStyle = null;

            switch (simpleShapeType)
            {
            case SimpleShapeType.Point:
                shapeStyle = GetDefaultStyle <PointStyle>(StyleCategories.Point);
                if (shapeStyle == null)
                {
                    shapeStyle      = PointStyles.CreateSimpleCircleStyle(RandomColor(), 6);
                    shapeStyle.Name = "Simple Style 1";
                }
                break;

            case SimpleShapeType.Line:
                shapeStyle = GetDefaultStyle <LineStyle>(StyleCategories.Line);
                if (shapeStyle == null)
                {
                    shapeStyle      = new LineStyle(new GeoPen(RandomColor(RandomColorType.Bright)));
                    shapeStyle.Name = "Simple Style 1";
                }
                break;

            case SimpleShapeType.Area:
                shapeStyle = GetDefaultStyle <AreaStyle>(StyleCategories.Area);
                if (shapeStyle == null)
                {
                    shapeStyle      = AreaStyles.CreateSimpleAreaStyle(RandomColor(), GeoColor.SimpleColors.Black);
                    shapeStyle.Name = "Simple Style 1";
                }
                break;
            }

            if (shapeStyle != null)
            {
                ZoomLevelSet zoomLevelSet = GisEditor.ActiveMap.ZoomLevelSet;
                ZoomLevel    zoomLevel    = new ZoomLevel(zoomLevelSet.ZoomLevel01.Scale);
                zoomLevel.CustomStyles.Add(shapeStyle);
                zoomLevel.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

                layer.ZoomLevelSet.CustomZoomLevels[0] = zoomLevel;
                layer.DrawingQuality = DrawingQuality.CanvasSettings;
            }
            layer.Close();

            return(layer);
        }
Example #6
0
        private void AddMapLayer()
        {
            // Create the MapPrinterLayer and set the position
            MapPrinterLayer mapPrinterLayer = new MapPrinterLayer();

            mapPrinterLayer.MapUnit        = GeographyUnit.Meter;
            mapPrinterLayer.MapExtent      = new RectangleShape(-20026376.39, 20048966.10, 20026376.39, -20048966.10);
            mapPrinterLayer.BackgroundMask = new AreaStyle(new GeoPen(GeoColors.Black, 1));
            mapPrinterLayer.Open();

            // Set the maps position slightly below the pages center and 8 inches wide and 7 inches tall
            RectangleShape pageBoundingbox = GetPageBoundingBox(PrintingUnit.Inch);

            mapPrinterLayer.SetPosition(8, 7, pageBoundingbox.GetCenterPoint().X, pageBoundingbox.GetCenterPoint().Y + 1, PrintingUnit.Inch);

            // Setup the intial extent and ensure they snap to the default ZoomLevel
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            mapPrinterLayer.MapExtent = MapUtil.ZoomToScale(zoomLevelSet.ZoomLevel03.Scale, new RectangleShape(-20026376.39, 20048966.10, 20026376.39, -20048966.10), mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);

            // This ThinkGeo Cloud test key is exclusively for demonstration purposes and is limited to requesting base map
            // tiles only. Do not use it in your own applications, as it may be restricted or disabled without prior notice.
            // Please visit https://cloud.thinkgeo.com to create a free key for your own use.
            //ThinkGeoCloudRasterMapsLayer worldMapKitLayer = new ThinkGeoCloudRasterMapsLayer("itZGOI8oafZwmtxP-XGiMvfWJPPc-dX35DmESmLlQIU~", "bcaCzPpmOG6le2pUz5EAaEKYI-KSMny_WxEAe7gMNQgGeN9sqL12OA~~");
            //worldMapKitLayer.TileCache = null;
            //mapPrinterLayer.Layers.Add(worldMapKitLayer);
            ShapeFileFeatureLayer backgroundLayer = new ShapeFileFeatureLayer(@"data/Countries02_3857.shp", FileAccess.Read);

            backgroundLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            backgroundLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle    = AreaStyle.CreateSimpleAreaStyle(GeoColors.White, GeoColors.Black);
            mapPrinterLayer.Layers.Add(backgroundLayer);

            // Setup the Countries mapping layer
            ShapeFileFeatureLayer shapefileFeatureLayer = new ShapeFileFeatureLayer(@"data/Countries02_3857.shp", FileAccess.Read);

            shapefileFeatureLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;

            //Create the class break style for countries less than 70 million
            ClassBreakStyle classBreakStyle = new ClassBreakStyle("POP_CNTRY");

            // Create the style and class break for countries with greater and 70 million
            AreaStyle hatchAreaStyle = new AreaStyle(new GeoSolidBrush(GeoColor.FromArgb(100, GeoColors.Green)));

            classBreakStyle.ClassBreaks.Add(new ClassBreak(70000000, hatchAreaStyle));

            // Add the class break style to the layer
            shapefileFeatureLayer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(classBreakStyle);

            // Add the new country layer to the MapPrinterLayer
            mapPrinterLayer.Layers.Add(shapefileFeatureLayer);

            // Add the MapPrinterLayer to the PrinterInteractiveOverlay
            PrinterInteractiveOverlay printerInteractiveOverlay = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];

            printerInteractiveOverlay.PrinterLayers.Add("MapLayer", mapPrinterLayer);
        }
Example #7
0
        public void ReaddZoomLevels(ZoomLevelSet zoomLevelSet)
        {
            zoomLevelSetViewModel.Clear();
            List <ZoomLevel> zoomLevels = zoomLevelSet.CustomZoomLevels.Where(c => !(c is PreciseZoomLevel)).ToList();

            for (int i = 0; i < zoomLevels.Count(); i++)
            {
                zoomLevelSetViewModel.Add(new ZoomLevelViewModel(i, zoomLevels[i].Scale));
            }
        }
        private static void ChangeAllLayersZoomLevelSet(GisEditorWpfMap map, IEnumerable <ZoomLevel> zoomLevels)
        {
            var zoomLevelSet = new ZoomLevelSet();

            map.ZoomLevelSet.CustomZoomLevels.Clear();
            foreach (var item in zoomLevels)
            {
                zoomLevelSet.CustomZoomLevels.Add(item);
            }
            map.ZoomLevelSet = zoomLevelSet;
            map.MinimumScale = map.ZoomLevelSet.CustomZoomLevels.LastOrDefault().Scale;
            var allFeatureLayers = map.GetFeatureLayers();

            foreach (var featureLayer in allFeatureLayers)
            {
                var originalZoomLevels = featureLayer.ZoomLevelSet.CustomZoomLevels.ToList();
                featureLayer.ZoomLevelSet.CustomZoomLevels.Clear();
                foreach (var item in zoomLevels)
                {
                    var       max          = item.Scale * 2;
                    var       min          = item.Scale * 0.5;
                    ZoomLevel newZoomLevel = null;
                    if (item is PreciseZoomLevel)
                    {
                        newZoomLevel = new PreciseZoomLevel(item.Scale);
                    }
                    else
                    {
                        newZoomLevel = new ZoomLevel(item.Scale);
                    }
                    foreach (var style in item.CustomStyles)
                    {
                        newZoomLevel.CustomStyles.Add(style);
                    }

                    var styles = originalZoomLevels.Where(z => z.Scale <max && z.Scale> min).SelectMany(z => z.CustomStyles);
                    foreach (var style in styles)
                    {
                        if (!newZoomLevel.CustomStyles.Contains(style))
                        {
                            newZoomLevel.CustomStyles.Add(style);
                        }
                    }
                    featureLayer.ZoomLevelSet.CustomZoomLevels.Add(newZoomLevel);
                }
            }
            foreach (var layerOverlay in GisEditor.ActiveMap.Overlays.OfType <LayerOverlay>())
            {
                if (layerOverlay.MapArguments != null)
                {
                    // layerOverlay.Refresh();
                    layerOverlay.RefreshWithBufferSettings();
                }
            }
        }
        public ValueCircleStyle()
            : base()
        {
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
            defaultZoomLevel = zoomLevelSet.ZoomLevel04;
            baseScale = zoomLevelSet.ZoomLevel05.Scale;

            drawingRadiusRatio = 1;
            outerColor = GeoColor.FromArgb(255, 10, 20, 255);
            innerColor = GeoColor.FromArgb(100, 10, 20, 255);
            minCircleRadiusInDefaultZoomLevel = 10;
            maxCircleRadiusInDefaultZoomLevel = 100;
        }
        public ValueCircleStyle()
            : base()
        {
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            defaultZoomLevel = zoomLevelSet.ZoomLevel04;
            baseScale        = zoomLevelSet.ZoomLevel05.Scale;

            drawingRadiusRatio = 1;
            outerColor         = GeoColor.FromArgb(255, 10, 20, 255);
            innerColor         = GeoColor.FromArgb(100, 10, 20, 255);
            minCircleRadiusInDefaultZoomLevel = 10;
            maxCircleRadiusInDefaultZoomLevel = 100;
        }
Example #11
0
        private void btnZoomOut_Click(object sender, RoutedEventArgs e)
        {
            // Grab the MapPrinterLayer and adjust the extent
            PrinterInteractiveOverlay printerOverlay  = (PrinterInteractiveOverlay)Map1.InteractiveOverlays["PrintPreviewOverlay"];
            MapPrinterLayer           mapPrinterLayer = ((MapPrinterLayer)(printerOverlay.PrinterLayers["MapLayer"]));

            // Here we snap the current scale to the default zoomLevelSet when we zoom in
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
            double       newScale     = ZoomLevelSet.GetHigherZoomLevelScale(MapUtil.GetScale(mapPrinterLayer.MapExtent, (float)mapPrinterLayer.GetBoundingBox().Width, mapPrinterLayer.MapUnit), zoomLevelSet);

            mapPrinterLayer.MapExtent = MapUtil.ZoomToScale(newScale, mapPrinterLayer.MapExtent, mapPrinterLayer.MapUnit, (float)mapPrinterLayer.GetBoundingBox().Width, (float)mapPrinterLayer.GetBoundingBox().Height);

            Map1.Refresh();
        }
Example #12
0
        private static double GetScaleFromZoomLevelSet(int comboboxIndex)
        {
            double       scale        = 0;
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            switch (comboboxIndex)
            {
            case 0:
                scale = zoomLevelSet.ZoomLevel10.Scale;
                break;

            case 1:
                scale = zoomLevelSet.ZoomLevel09.Scale;
                break;

            case 2:
                scale = zoomLevelSet.ZoomLevel08.Scale;
                break;

            case 3:
                scale = zoomLevelSet.ZoomLevel07.Scale;
                break;

            case 4:
                scale = zoomLevelSet.ZoomLevel06.Scale;
                break;

            case 5:
                scale = zoomLevelSet.ZoomLevel05.Scale;
                break;

            case 6:
                scale = zoomLevelSet.ZoomLevel04.Scale;
                break;

            case 7:
                scale = zoomLevelSet.ZoomLevel03.Scale;
                break;

            case 8:
                scale = zoomLevelSet.ZoomLevel02.Scale;
                break;

            default:
                break;
            }

            return(scale);
        }
Example #13
0
        private static double GetZoomLevelSetScale(ZoomLevelSet zoomLevelSet, int zoomLevel)
        {
            switch (zoomLevel)
            {
            case 0: return(zoomLevelSet.ZoomLevel01.Scale);

            case 1: return(zoomLevelSet.ZoomLevel02.Scale);

            case 2: return(zoomLevelSet.ZoomLevel03.Scale);

            case 3: return(zoomLevelSet.ZoomLevel04.Scale);

            case 4: return(zoomLevelSet.ZoomLevel05.Scale);

            case 5: return(zoomLevelSet.ZoomLevel06.Scale);

            case 6: return(zoomLevelSet.ZoomLevel07.Scale);

            case 7: return(zoomLevelSet.ZoomLevel08.Scale);

            case 8: return(zoomLevelSet.ZoomLevel09.Scale);

            case 9: return(zoomLevelSet.ZoomLevel10.Scale);

            case 10: return(zoomLevelSet.ZoomLevel11.Scale);

            case 11: return(zoomLevelSet.ZoomLevel12.Scale);

            case 12: return(zoomLevelSet.ZoomLevel13.Scale);

            case 13: return(zoomLevelSet.ZoomLevel14.Scale);

            case 14: return(zoomLevelSet.ZoomLevel15.Scale);

            case 15: return(zoomLevelSet.ZoomLevel16.Scale);

            case 16: return(zoomLevelSet.ZoomLevel17.Scale);

            case 17: return(zoomLevelSet.ZoomLevel18.Scale);

            case 18: return(zoomLevelSet.ZoomLevel19.Scale);

            case 19: return(zoomLevelSet.ZoomLevel20.Scale);

            default:
                return(-1);
            }
        }
        private Collection <string> GetZoomLevelEntities()
        {
            Collection <string> items = new Collection <string>();

            if (GisEditor.ActiveMap != null)
            {
                ZoomLevelSet zoomLevelSet = GisEditor.ActiveMap.ZoomLevelSet;
                for (int i = 0; i < zoomLevelSet.CustomZoomLevels.Count; i++)
                {
                    string zoomLevelTitle = string.Format(CultureInfo.InvariantCulture, "Level {0:D2}", i + 1);
                    string zoomLevelScale = string.Format(CultureInfo.InvariantCulture, "Scale 1:{0:N0}", (int)zoomLevelSet.CustomZoomLevels[i].Scale);
                    items.Add(zoomLevelTitle + " - " + zoomLevelScale);
                }
            }
            return(items);
        }
Example #15
0
        internal static double GetClosestScale(double scale, ZoomLevelSet zoomLevelSet)
        {
            double closestScale     = double.NaN;
            double closestScaleDiff = Double.MaxValue;

            foreach (ZoomLevel item in zoomLevelSet.GetZoomLevels())
            {
                double currentScaleDiff = Math.Abs(item.Scale - scale);
                if (currentScaleDiff < closestScaleDiff)
                {
                    closestScaleDiff = currentScaleDiff;
                    closestScale     = item.Scale;
                }
            }

            return(closestScale);
        }
Example #16
0
        internal static int GetSnappedZoomLevelIndex(double scale, ZoomLevelSet zoomLevelSet)
        {
            int zoomLevel = -1;

            foreach (ZoomLevel item in zoomLevelSet.GetZoomLevels())
            {
                if (item.Scale >= scale || Math.Abs(item.Scale - scale) < 0.1)
                {
                    zoomLevel++;
                }
                else
                {
                    break;
                }
            }

            return(zoomLevel == -1 ? 0 : zoomLevel);
        }
Example #17
0
        /// <summary>
        /// When a route segment is selected in the UI, highlight it
        /// </summary>
        private void lsbRouteSegments_SelectionChanged(object sender, SelectedItemChangedEventArgs selectedItemChangedEventArgs)
        {
            ListView routeSegments = (ListView)sender;

            if (routeSegments.SelectedItem != null)
            {
                InMemoryFeatureLayer highlightLayer = (InMemoryFeatureLayer)mapView.FindFeatureLayer("Highlight Layer");
                highlightLayer.InternalFeatures.Clear();

                // Highlight the selected route segment
                highlightLayer.InternalFeatures.Add(new Feature(((CloudRoutingSegment)routeSegments.SelectedItem).Shape));

                // Zoom to the selected feature and zoom out to an appropriate level
                mapView.CurrentExtent = ((CloudRoutingSegment)routeSegments.SelectedItem).Shape.GetBoundingBox();
                ZoomLevelSet standardZoomLevelSet = new ZoomLevelSet();
                mapView.ZoomToScale(standardZoomLevelSet.ZoomLevel15.Scale);
                mapView.Refresh();
            }
        }
Example #18
0
        public static void AddZoomLevels(this ZoomLevelSet zoomLevelSet, bool addExtraZoomLevels = true)
        {
            var zoomLevels = zoomLevelSet.GetZoomLevels();

            if (zoomLevels.Count == 20)
            {
                foreach (var item in zoomLevels)
                {
                    item.Scale = Math.Round(item.Scale, 6);
                    zoomLevelSet.CustomZoomLevels.Add(item);
                }
                if (addExtraZoomLevels)
                {
                    for (int i = 0; i < 5; i++)
                    {
                        var currentScale = Math.Round(zoomLevelSet.CustomZoomLevels.LastOrDefault().Scale * 0.5, 6);
                        zoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(currentScale));
                    }
                }
            }
        }
Example #19
0
        /// <summary>
        /// When a location is selected in the UI, add a marker at that location and center the map on it
        /// </summary>
        private void lsbLocations_SelectionChanged(object sender, EventArgs e)
        {
            // Get the selected location
            var chosenLocation = lsbLocations.SelectedItem as CloudGeocodingLocation;

            if (chosenLocation != null)
            {
                // Get the MarkerOverlay from the MapView
                SimpleMarkerOverlay geocodedLocationOverlay = (SimpleMarkerOverlay)mapView.Overlays["Geocoded Locations Overlay"];

                // Clear the existing markers and add a new marker at the chosen location
                geocodedLocationOverlay.Markers.Clear();
                geocodedLocationOverlay.Markers.Add(CreateNewMarker(chosenLocation.LocationPoint));

                // Center the map on the chosen location
                mapView.CurrentExtent = chosenLocation.BoundingBox;
                ZoomLevelSet standardZoomLevelSet = new ZoomLevelSet();
                mapView.ZoomToScale(standardZoomLevelSet.ZoomLevel18.Scale);
                mapView.Refresh();
            }
        }
        private static double GetScaleFromZoomLevelSet(int comboboxIndex)
        {
            double scale = 0;
            ZoomLevelSet zoomLevelSet = new ZoomLevelSet();

            switch (comboboxIndex)
            {
                case 0:
                    scale = zoomLevelSet.ZoomLevel10.Scale;
                    break;
                case 1:
                    scale = zoomLevelSet.ZoomLevel09.Scale;
                    break;
                case 2:
                    scale = zoomLevelSet.ZoomLevel08.Scale;
                    break;
                case 3:
                    scale = zoomLevelSet.ZoomLevel07.Scale;
                    break;
                case 4:
                    scale = zoomLevelSet.ZoomLevel06.Scale;
                    break;
                case 5:
                    scale = zoomLevelSet.ZoomLevel05.Scale;
                    break;
                case 6:
                    scale = zoomLevelSet.ZoomLevel04.Scale;
                    break;
                case 7:
                    scale = zoomLevelSet.ZoomLevel03.Scale;
                    break;
                case 8:
                    scale = zoomLevelSet.ZoomLevel02.Scale;
                    break;
                default:
                    break;
            }

            return scale;
        }
Example #21
0
        /// <summary>
        /// Draw reprojected features on the map
        /// </summary>
        private void ClearMapAndAddFeatures(Collection <Feature> reprojectedFeatures)
        {
            // Get the layer we prepared from the MapView
            InMemoryFeatureLayer reprojectedFeatureLayer = (InMemoryFeatureLayer)mapView.FindFeatureLayer("Reprojected Features Layer");

            // Clear old features from the feature layer and add the newly reprojected features
            reprojectedFeatureLayer.InternalFeatures.Clear();
            foreach (Feature sphericalMercatorFeature in reprojectedFeatures)
            {
                reprojectedFeatureLayer.InternalFeatures.Add(sphericalMercatorFeature);
            }

            // Set the map extent to zoom into the feature and refresh the map
            reprojectedFeatureLayer.Open();
            mapView.CurrentExtent = reprojectedFeatureLayer.GetBoundingBox();

            ZoomLevelSet standardZoomLevelSet = new ZoomLevelSet();

            mapView.ZoomToScale(standardZoomLevelSet.ZoomLevel18.Scale);

            reprojectedFeatureLayer.Close();
            mapView.Refresh();
        }
Example #22
0
        /// <summary>
        /// When a hotel is selected in the UI, center the map on it
        /// </summary>
        private void lsbHotels_SelectionChanged(object sender, SelectedItemChangedEventArgs selectedItemChangedEventArgs)
        {
            InMemoryFeatureLayer highlightedHotelLayer = (InMemoryFeatureLayer)mapView.FindFeatureLayer("Highlighted Hotel");

            highlightedHotelLayer.Open();
            highlightedHotelLayer.InternalFeatures.Clear();

            // Get the selected location
            Hotel hotel = lsbHotels.SelectedItem as Hotel;

            if (hotel != null)
            {
                highlightedHotelLayer.InternalFeatures.Add(new Feature(hotel.Location));

                // Center the map on the chosen location
                mapView.CurrentExtent = hotel.Location.GetBoundingBox();
                ZoomLevelSet standardZoomLevelSet = new ZoomLevelSet();
                mapView.ZoomToScale(standardZoomLevelSet.ZoomLevel18.Scale);
                mapView.Refresh();
            }

            highlightedHotelLayer.Close();
        }
 private void btnNormal_Click(object sender, RoutedEventArgs e)
 {
     ZoomLevelSet zoomLevelSet = new ZoomLevelSet();
     wpfMap1.CurrentExtent = ExtentHelper.ZoomToScale(zoomLevelSet.ZoomLevel05.Scale, wpfMap1.CurrentExtent, GeographyUnit.DecimalDegree, (float)wpfMap1.ActualWidth, (float)wpfMap1.ActualHeight);
     wpfMap1.Refresh();
 }
        /// <summary>
        /// Get all the features that will be drawn at the current zoom level.
        /// This method filter the input feature by using the containing layer's styles, .
        /// </summary>
        /// <param name="features">The input features.</param>
        /// <param name="containingLayer">The FeatureLayer that contains the features.</param>
        /// <returns>The features that are visible at current zoom level.</returns>
        public static IEnumerable <Feature> GetVisibleFeatures(this IEnumerable <Feature> features, ZoomLevelSet zoomLevelSet, RectangleShape boundingBox, double screenWidth, GeographyUnit mapUnit)
        {
            //ClassBreakStyle
            //ValueStyle
            ZoomLevel currentDrawingZoomLevel = zoomLevelSet.GetZoomLevelForDrawing(boundingBox, screenWidth, mapUnit);

            if (currentDrawingZoomLevel != null)
            {
                //if there are any default styles, then the features are visible
                //if there are any regular styles in the custom styles collection, then the features are visible
                if (ContainsCustomStyles(currentDrawingZoomLevel) || ContainsDefaultStyles(currentDrawingZoomLevel))
                {
                    foreach (var feature in features)
                    {
                        yield return(feature);
                    }
                }
                //if there are no default styles and there are no regular styles in the custom styles collection, then we need
                //to check every style in the custom styles collection to determine if a feature is visible
                else
                {
                    var valueStyles      = currentDrawingZoomLevel.CustomStyles.OfType <CompositeStyle>().SelectMany(c => c.Styles).OfType <ValueStyle>();
                    var classBreakStyles = currentDrawingZoomLevel.CustomStyles.OfType <CompositeStyle>().SelectMany(c => c.Styles).OfType <ClassBreakStyle>();
                    var filterStyles     = currentDrawingZoomLevel.CustomStyles.OfType <CompositeStyle>().SelectMany(c => c.Styles).OfType <FilterStyle>();

                    foreach (var feature in features)
                    {
                        bool isFeatureValidForValueStyle      = valueStyles.Any(valueStyle => ValidateFeature(feature, valueStyle));
                        bool isFeatureValidForClassBreakStyle = classBreakStyles.Any(classBreakStyle => ValidateFeature(feature, classBreakStyle));
                        bool isFeatureValidForFilterStyles    = filterStyles.Any(filterStyle => ValidateFeature(feature, filterStyle));

                        if (isFeatureValidForValueStyle || isFeatureValidForClassBreakStyle || isFeatureValidForFilterStyles)
                        {
                            yield return(feature);
                        }
                    }
                }
            }
        }
        public static void SaveToKmlMenuitemClick(object sender, RoutedEventArgs e)
        {
            Collection <Feature> features = GisEditor.SelectionManager.GetSelectedFeatures();

            if (features.All(i => !GisEditor.ActiveMap.CurrentExtent.Intersects(i)))
            {
                ShowOptionsIfNoSelectedFeatureInCurrentExtent(features);
                return;
            }

            Collection <FeatureLayer> featureLayers = new Collection <FeatureLayer>();
            var             featuresGroup           = GisEditor.SelectionManager.GetSelectionOverlay().GetSelectedFeaturesGroup();
            Proj4Projection tempProjection          = new Proj4Projection();

            tempProjection.InternalProjectionParametersString = GisEditor.ActiveMap.DisplayProjectionParameters;
            tempProjection.ExternalProjectionParametersString = Proj4Projection.GetWgs84ParametersString();
            tempProjection.SyncProjectionParametersString();

            try
            {
                tempProjection.Open();
                foreach (var item in featuresGroup)
                {
                    if (item.Value.Count > 0)
                    {
                        InMemoryFeatureLayer layer = new InMemoryFeatureLayer();
                        ZoomLevelSet         sourceZoomLevelSet = item.Key.ZoomLevelSet;
                        try
                        {
                            string       tempXml            = GisEditor.Serializer.Serialize(sourceZoomLevelSet);
                            ZoomLevelSet targetZoomLevelSet = (ZoomLevelSet)GisEditor.Serializer.Deserialize(tempXml);
                            layer.ZoomLevelSet = targetZoomLevelSet;

                            layer.Open();
                            layer.EditTools.BeginTransaction();
                            foreach (var feature in item.Value)
                            {
                                Feature newFeature = tempProjection.ConvertToExternalProjection(feature);
                                layer.EditTools.Add(newFeature);
                            }
                            layer.EditTools.CommitTransaction();

                            if (!item.Key.IsOpen)
                            {
                                item.Key.Open();
                            }
                            foreach (var column in item.Key.QueryTools.GetColumns())
                            {
                                layer.Columns.Add(column);
                            }

                            featureLayers.Add(layer);
                        }
                        catch (Exception ex)
                        {
                            GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                GisEditor.LoggerManager.Log(LoggerLevel.Debug, ex.Message, new ExceptionInfo(ex));
            }
            finally
            {
                tempProjection.Close();
            }

            KmlParameter parameter = GetKmlParameter();

            //System.Windows.Forms.SaveFileDialog sf = new System.Windows.Forms.SaveFileDialog();
            //sf.Filter = "(*.kml)|*.kml|(*.kmz)|*.kmz";
            //sf.FileName = string.Format("{0}-{1}", "KmlExportFile", DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss"));
            if (parameter != null)
            {
                if (Path.GetExtension(parameter.PathFileName).ToUpper() == ".KML")
                {
                    SaveKmlData(featureLayers, parameter);
                }
                else if (Path.GetExtension(parameter.PathFileName).ToUpper() == ".KMZ")
                {
                    StringBuilder         builder       = GetKmlDataBuilder(featureLayers);
                    PlatformGeoCanvas     canvas        = new PlatformGeoCanvas();
                    System.Drawing.Bitmap bitmap        = new System.Drawing.Bitmap((int)GisEditor.ActiveMap.ActualWidth, (int)GisEditor.ActiveMap.ActualHeight);
                    RectangleShape        drawingExtent = GetDrawingExtentInWgs84();
                    canvas.BeginDrawing(bitmap, drawingExtent, GeographyUnit.DecimalDegree);
                    featureLayers.ForEach(l =>
                    {
                        Proj4ProjectionInfo projectionInfo = l.GetProj4ProjectionInfo();
                        if (projectionInfo != null)
                        {
                            projectionInfo.ExternalProjectionParametersString = Proj4Projection.GetWgs84ParametersString();
                            projectionInfo.SyncProjectionParametersString();
                        }

                        l.Open();
                        l.Draw(canvas, new Collection <SimpleCandidate>());
                    });
                    canvas.EndDrawing();
                    string kmlPath = Path.ChangeExtension(parameter.PathFileName, ".kml");
                    string pngPath = Path.ChangeExtension(parameter.PathFileName, ".png");

                    if (File.Exists(kmlPath))
                    {
                        File.Delete(kmlPath);
                    }
                    if (File.Exists(pngPath))
                    {
                        File.Delete(pngPath);
                    }

                    MemoryStream stream = new MemoryStream();
                    bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Png);
                    byte[] bitmapArray = stream.GetBuffer();

                    File.WriteAllText(kmlPath, builder.ToString());
                    File.WriteAllBytes(pngPath, bitmapArray);

                    var zipFileAdapter = ZipFileAdapterManager.CreateInstance();
                    zipFileAdapter.AddFileToZipFile(kmlPath, "");
                    zipFileAdapter.AddFileToZipFile(pngPath, "");
                    zipFileAdapter.Save(Path.ChangeExtension(parameter.PathFileName, ".kmz"));
                    File.Delete(kmlPath);
                    File.Delete(pngPath);
                }

                string mentionedString = GisEditor.LanguageManager.GetStringResource("KMLFileHasSavedSuccessText");
                if (MessageBox.Show(mentionedString, "Open in Google Earth", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
                {
                    string proInstalledPath = GetGoogleEarthProInstalledPath();
                    OpenKmlFileWithGoogleEarth(string.IsNullOrEmpty(proInstalledPath) ? GetGoogleEarthInstalledPath() : proInstalledPath
                                               , parameter.PathFileName);
                }
            }
        }
Example #26
0
        private void TestForm_Load(object sender, EventArgs e)
        {
            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.StandardColors.LightGoldenrodYellow);

            //Scale bar to have a graphic representation of the scale
            ScaleBarAdornmentLayer scaleBar = new ScaleBarAdornmentLayer();

            scaleBar.UnitFamily = UnitSystem.Metric;
            scaleBar.Location   = AdornmentLocation.LowerLeft;
            winformsMap1.AdornmentOverlay.Layers.Add(scaleBar);

            //Snapping mode to none so that we can set and get the exact scale without snapping the map.
            winformsMap1.ZoomLevelSnapping = ZoomLevelSnappingMode.None;

            //Set of 10 zoom levels from 1:200,00 to 1:250 the zoom level below being half in scale compare to the previous zoom level.
            //Notice that the scale parameter for ZoomLevel is the middle scale for that zoom level. The range of scale for the zoom level
            //will be based on the scale values of the zoom level below and above.
            //As an academic reminder, the scale means the ratio on the map to the corresponding distance on the ground. So, a scale of 1:100,000
            //means that one unit (for example one centimeter) on the map represents 100,000 units ( or 100,000 centimeters or 1 kilometers on the ground).

            ZoomLevelSet partitionedZoomLevelSet = new ZoomLevelSet();

            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(200000)); //Zoom Level 1  1:200,000 (beyond 1:150,000)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(100000)); //Zoom Level 2  1:100,000 (from 1:75,000 to 1:150,000)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(50000));  //Zoom Level 3  1: 50,000 (from 1:37,000 to 1:75,000)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(25000));  //Zoom Level 4  1: 25,000 (from 1:17,000 to 1:37,500)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(10000));  //Zoom Level 5  1: 10,000 (from 1:7,500 to 1:17,500)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(5000));   //Zoom Level 6  1:  5,000 (from 1:3,750 to 1:7,500)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(2500));   //Zoom Level 7  1:  2,500 (from 1:1,750 to 1:3,750)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(1000));   //Zoom Level 8  1:  1,000 (from 1:750 to 1:1,750)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(500));    //Zoom Level 9  1:    500 (from 1:375 to 1:750)
            partitionedZoomLevelSet.CustomZoomLevels.Add(new ZoomLevel(250));    //Zoom Level 10 1:    250 (below 1:375)
            winformsMap1.ZoomLevelSet = partitionedZoomLevelSet;


            //Uses the Name property of ZoomLevel to give the characteristics such as the scale range.
            Collection <ZoomLevel> zoomLevels = winformsMap1.ZoomLevelSet.GetZoomLevels();

            for (int i = 0; i < zoomLevels.Count; i++)
            {
                string ScaleRange;
                double BottomScale, TopScale;
                if (i == 0)
                {
                    BottomScale = zoomLevels[i + 1].Scale + ((zoomLevels[i].Scale - zoomLevels[i + 1].Scale) / 2);
                    ScaleRange  = "Beyond 1: " + String.Format("{0:0,0}", BottomScale);
                }
                else if (i < zoomLevels.Count - 1)
                {
                    BottomScale = zoomLevels[i + 1].Scale + ((zoomLevels[i].Scale - zoomLevels[i + 1].Scale) / 2);
                    TopScale    = zoomLevels[i].Scale + ((zoomLevels[i - 1].Scale - zoomLevels[i].Scale) / 2);
                    ScaleRange  = "From 1: " + String.Format("{0:0,0}", BottomScale) + " to 1: " + String.Format("{0:0,0}", TopScale);
                }
                else
                {
                    TopScale   = zoomLevels[i].Scale + ((zoomLevels[i - 1].Scale - zoomLevels[i].Scale) / 2);
                    ScaleRange = "Below 1: " + String.Format("{0:0,0}", TopScale);
                }


                zoomLevels[i].Name = "Zoom Level " + (i + 1).ToString() + "                        " + ScaleRange;
            }


            ShapeFileFeatureLayer layer1 = new ShapeFileFeatureLayer(@"..\..\Data\Austinstreets.shp");

            //Sets the custom Zoom levels to ZoomLevelSet
            layer1.ZoomLevelSet = partitionedZoomLevelSet;
            //Set a different style at each zoom level to help distinguish when we change zoom level when zooming in and out on the map.
            layer1.ZoomLevelSet.CustomZoomLevels[0].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Red, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[1].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Green, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[2].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Pink, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[3].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Blue, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[4].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Orange, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[5].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Turquoise, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[6].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Violet, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[7].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.YellowGreen, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[8].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.Brown, 2, true);
            layer1.ZoomLevelSet.CustomZoomLevels[9].DefaultLineStyle = LineStyles.CreateSimpleLineStyle(GeoColor.StandardColors.DarkGreen, 2, true);

            LayerOverlay layerOverlay = new LayerOverlay();

            layerOverlay.Layers.Add(layer1);
            winformsMap1.Overlays.Add(layerOverlay);

            layer1.Open();
            winformsMap1.CurrentExtent = layer1.GetBoundingBox();
            layer1.Close();

            winformsMap1.Refresh();

            lblZoom.Text = winformsMap1.ZoomLevelSet.GetZoomLevel(winformsMap1.CurrentExtent, winformsMap1.Width, winformsMap1.MapUnit).Name;
        }
Example #27
0
        public static int GetZoom(ZoomLevelSet zoomLevelSet, double scale)
        {
            int zoom = -1;

            if (scale >= zoomLevelSet.ZoomLevel01.Scale)
            {
                zoom = 0;
            }
            else if (scale >= zoomLevelSet.ZoomLevel02.Scale)
            {
                zoom = 1;
            }
            else if (scale >= zoomLevelSet.ZoomLevel03.Scale)
            {
                zoom = 2;
            }
            else if (scale >= zoomLevelSet.ZoomLevel04.Scale)
            {
                zoom = 3;
            }
            else if (scale >= zoomLevelSet.ZoomLevel05.Scale)
            {
                zoom = 4;
            }
            else if (scale >= zoomLevelSet.ZoomLevel06.Scale)
            {
                zoom = 5;
            }
            else if (scale >= zoomLevelSet.ZoomLevel07.Scale)
            {
                zoom = 6;
            }
            else if (scale >= zoomLevelSet.ZoomLevel08.Scale)
            {
                zoom = 7;
            }
            else if (scale >= zoomLevelSet.ZoomLevel09.Scale)
            {
                zoom = 8;
            }
            else if (scale >= zoomLevelSet.ZoomLevel10.Scale)
            {
                zoom = 9;
            }
            else if (scale >= zoomLevelSet.ZoomLevel11.Scale)
            {
                zoom = 10;
            }
            else if (scale >= zoomLevelSet.ZoomLevel12.Scale)
            {
                zoom = 11;
            }
            else if (scale >= zoomLevelSet.ZoomLevel13.Scale)
            {
                zoom = 12;
            }
            else if (scale >= zoomLevelSet.ZoomLevel14.Scale)
            {
                zoom = 13;
            }
            else if (scale >= zoomLevelSet.ZoomLevel15.Scale)
            {
                zoom = 14;
            }
            else if (scale >= zoomLevelSet.ZoomLevel16.Scale)
            {
                zoom = 15;
            }
            else if (scale >= zoomLevelSet.ZoomLevel17.Scale)
            {
                zoom = 16;
            }
            else if (scale >= zoomLevelSet.ZoomLevel18.Scale)
            {
                zoom = 17;
            }
            else if (scale >= zoomLevelSet.ZoomLevel19.Scale)
            {
                zoom = 18;
            }
            else
            {
                zoom = 19;
            }
            return(zoom);
        }