123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- using System;
- using System.Collections.Generic;
- using System.Collections.ObjectModel;
- using System.Drawing;
- using System.Linq;
- using System.Windows;
- using System.Windows.Input;
- using System.Windows.Media.Imaging;
- using Google.Maps;
- using Google.Maps.StaticMaps;
- using InABox.Core;
- using InABox.Wpf;
- using Syncfusion.Linq;
- using Location = Google.Maps.Location;
- namespace PRSDesktop.Forms
- {
-
- /// <summary>
- /// Interaction logic for MapForm.xaml
- /// </summary>
- public partial class MapForm : ThemableWindow
- {
- String GOOGLE_KEY = "AIzaSyChZhoJCzeaOm8q2QMm2KJOgc26aCeopjQ";
- StaticMapRequest request = new StaticMapRequest();
- StaticMapService service = new StaticMapService();
- private double _zoom = 18.0;
-
- public BitmapImage ToImage(byte[] array)
- {
- using (var ms = new System.IO.MemoryStream(array))
- {
- var image = new BitmapImage();
- image.BeginInit();
- image.CacheOption = BitmapCacheOption.OnLoad; // here
- image.StreamSource = ms;
- image.EndInit();
- return image;
- }
- }
- public MapForm(double latitude, double longitude, DateTime timestamp, string? geometry = null)
- {
- InitializeComponent();
- GoogleSigned.AssignAllServices(new GoogleSigned(GOOGLE_KEY));
- request = new StaticMapRequest();
- String sLoc = String.Format("{0},{1}", latitude, longitude);
- Location location = new Location(sLoc);
- request.Center = location;
- request.Markers.Add(location);
- request.Scale = 2;
- request.Size = new MapSize(640,640); // Convert.ToInt32(ActualWidth)-20, Convert.ToInt32(ActualHeight)-20);
-
- request.Format = GMapsImageFormats.JPG;
- if (!string.IsNullOrWhiteSpace(geometry))
- {
- var perims = Serialization.Deserialize<Dictionary<string, List<PointF>>>(geometry) ?? new Dictionary<string, List<PointF>>();
- var paths = new List<Path>();
- foreach (var perim in perims)
- {
- var path = new Path()
- {
- Points = new Collection<Location>(perim.Value.Select(x => new Location($"{x.Y},{x.X}")).ToList()),
- Color = MapColor.FromArgb(255, 255, 0, 0),
- FillColor = MapColor.FromArgb(64, 255, 0, 0),
- Weight = 1
- };
- paths.Add(path);
- }
- request.Paths = paths;
- }
- service = new StaticMapService();
- GetImage();
- TimeStamp.Content = String.Format("Last Updated {0:dd MMM yyy hh:mm:ss tt}", timestamp);
- }
- private void GetImage()
- {
- request.Zoom = (int)Math.Round(_zoom, 0);
- var imageSource = new BitmapImage();
- imageSource.BeginInit();
- imageSource.StreamSource = service.GetStream(request);
- imageSource.CacheOption = BitmapCacheOption.OnLoad;
- imageSource.EndInit();
- staticmap.Source = imageSource;
- }
- private void staticmap_MouseUp(object sender, MouseButtonEventArgs e)
- {
- Close();
- }
- private void ZoomOut_OnClick(object sender, RoutedEventArgs e)
- {
- _zoom -= 1.0;
- GetImage();
- }
- private void ZoomIn_OnClick(object sender, RoutedEventArgs e)
- {
- _zoom += 1.0;
- GetImage();
- }
- }
- }
|