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