summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Controls/GalleryPages/MapGallery.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Xamarin.Forms.Controls/GalleryPages/MapGallery.cs')
-rw-r--r--Xamarin.Forms.Controls/GalleryPages/MapGallery.cs153
1 files changed, 153 insertions, 0 deletions
diff --git a/Xamarin.Forms.Controls/GalleryPages/MapGallery.cs b/Xamarin.Forms.Controls/GalleryPages/MapGallery.cs
new file mode 100644
index 00000000..dd283c3a
--- /dev/null
+++ b/Xamarin.Forms.Controls/GalleryPages/MapGallery.cs
@@ -0,0 +1,153 @@
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Xamarin.Forms.Maps;
+
+namespace Xamarin.Forms.Controls
+{
+ public class MapGallery : ContentPage
+ {
+ readonly StackLayout _stack;
+
+ public MapGallery ()
+ {
+ Device.OnPlatform (iOS: () => {
+ if (Device.Idiom == TargetIdiom.Tablet) {
+ Padding = new Thickness (0, 0, 0, 60);
+ }
+ });
+
+ var map = MakeMap ();
+
+ map.MoveToRegion (MapSpan.FromCenterAndRadius (new Position (41.890202, 12.492049), Distance.FromMiles (0.5)));
+
+ var searchAddress = new SearchBar { Placeholder = "Search Address" };
+
+ searchAddress.SearchButtonPressed += async (e, a) => {
+ var addressQuery = searchAddress.Text;
+ searchAddress.Text = "";
+ searchAddress.Unfocus ();
+
+ var positions = (await (new Geocoder ()).GetPositionsForAddressAsync (addressQuery)).ToList ();
+ if (!positions.Any ())
+ return;
+
+ var position = positions.First ();
+ map.MoveToRegion (MapSpan.FromCenterAndRadius (position,
+ Distance.FromMeters (4000)));
+ map.Pins.Add (new Pin {
+ Label = addressQuery,
+ Position = position,
+ Address = addressQuery
+ });
+ };
+
+ var buttonAddressFromPosition = new Button { Text = "Address From Position" };
+ buttonAddressFromPosition.Clicked += async (e, a) => {
+ var addresses = (await (new Geocoder ()).GetAddressesForPositionAsync (new Position (41.8902, 12.4923))).ToList ();
+ foreach (var ad in addresses)
+ Debug.WriteLine (ad);
+ };
+
+ var buttonZoomIn = new Button { Text = "Zoom In" };
+ buttonZoomIn.Clicked += (e, a) => map.MoveToRegion (map.VisibleRegion.WithZoom (5f));
+
+ var buttonZoomOut = new Button { Text = "Zoom Out" };
+ buttonZoomOut.Clicked += (e, a) => map.MoveToRegion (map.VisibleRegion.WithZoom (1 / 3f));
+
+ var mapTypeButton = new Button { Text = "Map Type" };
+ mapTypeButton.Clicked += async (e, a) => {
+ var result = await DisplayActionSheet ("Select Map Type", null, null, "Street", "Satellite", "Hybrid");
+ switch (result) {
+ case "Street":
+ map.MapType = MapType.Street;
+ break;
+ case "Satellite":
+ map.MapType = MapType.Satellite;
+ break;
+ case "Hybrid":
+ map.MapType = MapType.Hybrid;
+ break;
+ }
+ };
+
+ var buttonHome = new Button { Text = "Home" };
+ buttonHome.Clicked += (a, e) => {
+ map.MoveToRegion (MapSpan.FromCenterAndRadius (new Position (41.890202, 12.492049), Distance.FromMiles (0.5)));
+ };
+
+ _stack = new StackLayout {
+ Spacing = 0,
+ Padding = new Thickness (30, 0)
+ };
+ //stack.SetRowSpacing (1, 0);
+
+ Title = "Map Gallery";
+
+ var buttonZoomPin = new Button { Text = "Zoom Pin" };
+ buttonZoomPin.Clicked += (a, e) => {
+ var pos = new Position (41.011995, -8.642995);
+ map.Pins.Clear ();
+ map.Pins.Add (new Pin { Position = pos, Label = "Rui" });
+ map.MoveToRegion (MapSpan.FromCenterAndRadius (pos, Distance.FromMiles (0.5)));
+ };
+
+
+ map.VerticalOptions = LayoutOptions.FillAndExpand;
+ _stack.Children.Add (searchAddress);
+ _stack.Children.Add (map);
+ _stack.Children.Add (mapTypeButton);
+ _stack.Children.Add (buttonZoomIn);
+ _stack.Children.Add (buttonZoomOut);
+ _stack.Children.Add (buttonAddressFromPosition);
+ _stack.Children.Add (buttonHome);
+ _stack.Children.Add (buttonZoomPin);
+
+ Content = _stack;
+ }
+
+ public static Map MakeMap ()
+ {
+ Pin colosseum = null;
+ Pin pantheon = null;
+ Pin chapel = null;
+
+ var map = new Map {
+ IsShowingUser = false,
+ Pins = {
+ (colosseum = new Pin {
+ Type = PinType.Place,
+ Position = new Position (41.890202, 12.492049),
+ Label = "Colosseum",
+ Address = "Piazza del Colosseo, 00184 Rome, Province of Rome, Italy"
+ }),
+ (pantheon = new Pin {
+ Type = PinType.Place,
+ Position = new Position (41.898652, 12.476831),
+ Label = "Pantheon",
+ Address = "Piazza della Rotunda, 00186 Rome, Province of Rome, Italy"
+ }),
+ (chapel = new Pin {
+ Type = PinType.Place,
+ Position = new Position (41.903209, 12.454545),
+ Label = "Sistine Chapel",
+ Address = "Piazza della Rotunda, 00186 Rome, Province of Rome, Italy"
+ })
+ }
+ };
+
+ colosseum.Clicked += PinClicked;
+ pantheon.Clicked += PinClicked;
+ chapel.Clicked += PinClicked;
+ return map;
+ }
+
+ static void PinClicked (object sender, EventArgs e)
+ {
+ // yea!
+ }
+ }
+}