Esempio n. 1
0
        public static OfflinePackRegion ToFormsRegion(this MGLTilePyramidOfflineRegion region)
        {
            if (region == null)
            {
                return(null);
            }
            var output = new OfflinePackRegion();

            output.Bounds           = new Bounds(region.Bounds.sw.toFormsPosition(), region.Bounds.ne.toFormsPosition());
            output.MaximumZoomLevel = region.MaximumZoomLevel;
            output.MinimumZoomLevel = region.MinimumZoomLevel;
            output.StyleURL         = region.StyleURL?.AbsoluteString;
            return(output);
        }
        public static OfflinePackRegion ToFormsRegion(this MGLTilePyramidOfflineRegion region)
        {
            if (region == null)
            {
                return(null);
            }
            var output = new OfflinePackRegion
            {
                Bounds           = region.Bounds.ToLatLngBounds(),
                MaximumZoomLevel = region.MaximumZoomLevel,
                MinimumZoomLevel = region.MinimumZoomLevel,
                StyleURL         = region.StyleURL?.AbsoluteString
            };

            return(output);
        }
        public Task <OfflinePack> DownloadMap(OfflinePackRegion formsRegion, Dictionary <string, string> packInfo, IOfflineStorageDelegate downloadDelegate = null)
        {
            this.downloadDelegate = downloadDelegate;
            var tsc    = new TaskCompletionSource <OfflinePack>();
            var region = new MGLTilePyramidOfflineRegion(
                new NSUrl(formsRegion.StyleURL),
                new MGLCoordinateBounds()
            {
                sw = TypeConverter.FromPositionToCoordinate(formsRegion.Bounds.SouthWest),
                ne = TypeConverter.FromPositionToCoordinate(formsRegion.Bounds.NorthEast)
            },
                formsRegion.MinimumZoomLevel,
                formsRegion.MaximumZoomLevel);
            NSData context = null;

            if (packInfo != null)
            {
                var keys   = new List <NSString>();
                var values = new List <NSString>();
                foreach (string key in packInfo.Keys)
                {
                    keys.Add((NSString)key);
                    values.Add((NSString)packInfo[key]);
                }
                var userInfo = NSDictionary.FromObjectsAndKeys(keys.ToArray(), values.ToArray());
                context = NSKeyedArchiver.ArchivedDataWithRootObject(userInfo);
            }

            MGLOfflineStorage.SharedOfflineStorage().AddPackForRegion(region, context, (pack, error) =>
            {
                if (error != null)
                {
                    System.Diagnostics.Debug.WriteLine("Couldn't create offline pack: " + error.LocalizedFailureReason);
                    tsc.TrySetResult(null);
                }
                else
                {
                    pack.Resume();
                    var formsPack = pack.ToFormsPack();
                    tempPacks.Add(pack.GetNativeHash(), formsPack);
                    tsc.TrySetResult(formsPack);
                }
            });

            return(tsc.Task);
        }
        public static OfflinePackRegion ToFormsRegion(this MGLTilePyramidOfflineRegion region)
        {
            if (region == null)
            {
                return(null);
            }
            var output = new OfflinePackRegion();

            output.Bounds = new CoordinateBounds()
            {
                SouthWest = TypeConverter.FromCoordinateToPosition(region.Bounds.sw),
                NorthEast = TypeConverter.FromCoordinateToPosition(region.Bounds.ne),
            };
            output.MaximumZoomLevel = region.MaximumZoomLevel;
            output.MinimumZoomLevel = region.MinimumZoomLevel;
            output.StyleURL         = region.StyleURL?.AbsoluteString;
            return(output);
        }