diff --git a/Testing/WPF-GMapControlNew/GMapControlNew.xaml.cs b/Testing/WPF-GMapControlNew/GMapControlNew.xaml.cs deleted file mode 100644 --- a/Testing/WPF-GMapControlNew/GMapControlNew.xaml.cs +++ /dev/null @@ -1,1323 +0,0 @@ - -namespace GMap.NET.WindowsPresentation -{ - using System; - using System.Collections.Generic; - using System.Collections.ObjectModel; - using System.ComponentModel; - using System.Diagnostics; - using System.Globalization; - using System.Linq; - using System.Windows; - using System.Windows.Controls; - using System.Windows.Input; - using System.Windows.Media; - using System.Windows.Media.Animation; - using System.Windows.Media.Effects; - using System.Windows.Media.Imaging; - using System.Windows.Shapes; - using System.Windows.Threading; - using GMap.NET; - using GMap.NET.Internals; - - /// - /// GMap.NET control for Windows Presentation - /// >> for testing purpose only >> - /// - [ToolboxItem(false)] - public partial class GMapControlNew : UserControl, Interface - { - readonly Core Core = new Core(); - GRect region = new GRect(); - bool RaiseEmptyTileError = false; - delegate void MethodInvoker(); - PointLatLng selectionStart; - PointLatLng selectionEnd; - Typeface tileTypeface = new Typeface("Arial"); - double zoomReal; - bool showTileGridLines = false; - - FormattedText googleCopyright; - FormattedText yahooMapCopyright; - FormattedText virtualEarthCopyright; - FormattedText openStreetMapCopyright; - FormattedText arcGisMapCopyright; - - /// - /// pen for empty tile borders - /// - public Pen EmptyTileBorders = new Pen(Brushes.White, 1.0); - - /// - /// pen for Selection - /// - public Pen SelectionPen = new Pen(Brushes.Blue, 3.0); - - /// - /// /// - /// pen for empty tile background - /// - public Brush EmptytileBrush = Brushes.Navy; - - /// - /// occurs on empty tile displayed - /// - public event EmptyTileError OnEmptyTileError; - - /// - /// text on empty tiles - /// - public FormattedText EmptyTileText = new FormattedText("We are sorry, but we don't\nhave imagery at this zoom\n level for this region.", System.Globalization.CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("Arial"), 16, Brushes.White); - - /// - /// max zoom - /// - public int MaxZoom = 2; - - /// - /// min zoom - /// - public int MinZoom = 2; - - /// - /// map zooming type for mouse wheel - /// - public MouseWheelZoomType MouseWheelZoomType = MouseWheelZoomType.MousePositionAndCenter; - - /// - /// center mouse OnMouseWheel - /// - public bool CenterPositionOnMouseWheel = true; - - /// - /// map dragg button - /// - public MouseButton DragButton = MouseButton.Right; - - /// - /// zoom increment on mouse wheel - /// - public double ZoomIncrement = 1.0; - - /// - /// shows tile gridlines - /// - [Category("GMap.NET")] - public bool ShowTileGridLines - { - get - { - return showTileGridLines; - } - set - { - showTileGridLines = value; - InvalidateVisual(); - } - } - - /// - /// current selected area in map - /// - private RectLatLng selectedArea; - - [Browsable(false)] - public RectLatLng SelectedArea - { - get - { - return selectedArea; - } - set - { - selectedArea = value; - InvalidateVisual(); - } - } - - /// - /// map boundaries - /// - public RectLatLng? BoundsOfMap = null; - - /// - /// list of markers - /// - public readonly ObservableCollection Markers = new ObservableCollection(); - - /// - /// current map transformation - /// - internal Transform MapRenderTransform; - - /// - /// current markers overlay offset - /// - internal TranslateTransform MapTranslateTransform = new TranslateTransform(); - - /// - /// map zoom - /// - [Category("GMap.NET")] - public double Zoom - { - get - { - return zoomReal; - } - set - { - if(zoomReal != value) - { - if(value > MaxZoom) - { - zoomReal = MaxZoom; - } - else - if(value < MinZoom) - { - zoomReal = MinZoom; - } - else - { - zoomReal = value; - } - - double remainder = (double) System.Decimal.Remainder((Decimal) value, (Decimal) 1); - if(remainder != 0) - { - double scaleValue = remainder + 1; - { - MapRenderTransform = new ScaleTransform(scaleValue, scaleValue, ActualWidth / 2, ActualHeight / 2); - } - - if(IsLoaded) - { - //DisplayZoomInFadeImage(); - } - - ZoomStep = Convert.ToInt32(value - remainder); - - Core_OnMapZoomChanged(); - - InvalidateVisual(); - } - else - { - MapRenderTransform = null; - ZoomStep = Convert.ToInt32(value); - InvalidateVisual(); - } - } - } - } - - protected bool DesignModeInConstruct - { - get - { - //Are we in Visual Studio Designer? - return System.ComponentModel.DesignerProperties.GetIsInDesignMode(this); - } - } - - Canvas mapCanvas = null; - - /// - /// markers overlay - /// - internal Canvas MapCanvas - { - get - { - if(mapCanvas == null) - { - // if(ObjectsLayer.VisualChildrenCount > 0) - { - Border border = VisualTreeHelper.GetChild(ObjectsLayer, 0) as Border; - ItemsPresenter items = border.Child as ItemsPresenter; - DependencyObject target = VisualTreeHelper.GetChild(items, 0); - mapCanvas = target as Canvas; - } - } - - return mapCanvas; - } - } - - public GMaps Manager - { - get - { - return GMaps.Instance; - } - } - - public GMapControlNew() - { - InitializeComponent(); - - if(!DesignModeInConstruct) - { - ObjectsLayer.ItemsSource = Markers; - - // removes white lines between tiles! - SetValue(RenderOptions.EdgeModeProperty, EdgeMode.Unspecified); - - // set image proxy - Manager.ImageProxy = new WindowsPresentationImageProxy(); - - //Core.RenderMode = GMap.NET.RenderMode.WPF; - //Core.OnNeedInvalidation += new NeedInvalidation(Core_OnNeedInvalidation); - //Core.OnMapZoomChanged += new MapZoomChanged(Core_OnMapZoomChanged); - - Loaded += new RoutedEventHandler(GMapControl_Loaded); - Unloaded += new RoutedEventHandler(GMapControl_Unloaded); - - googleCopyright = new FormattedText(Core.googleCopyright, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("GenericSansSerif"), 9, Brushes.Navy); - yahooMapCopyright = new FormattedText(Core.yahooMapCopyright, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("GenericSansSerif"), 9, Brushes.Navy); - virtualEarthCopyright = new FormattedText(Core.virtualEarthCopyright, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("GenericSansSerif"), 9, Brushes.Navy); - openStreetMapCopyright = new FormattedText(Core.openStreetMapCopyright, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("GenericSansSerif"), 9, Brushes.Navy); - arcGisMapCopyright = new FormattedText(Core.arcGisCopyright, CultureInfo.CurrentUICulture, FlowDirection.LeftToRight, new Typeface("GenericSansSerif"), 9, Brushes.Navy); - - MapType = MapType.GoogleMap; - - OpacityAnimation = CreateOpacityAnimation(1); - ZoomAnimation = CreateZoomAnimation(2); - MoveAnimation = CreateMoveAnimation(2); - } - } - - DoubleAnimation CreateZoomAnimation(double toValue) - { - var da = new DoubleAnimation(toValue, new Duration(TimeSpan.FromMilliseconds(555))); - da.AccelerationRatio = 0.1; - da.DecelerationRatio = 0.9; - da.FillBehavior = FillBehavior.HoldEnd; - da.Freeze(); - return da; - } - - DoubleAnimation CreateMoveAnimation(double toValue) - { - var da = new DoubleAnimation(toValue, new Duration(TimeSpan.FromMilliseconds(555))); - da.AccelerationRatio = 0.1; - da.DecelerationRatio = 0.9; - da.FillBehavior = FillBehavior.HoldEnd; - da.Freeze(); - return da; - } - - DoubleAnimation CreateOpacityAnimation(double toValue) - { - var da = new DoubleAnimation(toValue, new Duration(TimeSpan.FromMilliseconds(555))); - da.AccelerationRatio = 0.5; - da.DecelerationRatio = 0.5; - da.FillBehavior = FillBehavior.HoldEnd; - da.Freeze(); - return da; - } - - void BeginAnimateOpacity(TileVisual target) - { - target.Opacity = 0.4; - target.BeginAnimation(TileVisual.OpacityProperty, OpacityAnimation, HandoffBehavior.Compose); - } - - void BeginAnimateZoom(TileVisual target) - { - //target.TranslateTransform.BeginAnimation(TranslateTransform.XProperty, MoveAnimation, HandoffBehavior.Compose); - //target.TranslateTransform.BeginAnimation(TranslateTransform.YProperty, MoveAnimation, HandoffBehavior.Compose); - //target.ScaleTransform.BeginAnimation(ScaleTransform.ScaleYProperty, ZoomAnimation, HandoffBehavior.Compose); - //target.ScaleTransform.BeginAnimation(ScaleTransform.ScaleXProperty, ZoomAnimation, HandoffBehavior.Compose); - } - - DoubleAnimation OpacityAnimation; - DoubleAnimation ZoomAnimation; - DoubleAnimation MoveAnimation; - - QuadTree QuadTree = new QuadTree(); - - bool update = true; - Dictionary images = new Dictionary(); - System.Windows.Size TilesSize = new System.Windows.Size(); - - Stopwatch _stopwatch = new Stopwatch(); - ushort _frameCounter; - ushort _frameCounterUpdate; - int count = 0; - - protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo) - { - base.OnRenderSizeChanged(sizeInfo); - - { - System.Windows.Size constraint = sizeInfo.NewSize; - region = new GRect(-50, -50, (int) constraint.Width + 100, (int) constraint.Height + 100); - - TilesLayer.Width = sizeInfo.NewSize.Width; - TilesLayer.Height = sizeInfo.NewSize.Height; - - QuadTree.Bounds = new Rect(sizeInfo.NewSize); - } - - //var sizeInPx = Projection.GetTileMatrixSizePixel(ZoomStep); - //TilesLayer.Width = sizeInPx.Width; - //TilesLayer.Height = sizeInPx.Height; - - if(IsLoaded) - { - Refresh(); - } - } - - void CompositionTargetEx_FrameUpdating(object sender, RenderingEventArgs e) - { - if(update) - { - _frameCounterUpdate++; - update = false; - - #region -- add image -- - for(int x = 0; x < TilesSize.Width; x++) - { - for(int y = 0; y < TilesSize.Height; y++) - { - var rawTile = new RawTile(MapType.GoogleHybrid, new GPoint(x, y), ZoomStep); - var rectTilePx = new Rect(x*Projection.TileSize.Width, y*Projection.TileSize.Height, Projection.TileSize.Width, Projection.TileSize.Height); - - TileVisual image = null; - if(!images.TryGetValue(rawTile, out image)) - { - var layers = GMaps.Instance.GetAllLayersOfType(rawTile.Type); - - ImageSource[] imgs = new ImageSource[layers.Length]; - - // get tiles - for(int i = 0; i < layers.Length; i++) - { - Exception ex; - var res = GMaps.Instance.GetImageFrom(layers[i], rawTile.Pos, rawTile.Zoom, out ex) as WindowsPresentationImage; - if(res != null) - { - imgs[i] = res.Img; - } - } - - // combine visual - image = new TileVisual(imgs, rawTile); - images.Add(rawTile, image); - - Canvas.SetZIndex(image, -1); - } - - bool ri = (region.IntersectsWith(new GRect((int) (rectTilePx.X + renderOffset.X), (int) (rectTilePx.Y + renderOffset.Y), (int) rectTilePx.Width, (int) rectTilePx.Height))); - if(TilesLayer.Children.Contains(image)) - { - if(ri) - { - image.MoveTo(Math.Round(rectTilePx.X) + 0.6 + renderOffset.X, Math.Round(rectTilePx.Y) + 0.6 + renderOffset.Y); - } - else - { - TilesLayer.Children.Remove(image); - } - } - else - { - if(ri) - { - image.MoveTo(Math.Round(rectTilePx.X) + 0.6 + renderOffset.X, Math.Round(rectTilePx.Y) + 0.6 + renderOffset.Y); - BeginAnimateOpacity(image); - { - TilesLayer.Children.Add(image); - } - } - } - //break; - } - //break; - } - - count = TilesLayer.Children.Count; - - #endregion - } - - if(_stopwatch.ElapsedMilliseconds >= 1000) - { - _stopwatch.Stop(); - - perfInfo.Text = "FPS: " + (ushort) (_frameCounter/_stopwatch.Elapsed.TotalSeconds) + " | " + (ushort) (_frameCounterUpdate/_stopwatch.Elapsed.TotalSeconds) + " | " + count + " tiles"; - - _frameCounter = 0; - _frameCounterUpdate = 0; - _stopwatch.Reset(); - _stopwatch.Start(); - } - else - { - _frameCounter++; - } - } - - void GMapControl_Loaded(object sender, RoutedEventArgs e) - { - CompositionTargetEx.FrameUpdating += new EventHandler(CompositionTargetEx_FrameUpdating); - _stopwatch.Start(); - - Refresh(); - - //Core.StartSystem(); - //Core_OnMapZoomChanged(); - } - - void GMapControl_Unloaded(object sender, RoutedEventArgs e) - { - CompositionTargetEx.FrameUpdating -= new EventHandler(CompositionTargetEx_FrameUpdating); - _stopwatch.Stop(); - - //Core.OnMapClose(); - } - - private void Refresh() - { - update = true; - InvalidateVisual(); - } - - //rotected override System.Windows.Size ArrangeOverride(System.Windows.Size finalSize) - /// - //MapBase parentMap = this.ParentMap; - //foreach(UIElement element in base.Children) - //{ - // Rect finalRect = new Rect(0.0, 0.0, parentMap.ViewportSize.Width, parentMap.ViewportSize.Height); - // LocationRect positionRectangle = GetPositionRectangle(element); - // if(positionRectangle != null) - // { - // finalRect = parentMap.Mode.LocationToViewportPoint(positionRectangle); - // } - // else - // { - // Point point; - // Location position = GetPosition(element); - // if((position != null) && parentMap.TryLocationToViewportPoint(position, out point)) - // { - // PositionOrigin positionOrigin = GetPositionOrigin(element); - // point.X -= positionOrigin.X * element.DesiredSize.Width; - // point.Y -= positionOrigin.Y * element.DesiredSize.Height; - // finalRect = new Rect(point.X, point.Y, element.DesiredSize.Width, element.DesiredSize.Height); - // } - // } - // Point positionOffset = GetPositionOffset(element); - // finalRect.X += positionOffset.X; - // finalRect.Y += positionOffset.Y; - // element.Arrange(finalRect); - //} - //return parentMap.ViewportSize; - // - - //protected override Size MeasureOverride(Size availableSize) - //{ - // MapBase parentMap = this.ParentMap; - // Guid lastProjectPassTag = this.lastProjectPassTag; - // this.lastProjectPassTag = Guid.NewGuid(); - // foreach(UIElement element in base.Children) - // { - // IProjectable projectable = element as IProjectable; - // if(projectable != null) - // { - // ProjectionUpdateLevel pendingUpdate = this.pendingUpdate; - // if(((Guid) element.GetValue(ProjectionUpdatedTag)) != lastProjectPassTag) - // { - // pendingUpdate = ProjectionUpdateLevel.Full; - // } - // if(pendingUpdate != ProjectionUpdateLevel.None) - // { - // projectable.ProjectionUpdated(pendingUpdate); - // } - // element.SetValue(ProjectionUpdatedTag, this.lastProjectPassTag); - // } - // } - // this.pendingUpdate = ProjectionUpdateLevel.None; - // foreach(UIElement element2 in base.Children) - // { - // LocationRect positionRectangle = GetPositionRectangle(element2); - // if(positionRectangle != null) - // { - // Rect rect2 = parentMap.Mode.LocationToViewportPoint(positionRectangle); - // element2.Measure(new Size(rect2.Width, rect2.Height)); - // } - // else - // { - // if((element2 is ContentPresenter) && (VisualTreeHelper.GetChildrenCount(element2) > 0)) - // { - // IProjectable child = VisualTreeHelper.GetChild(element2, 0) as IProjectable; - // if(child != null) - // { - // child.ProjectionUpdated(ProjectionUpdateLevel.Full); - // UIElement element3 = child as UIElement; - // if(element3 != null) - // { - // element3.InvalidateMeasure(); - // } - // } - // } - // element2.Measure(parentMap.ViewportSize); - // } - // } - // return parentMap.ViewportSize; - //} - - #region -- etc -- - void Core_OnMapZoomChanged() - { - //UpdateMarkersOffset(); - - foreach(var i in Markers) - { - //i.ForceUpdateLocalPosition(this); - } - - var routes = Markers.Where(p => p != null && p.Route.Count > 1); - if(routes != null) - { - foreach(var i in routes) - { - //i.RegenerateRouteShape(this); - } - } - } - - /// - /// on core needs invalidation - /// - void Core_OnNeedInvalidation() - { - try - { - this.Dispatcher.BeginInvoke(DispatcherPriority.Render, new MethodInvoker(Refresh)); - } - catch - { - } - } - - /// - /// updates markers overlay offset - /// - void UpdateMarkersOffset() - { - if(MapCanvas != null) - { - if(MapRenderTransform != null) - { - var tp = MapRenderTransform.Transform(new System.Windows.Point(Core.renderOffset.X, Core.renderOffset.Y)); - MapTranslateTransform.X = tp.X; - MapTranslateTransform.Y = tp.Y; - } - else - { - MapTranslateTransform.X = Core.renderOffset.X; - MapTranslateTransform.Y = Core.renderOffset.Y; - } - - MapCanvas.RenderTransform = MapTranslateTransform; - } - } - - /// - /// gets image of the current view - /// - /// - public ImageSource ToImageSource() - { - FrameworkElement obj = this; - - // Save current canvas transform - Transform transform = obj.LayoutTransform; - obj.LayoutTransform = null; - - // fix margin offset as well - Thickness margin = obj.Margin; - obj.Margin = new Thickness(0, 0, - margin.Right - margin.Left, margin.Bottom - margin.Top); - - // Get the size of canvas - System.Windows.Size size = new System.Windows.Size(obj.ActualWidth, obj.ActualHeight); - - // force control to Update - obj.Measure(size); - obj.Arrange(new Rect(size)); - - RenderTargetBitmap bmp = new RenderTargetBitmap( - (int) size.Width, (int) size.Height, 96, 96, PixelFormats.Pbgra32); - - bmp.Render(obj); - - if(bmp.CanFreeze) - { - bmp.Freeze(); - } - - // return values as they were before - obj.LayoutTransform = transform; - obj.Margin = margin; - - return bmp; - } - - /// - /// creates path from list of points - /// - /// - /// - public Path CreateRoutePath(List localPath) - { - // Create a StreamGeometry to use to specify myPath. - StreamGeometry geometry = new StreamGeometry(); - - using(StreamGeometryContext ctx = geometry.Open()) - { - ctx.BeginFigure(localPath[0], false, false); - - // Draw a line to the next specified point. - ctx.PolyLineTo(localPath, true, true); - } - - // Freeze the geometry (make it unmodifiable) - // for additional performance benefits. - geometry.Freeze(); - - // Create a path to draw a geometry with. - Path myPath = new Path(); - { - // Specify the shape of the Path using the StreamGeometry. - myPath.Data = geometry; - - BlurEffect ef = new BlurEffect(); - { - ef.KernelType = KernelType.Gaussian; - ef.Radius = 3.0; - ef.RenderingBias = RenderingBias.Quality; - } - - myPath.Effect = ef; - - myPath.Stroke = Brushes.Navy; - myPath.StrokeThickness = 5; - myPath.StrokeLineJoin = PenLineJoin.Round; - myPath.StrokeStartLineCap = PenLineCap.Triangle; - myPath.StrokeEndLineCap = PenLineCap.Square; - myPath.Opacity = 0.6; - } - return myPath; - } - - /// - /// sets zoom to max to fit rect - /// - /// area - /// - public bool SetZoomToFitRect(RectLatLng rect) - { - int maxZoom = Core.GetMaxZoomToFitRect(rect); - if(maxZoom > 0) - { - PointLatLng center = new PointLatLng(rect.Lat - (rect.HeightLat / 2), rect.Lng + (rect.WidthLng / 2)); - Position = center; - - if(maxZoom > MaxZoom) - { - maxZoom = MaxZoom; - } - - if(ZoomStep != maxZoom) - { - Zoom = maxZoom; - } - - return true; - } - return false; - } - - /// - /// sets to max zoom to fit all markers and centers them in map - /// - /// z index or null to check all - /// - public bool ZoomAndCenterMarkers(int? ZIndex) - { - RectLatLng? rect = GetRectOfAllMarkers(ZIndex); - if(rect.HasValue) - { - return SetZoomToFitRect(rect.Value); - } - - return false; - } - - /// - /// gets rectangle with all objects inside - /// - /// z index or null to check all - /// - public RectLatLng? GetRectOfAllMarkers(int? ZIndex) - { - RectLatLng? ret = null; - - double left = double.MaxValue; - double top = double.MinValue; - double right = double.MinValue; - double bottom = double.MaxValue; - IEnumerable Overlays; - - if(ZIndex.HasValue) - { - Overlays = Markers.Where(p => p != null && p.ZIndex == ZIndex); - } - else - { - Overlays = Markers; - } - - if(Overlays != null) - { - foreach(var m in Overlays) - { - if(m.Shape != null && m.Shape.IsVisible) - { - // left - if(m.Position.Lng < left) - { - left = m.Position.Lng; - } - - // top - if(m.Position.Lat > top) - { - top = m.Position.Lat; - } - - // right - if(m.Position.Lng > right) - { - right = m.Position.Lng; - } - - // bottom - if(m.Position.Lat < bottom) - { - bottom = m.Position.Lat; - } - } - } - } - - if(left != double.MaxValue && right != double.MinValue && top != double.MinValue && bottom != double.MaxValue) - { - ret = RectLatLng.FromLTRB(left, top, right, bottom); - } - - return ret; - } - #endregion - - #region UserControl Events - - //double move; - protected override void OnMouseWheel(MouseWheelEventArgs e) - { - base.OnMouseWheel(e); - - if(e.Delta > 0) - { - ZoomStep++; - - //ZoomAnimation = CreateZoomAnimation(ZoomStep); - - // move -= Projection.TileSize.Width; - //MoveAnimation = CreateMoveAnimation(move); - } - else - { - ZoomStep--; - - //ZoomAnimation = CreateZoomAnimation(ZoomStep); - - //move += Projection.TileSize.Width; - //MoveAnimation = CreateMoveAnimation(move); - } - //Refresh(); - } - - bool isSelected = false; - - System.Windows.Point? mouseDown = null; - static readonly System.Windows.Point Empty = new System.Windows.Point(); - - protected override void OnMouseDown(MouseButtonEventArgs e) - { - if(CanDragMap && e.ChangedButton == DragButton && e.ButtonState == MouseButtonState.Pressed) - { - mouseDown = e.GetPosition(TilesLayer); - - dragPoint.X = mouseDown.Value.X - renderOffset.X; - dragPoint.Y = mouseDown.Value.Y - renderOffset.Y; - - Mouse.Capture(TilesLayer); - } - - base.OnMouseDown(e); - } - - protected override void OnMouseUp(MouseButtonEventArgs e) - { - base.OnMouseUp(e); - - mouseDown = null; - Mouse.Capture(null); - } - - System.Windows.Point renderOffset = new System.Windows.Point(); - System.Windows.Point dragPoint = new System.Windows.Point(); - - protected override void OnMouseMove(MouseEventArgs e) - { - base.OnMouseMove(e); - - if(mouseDown.HasValue) - { - System.Windows.Point p = e.GetPosition(TilesLayer); - - //TileOffset.Y += p.Y - mouseDown.Value.Y; - //TileOffset.X += p.X - mouseDown.Value.X; - - renderOffset.X = p.X - dragPoint.X; - renderOffset.Y = p.Y - dragPoint.Y; - - Refresh(); - } - } - - #endregion - - #region IGControl Members - - public void ReloadMap() - { - Core.ReloadMap(); - } - - public GeoCoderStatusCode SetCurrentPositionByKeywords(string keys) - { - GeoCoderStatusCode status = GeoCoderStatusCode.Unknow; - PointLatLng? pos = Manager.GetLatLngFromGeocoder(keys, out status); - if(pos.HasValue && status == GeoCoderStatusCode.G_GEO_SUCCESS) - { - Position = pos.Value; - } - - return status; - } - - public PointLatLng FromLocalToLatLng(int x, int y) - { - if(MapRenderTransform != null) - { - var tp = MapRenderTransform.Inverse.Transform(new System.Windows.Point(x, y)); - x = (int) tp.X; - y = (int) tp.Y; - } - - return Core.FromLocalToLatLng(x, y); - } - - public GPoint FromLatLngToLocal(PointLatLng point) - { - GPoint ret = Core.FromLatLngToLocal(point); - - if(MapRenderTransform != null) - { - var tp = MapRenderTransform.Transform(new System.Windows.Point(ret.X, ret.Y)); - ret.X = (int) tp.X; - ret.Y = (int) tp.Y; - } - - if(MapTranslateTransform != null) - { - ret.Offset(-(int) MapTranslateTransform.X, -(int) MapTranslateTransform.Y); - } - - return ret; - } - - public bool ShowExportDialog() - { -#if SQLite - if(Cache.Instance.ImageCache is GMap.NET.CacheProviders.SQLitePureImageCache) - { - Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); - { - dlg.CheckPathExists = true; - dlg.CheckFileExists = false; - dlg.AddExtension = true; - dlg.DefaultExt = "gmdb"; - dlg.ValidateNames = true; - dlg.Title = "GMap.NET: Export map to db, if file exsist only new data will be added"; - dlg.FileName = "DataExp"; - dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); - dlg.Filter = "GMap.NET DB files (*.gmdb)|*.gmdb"; - dlg.FilterIndex = 1; - dlg.RestoreDirectory = true; - - if(dlg.ShowDialog() == true) - { - bool ok = GMaps.Instance.ExportToGMDB(dlg.FileName); - if(ok) - { - MessageBox.Show("Complete!", "GMap.NET", MessageBoxButton.OK, MessageBoxImage.Information); - } - else - { - MessageBox.Show(" Failed!", "GMap.NET", MessageBoxButton.OK, MessageBoxImage.Warning); - } - - return ok; - } - } - } - else - { - MessageBox.Show("Failed! Only SQLite support ;/", "GMap.NET", MessageBoxButton.OK, MessageBoxImage.Warning); - } -#endif - return false; - } - - public bool ShowImportDialog() - { -#if SQLite - if(Cache.Instance.ImageCache is GMap.NET.CacheProviders.SQLitePureImageCache) - { - Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); - { - dlg.CheckPathExists = true; - dlg.CheckFileExists = false; - dlg.AddExtension = true; - dlg.DefaultExt = "gmdb"; - dlg.ValidateNames = true; - dlg.Title = "GMap.NET: Import to db, only new data will be added"; - dlg.FileName = "DataImport"; - dlg.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); - dlg.Filter = "GMap.NET DB files (*.gmdb)|*.gmdb"; - dlg.FilterIndex = 1; - dlg.RestoreDirectory = true; - - if(dlg.ShowDialog() == true) - { - Cursor = Cursors.Wait; - - bool ok = GMaps.Instance.ImportFromGMDB(dlg.FileName); - if(ok) - { - MessageBox.Show("Complete!", "GMap.NET", MessageBoxButton.OK, MessageBoxImage.Information); - ReloadMap(); - } - else - { - MessageBox.Show(" Failed!", "GMap.NET", MessageBoxButton.OK, MessageBoxImage.Warning); - } - - Cursor = Cursors.Arrow; - - return ok; - } - } - } - else - { - MessageBox.Show("Failed! Only SQLite support ;/", "GMap.NET", MessageBoxButton.OK, MessageBoxImage.Warning); - } -#endif - return false; - } - - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Browsable(false)] - internal int ZoomStep - { - get - { - return Core.Zoom; - } - set - { - if(value > MaxZoom) - { - Core.Zoom = MaxZoom; - } - else if(value < MinZoom) - { - Core.Zoom = MinZoom; - } - else - { - bool changed = (Core.Zoom != value); - Core.Zoom = value; - if(changed) - { - foreach(UIElement u in TilesLayer.Children) - { - var m = u as TileVisual; - if(m != null) - { - if(images.ContainsKey(m.Tile)) - { - images.Remove(m.Tile); - m.Source.Clear(); - } - } - } - - TilesLayer.Children.Clear(); - - var sizeinTiles = Projection.GetTileMatrixSizeXY(ZoomStep); - TilesSize.Width = sizeinTiles.Width; - TilesSize.Height = sizeinTiles.Height; - - if(IsLoaded) - { - Refresh(); - } - } - } - } - } - - [Browsable(false)] - public PointLatLng Position - { - get - { - return Core.CurrentPosition; - } - set - { - Core.CurrentPosition = value; - UpdateMarkersOffset(); - } - } - - [Browsable(false)] - public GPoint CurrentPositionGPixel - { - get - { - return Core.CurrentPositionGPixel; - } - } - - [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] - [Browsable(false)] - public string CacheLocation - { - get - { - return Cache.Instance.CacheLocation; - } - set - { - Cache.Instance.CacheLocation = value; - } - } - - [Browsable(false)] - public bool IsDragging - { - get - { - return Core.IsDragging; - } - } - - [Browsable(false)] - public RectLatLng CurrentViewArea - { - get - { - return Core.CurrentViewArea; - } - } - - [Category("GMap.NET")] - public MapType MapType - { - get - { - return Core.MapType; - } - set - { - Core.MapType = value; - } - } - - [Browsable(false)] - public PureProjection Projection - { - get - { - return Core.Projection; - } - } - - [Category("GMap.NET")] - public bool CanDragMap - { - get - { - return Core.CanDragMap; - } - set - { - Core.CanDragMap = value; - } - } - - public GMap.NET.RenderMode RenderMode - { - get - { - return GMap.NET.RenderMode.WPF; - } - } - - #endregion - - #region IGControl event Members - - public event PositionChanged OnPositionChanged - { - add - { - Core.OnCurrentPositionChanged += value; - } - remove - { - Core.OnCurrentPositionChanged -= value; - } - } - - public event TileLoadComplete OnTileLoadComplete - { - add - { - Core.OnTileLoadComplete += value; - } - remove - { - Core.OnTileLoadComplete -= value; - } - } - - public event TileLoadStart OnTileLoadStart - { - add - { - Core.OnTileLoadStart += value; - } - remove - { - Core.OnTileLoadStart -= value; - } - } - - public event MapDrag OnMapDrag - { - add - { - Core.OnMapDrag += value; - } - remove - { - Core.OnMapDrag -= value; - } - } - - public event MapZoomChanged OnMapZoomChanged - { - add - { - Core.OnMapZoomChanged += value; - } - remove - { - Core.OnMapZoomChanged -= value; - } - } - - /// - /// occures on map type changed - /// - public event MapTypeChanged OnMapTypeChanged - { - add - { - Core.OnMapTypeChanged += value; - } - remove - { - Core.OnMapTypeChanged -= value; - } - } - - #endregion - } - - static class Extensions - { - public static void CenterAt(this FrameworkElement element, System.Windows.Point center) - { - CenterAt(element, center.X, center.Y); - } - - public static void CenterAt(this FrameworkElement element, double x, double y) - { - MoveTo(element, x - element.Width / 2, y - element.Height / 2); - } - - public static void MoveTo(this UIElement element, double x, double y) - { - Canvas.SetLeft(element, x); - Canvas.SetTop(element, y); - } - - public static void MoveTo(this UIElement element, System.Windows.Point position) - { - MoveTo(element, position.X, position.Y); - } - - public static void MoveOffset(this UIElement element, double xOffset, double yOffset) - { - if(element == null || double.IsNaN(xOffset) || double.IsNaN(yOffset)) - { - return; - } - var coordinates = element.GetCoordinates(); - Canvas.SetLeft(element, coordinates.X + xOffset); - Canvas.SetTop(element, coordinates.Y + yOffset); - } - - public static System.Windows.Point GetCoordinates(this UIElement element) - { - return new System.Windows.Point(Canvas.GetLeft(element), Canvas.GetTop(element)); - } - - public static System.Windows.Rect GetRect(this UIElement element) - { - return new System.Windows.Rect(element.GetCoordinates(), element.RenderSize); - } - } -} \ No newline at end of file