コード例 #1
0
        private static async Task LoadCachedTileAsync(Tile tile, Uri uri, string cacheKey)
        {
            var cacheItem = await GetCacheAsync(cacheKey).ConfigureAwait(false);

            var buffer = cacheItem?.Buffer;

            if (cacheItem == null || cacheItem.Expiration < DateTime.UtcNow)
            {
                var response = await ImageLoader.GetHttpResponseAsync(uri).ConfigureAwait(false);

                if (response != null)         // download succeeded
                {
                    buffer = response.Buffer; // may be null or empty when no tile available, but still be cached

                    await SetCacheAsync(cacheKey, buffer, GetExpiration(response.MaxAge)).ConfigureAwait(false);
                }
            }

            if (buffer != null && buffer.Length > 0)
            {
                var image = await ImageLoader.LoadImageAsync(buffer).ConfigureAwait(false);

                await tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image));
            }
        }
コード例 #2
0
        protected override async Task <ImageSource> GetImageAsync(BoundingBox boundingBox)
        {
            ImageSource imageSource = null;

            if (ServerUri != null)
            {
                var projectionParameters = ParentMap.MapProjection.WmsQueryParameters(boundingBox, Version);

                if (!string.IsNullOrEmpty(projectionParameters))
                {
                    var uri = GetRequestUri("GetMap"
                                            + "&LAYERS=" + Layers
                                            + "&STYLES=" + Styles
                                            + "&FORMAT=" + Format
                                            + "&TRANSPARENT=" + (Transparent ? "TRUE" : "FALSE")
                                            + "&" + projectionParameters);

                    try
                    {
                        imageSource = await ImageLoader.LoadImageAsync(uri, false);
                    }
                    catch (Exception ex)
                    {
                        Debug.WriteLine("WmsImageLayer: {0}: {1}", uri, ex.Message);
                    }
                }
            }

            return(imageSource);
        }
コード例 #3
0
        private async Task LoadTileImageAsync(Tile tile, IBuffer buffer)
        {
            var tcs = new TaskCompletionSource <object>();

            using (var stream = new InMemoryRandomAccessStream())
            {
                await stream.WriteAsync(buffer);

                stream.Seek(0);

                await tile.Image.Dispatcher.RunAsync(CoreDispatcherPriority.Low, async() =>
                {
                    try
                    {
                        tile.SetImage(await ImageLoader.LoadImageAsync(stream));
                        tcs.SetResult(null);
                    }
                    catch (Exception ex)
                    {
                        tcs.SetException(ex);
                    }
                });
            }

            await tcs.Task;
        }
コード例 #4
0
        private static async Task LoadCachedTile(Tile tile, Uri uri, string cacheKey)
        {
            var cacheItem = Cache.Get(cacheKey) as Tuple <byte[], DateTime>;
            var buffer    = cacheItem?.Item1;

            if (cacheItem == null || cacheItem.Item2 < DateTime.UtcNow)
            {
                var response = await ImageLoader.GetHttpResponseAsync(uri).ConfigureAwait(false);

                if (response != null)         // download succeeded
                {
                    buffer = response.Buffer; // may be null or empty when no tile available, but still be cached

                    cacheItem = Tuple.Create(buffer, GetExpiration(response.MaxAge));

                    Cache.Set(cacheKey, cacheItem, new CacheItemPolicy {
                        AbsoluteExpiration = cacheItem.Item2
                    });
                }
            }
            //else System.Diagnostics.Debug.WriteLine($"Cached: {cacheKey}");

            if (buffer != null && buffer.Length > 0)
            {
                var image = await ImageLoader.LoadImageAsync(buffer).ConfigureAwait(false);

                await tile.Image.Dispatcher.InvokeAsync(() => tile.SetImage(image));
            }
        }
コード例 #5
0
        protected override async Task <ImageSource> GetImageAsync(BoundingBox boundingBox)
        {
            ImageSource imageSource          = null;
            var         projectionParameters = ParentMap.MapProjection.WmsQueryParameters(boundingBox);

            if (ServiceUri != null && !string.IsNullOrEmpty(projectionParameters))
            {
                var uri = GetRequestUri("GetMap&" + projectionParameters);

                if (uri.IndexOf("LAYERS=", StringComparison.OrdinalIgnoreCase) < 0 && Layers != null)
                {
                    uri += "&LAYERS=" + Layers;
                }

                if (uri.IndexOf("STYLES=", StringComparison.OrdinalIgnoreCase) < 0 && Styles != null)
                {
                    uri += "&STYLES=" + Styles;
                }

                if (uri.IndexOf("FORMAT=", StringComparison.OrdinalIgnoreCase) < 0 && Format != null)
                {
                    uri += "&FORMAT=" + Format;
                }

                imageSource = await ImageLoader.LoadImageAsync(new Uri(uri.Replace(" ", "%20")));
            }

            return(imageSource);
        }
コード例 #6
0
        /// <summary>
        /// Calls GetImageUri() and asynchronously loads an ImageSource from the returned GetMap URL.
        /// </summary>
        protected override async Task <ImageSource> GetImageAsync()
        {
            var uri = GetImageUri();

            return(uri != null
                ? await ImageLoader.LoadImageAsync(new Uri(uri.Replace(" ", "%20")))
                : null);
        }
コード例 #7
0
        private async Task LoadTileImageAsync(Tile tile, IBuffer buffer)
        {
            using (var stream = new InMemoryRandomAccessStream())
            {
                await stream.WriteAsync(buffer);

                stream.Seek(0);

                await SetTileImageAsync(tile, () => ImageLoader.LoadImageAsync(stream)).ConfigureAwait(false);
            }
        }
コード例 #8
0
        /// <summary>
        /// Loads a tile ImageSource asynchronously from GetUri(x, y, zoomLevel).
        /// </summary>
        public virtual async Task <ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
        {
            ImageSource imageSource = null;
            var         uri         = GetUri(x, y, zoomLevel);

            if (uri != null)
            {
                imageSource = await ImageLoader.LoadImageAsync(uri);
            }

            return(imageSource);
        }
コード例 #9
0
        /// <summary>
        /// Calls GetImageUri() and asynchronously loads an ImageSource from the returned GetMap URL.
        /// </summary>
        protected override async Task <ImageSource> GetImageAsync()
        {
            if (Layers == null && // get first Layer
                ServiceUri != null &&
                ServiceUri.ToString().IndexOf("LAYERS=", StringComparison.OrdinalIgnoreCase) < 0)
            {
                Layers = (await GetLayerNamesAsync())?.FirstOrDefault() ?? "";
            }

            var uri = GetImageUri();

            return(uri != null
                ? await ImageLoader.LoadImageAsync(new Uri(uri.Replace(" ", "%20")))
                : null);
        }
コード例 #10
0
        /// <summary>
        /// Loads a tile ImageSource asynchronously from GetUri(x, y, zoomLevel).
        /// </summary>
        public virtual async Task <ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
        {
            ImageSource imageSource = null;

            var uri = GetUri(x, y, zoomLevel);

            if (uri != null)
            {
                try
                {
                    imageSource = await ImageLoader.LoadImageAsync(uri, true);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("TileSource: {0}: {1}", uri, ex.Message);
                }
            }

            return(imageSource);
        }
コード例 #11
0
        /// <summary>
        /// Loads an ImageSource from the URL returned by GetMapRequestUri().
        /// </summary>
        protected override async Task <ImageSource> GetImageAsync()
        {
            ImageSource image = null;

            if (ServiceUri != null)
            {
                if (Layers == null &&
                    ServiceUri.ToString().IndexOf("LAYERS=", StringComparison.OrdinalIgnoreCase) < 0)
                {
                    Layers = (await GetLayerNamesAsync())?.FirstOrDefault() ?? ""; // get first Layer from Capabilities
                }

                var uri = GetMapRequestUri();

                if (!string.IsNullOrEmpty(uri))
                {
                    image = await ImageLoader.LoadImageAsync(new Uri(uri));
                }
            }

            return(image);
        }
コード例 #12
0
        private static async Task LoadCachedTile(Tile tile, Uri uri, string cacheKey)
        {
            var cacheItem = await Cache.GetAsync(cacheKey).ConfigureAwait(false);

            var buffer = cacheItem?.Item1;

            if (cacheItem == null || cacheItem.Item2 < DateTime.UtcNow)
            {
                var response = await ImageLoader.GetHttpResponseAsync(uri).ConfigureAwait(false);

                if (response != null)         // download succeeded
                {
                    buffer = response.Buffer; // may be null or empty when no tile available, but still be cached

                    await Cache.SetAsync(cacheKey, buffer, GetExpiration(response.MaxAge)).ConfigureAwait(false);
                }
            }
            //else System.Diagnostics.Debug.WriteLine($"Cached: {cacheKey}");

            if (buffer != null && buffer.Length > 0)
            {
                await SetTileImage(tile, () => ImageLoader.LoadImageAsync(buffer)).ConfigureAwait(false);
            }
        }
コード例 #13
0
        /// <summary>
        /// Loads a tile ImageSource asynchronously from GetUri(x, y, zoomLevel).
        /// </summary>
        public virtual async Task <ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
        {
            var uri = GetUri(x, y, zoomLevel);

            return(uri != null ? await ImageLoader.LoadImageAsync(uri) : null);
        }
コード例 #14
0
        protected override async Task <ImageSource> GetImageAsync()
        {
            var imageUri = GetImageUri();

            return(imageUri != null ? await ImageLoader.LoadImageAsync(imageUri) : null);
        }
コード例 #15
0
        public override async Task <ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
        {
            var buffer = await tileData.ReadImageBufferAsync(x, y, zoomLevel);

            return(buffer != null ? await ImageLoader.LoadImageAsync(buffer) : null);
        }
コード例 #16
0
        /// <summary>
        /// Loads a tile ImageSource asynchronously from GetUri(x, y, zoomLevel).
        /// </summary>
        public virtual Task <ImageSource> LoadImageAsync(int x, int y, int zoomLevel)
        {
            var uri = GetUri(x, y, zoomLevel);

            return(uri != null?ImageLoader.LoadImageAsync(uri) : Task.FromResult((ImageSource)null));
        }