コード例 #1
0
        private void OnMapElementClick(MapControl sender, MapElementClickEventArgs args)
        {
            var mapIcon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon;

            if (mapIcon != null)
            {
                if (xamarinOverlayShown)
                {
                    nativeMap.Children.Remove(mapOverlay);
                    xamarinOverlayShown = false;
                }
                var customPin = GetCustomPin(mapIcon.Location.Position);
                if (customPin == null)
                {
                    throw new Exception("Custom pin not found");
                }

                mapOverlay = new XamarinMapOverlay(customPin);


                var snPosition = new BasicGeoposition {
                    Latitude = customPin.Position.Latitude, Longitude = customPin.Position.Longitude
                };
                var snPoint = new Geopoint(snPosition);

                nativeMap.Children.Add(mapOverlay);
                MapControl.SetLocation(mapOverlay, snPoint);
                MapControl.SetNormalizedAnchorPoint(mapOverlay, new Windows.Foundation.Point(0.5, 1.0));
                xamarinOverlayShown = true;
            }
        }
コード例 #2
0
        private void OnMapElementClick(MapControl sender, MapElementClickEventArgs args)
        {
            var mapIcon = args.MapElements.FirstOrDefault(x => x is MapIcon) as MapIcon;

            if (mapIcon != null)
            {
                var customPin = GetCustomPin(mapIcon.Location.Position);

                if (customPin == null)
                {
                    throw new Exception("Custom pin not found");
                }

                _mapOverlay = new XamarinMapOverlay(customPin);

                var xamarinMapOverlays = _nativeMap.Children.Where(o => o is XamarinMapOverlay);

                // Remove shown XamarinMapOverlay
                foreach (var xamarinMapOverlay in xamarinMapOverlays)
                {
                    _nativeMap.Children.Remove(xamarinMapOverlay);
                }

                var snPosition = new BasicGeoposition {
                    Latitude = customPin.Pin.Position.Latitude, Longitude = customPin.Pin.Position.Longitude
                };
                var snPoint = new Geopoint(snPosition);

                _nativeMap.Children.Add(_mapOverlay);
                MapControl.SetLocation(_mapOverlay, snPoint);
                MapControl.SetNormalizedAnchorPoint(_mapOverlay, new Windows.Foundation.Point(0.5, 1.0));
            }
        }
コード例 #3
0
        protected override void OnElementChanged(ElementChangedEventArgs <Map> e)
        {
            base.OnElementChanged(e);

            if (e.OldElement != null)
            {
                nativeMap.MapElementClick -= OnMapElementClick;
                nativeMap.Children.Clear();
                mapOverlay = null;
                nativeMap  = null;
            }

            if (e.NewElement != null)
            {
                var formsMap = (CustomMap)e.NewElement;
                nativeMap  = Control as MapControl;
                customPins = formsMap.CustomPins;

                nativeMap.Children.Clear();
                nativeMap.MapElementClick += OnMapElementClick;

                var coordinates = new List <BasicGeoposition>();
                foreach (var position in formsMap.RouteCoordinates)
                {
                    coordinates.Add(new BasicGeoposition {
                        Latitude = position.Latitude, Longitude = position.Longitude
                    });
                }

                var polyline = new MapPolyline
                {
                    StrokeColor     = Windows.UI.Color.FromArgb(128, 255, 0, 0),
                    StrokeThickness = 5,
                    Path            = new Geopath(coordinates)
                };
                nativeMap.MapElements.Add(polyline);

                foreach (var pin in customPins)
                {
                    var snPosition = new BasicGeoposition {
                        Latitude = pin.Pin.Position.Latitude, Longitude = pin.Pin.Position.Longitude
                    };
                    var snPoint = new Geopoint(snPosition);

                    var mapIcon = new MapIcon
                    {
                        Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///Assets/Images/pin.png")),
                        CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible,
                        Location = snPoint,
                        NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0)
                    };

                    nativeMap.MapElements.Add(mapIcon);
                }
            }
        }
コード例 #4
0
        protected override void OnElementChanged(ElementChangedEventArgs <Map> e)
        {
            base.OnElementChanged(e);


            if (e.OldElement != null)
            {
                nativeMap.MapElementClick -= OnMapElementClick;
                nativeMap.Children.Clear();
                mapOverlay = null;
                nativeMap  = null;
            }

            if (e.NewElement != null)
            {
                var formsMap = (CustomMap)e.NewElement;
                nativeMap = Control as MapControl;


                nativeMap.MapElementClick += OnMapElementClick;


                formsMap.CustomPinsUpdated += (s, eventArgs) =>
                {
                    nativeMap.Children.Clear();
                    customPins = formsMap.CustomPins;

                    foreach (var pin in customPins)
                    {
                        var snPosition = new BasicGeoposition {
                            Latitude = pin.Position.Latitude, Longitude = pin.Position.Longitude
                        };
                        var snPoint = new Geopoint(snPosition);

                        var mapIcon = new MapIcon();
                        mapIcon.Image = RandomAccessStreamReference.CreateFromUri(new Uri("ms-appx:///pin.png"));
                        mapIcon.CollisionBehaviorDesired = MapElementCollisionBehavior.RemainVisible;
                        mapIcon.Location = snPoint;
                        mapIcon.NormalizedAnchorPoint = new Windows.Foundation.Point(0.5, 1.0);

                        nativeMap.MapElements.Add(mapIcon);
                    }
                };
            }
        }