public void ShowCluster(CKCluster cluster, bool animated)
        {
            MKMapRect mapRect = MKMapRect.Null;

            foreach (var annoation in cluster.Annotations)
            {
                mapRect = MKMapRectByAddingPoint(mapRect, MKMapPoint.FromCoordinate(annoation.Coordinate));
            }
            _internalMap.SetVisibleMapRect(mapRect, animated);
        }
        public static void ShowCluster(this MKMapView map, CKCluster cluster, UIEdgeInsets insets, bool animated)
        {
            MKMapRect zoomRect = MKMapRect.Null;

            foreach (var annotation in cluster.Annotations)
            {
                var pointRect = new MKMapRect();
                pointRect.Origin = MKMapPoint.FromCoordinate(annotation.Coordinate);
                pointRect.Size   = new MKMapSize(0.1d, 0.1d);
                zoomRect         = MKMapRect.Union(zoomRect, pointRect);
            }

            map.SetVisibleMapRect(zoomRect, insets, animated);
        }
        public MKMapView setMapRegion(MKMapView map)
        {
            MKMapRect zoomRect = new MKMapRect(double.PositiveInfinity, double.PositiveInfinity, 0, 0);

            foreach (MKAnnotation annotation in map.Annotations)
            {
                if (annotation.Coordinate.Latitude != 0)
                {
                    MKMapPoint annotationPoint = MKMapPoint.FromCoordinate(annotation.Coordinate);
                    MKMapRect  pointRect       = new MKMapRect(annotationPoint.X, annotationPoint.Y, 0.1, 0.1);
                    zoomRect = MKMapRect.Union(zoomRect, pointRect);
                }
            }
            map.SetVisibleMapRect(zoomRect, new UIEdgeInsets(40, 20, 20, 20), true);

            return(map);
        }
        protected override void DataSourceUpdated(WebDataSource oldDataSource, WebDataSource newDataSource)
        {
            if (mapView.Overlays != null)
            {
                mapView.RemoveOverlays(mapView.Overlays);
            }

            var representation = (XIMapViewWebDocumentRepresentation)newDataSource?.Representation;

            if (representation == null || !representation.LocationIsValid)
            {
                return;
            }

            if (representation.Polyline == null)
            {
                var coordinate = representation.Location.ToCoordinate();
                AddLocationAnnotation(coordinate);
                mapView.Region = MKCoordinateRegion.FromDistance(coordinate, 15000, 15000);
            }
            else
            {
                var coords = representation.Polyline.Value.ToCoordinates();
                for (var i = 0; i < coords.Length; i++)
                {
                    AddLocationAnnotation(
                        coords [i],
                        representation.Polyline,
                        i);
                }

                var mkpolyline = MKPolyline.FromCoordinates(coords);
                mapView.AddOverlay(mkpolyline);
                mapView.SetVisibleMapRect(
                    mkpolyline.BoundingMapRect,
                    new NSEdgeInsets(45, 35, 35, 35),
                    false);
            }
        }