コード例 #1
0
        private void LocalFetchCompleted(object sender, FetchTileCompletedEventArgs e)
        {
            //todo remove object sender
            try
            {
                if (e.Error == null && e.Cancelled == false && _isThreadRunning && e.Image != null)
                {
                    var feature = new Feature
                    {
                        Geometry = new Raster(new MemoryStream(e.Image), e.TileInfo.Extent.ToBoundingBox())
                    };
                    _memoryCache.Add(e.TileInfo.Index, feature);
                }
            }
            catch (Exception ex)
            {
                e.Error = ex;
            }
            finally
            {
                _threadCount--;
                lock (_tilesInProgress)
                {
                    if (_tilesInProgress.Contains(e.TileInfo.Index))
                    {
                        _tilesInProgress.Remove(e.TileInfo.Index);
                    }
                }
                _waitHandle.Set();
            }

            DataChanged?.Invoke(this, new DataChangedEventArgs(e.Error, e.Cancelled, e.TileInfo));
        }
コード例 #2
0
        internal void OnFetchCompleted(FetchTileCompletedEventArgs e)
        {
            if (e.Error == null)
            {
                // Reenter levels below the current removed level.
                int indexLevel;
                if (int.TryParse(e.TileInfo.Index.Level, NumberStyles.Integer, CultureInfo.InvariantCulture, out indexLevel))
                {
                    foreach (var removedLevel in Levels(_removedResolutions.Keys))
                    {
                        if (removedLevel <= indexLevel)
                        {
                            int temp;
                            _removedResolutions.TryRemove(removedLevel.ToString(CultureInfo.InvariantCulture), out temp);
                        }
                    }
                }
            }
            else
            {
                var webError = e.Error as WebException;

                if (webError != null)
                {
                    var httpResponse = webError.Response as HttpWebResponse;
                    if (httpResponse != null)
                    {
                        if (httpResponse.StatusCode == HttpStatusCode.NotFound)
                        {
                            // Remove resolutions.
                            if (!_removedResolutions.ContainsKey(e.TileInfo.Index.Level))
                            {
                                _removedResolutions[e.TileInfo.Index.Level] = 1;
                            }
                            else
                            {
                                _removedResolutions[e.TileInfo.Index.Level] += 1;
                            }

                            lock (_lock)
                            {
                                _resolutions = null;
                            }

                            // Force reload.
                            if (ForceReload != null)
                            {
                                ForceReload(this, EventArgs.Empty);
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
ファイル: TileFetcher.cs プロジェクト: 07101994/Mapsui
        private static Raster CreateTileGeometry(FetchTileCompletedEventArgs e)
        {
            // A TileSource may return an byte array that is null. This is currently only implemented
            // for MbTilesTileSource. It is to indicate that the tile is not present in the source,
            // although it should be given the tile schema. It does not mean the tile could not
            // be accessed because of some temporary reason. In that case it will throw an exception.
            // For Mapsui this is important because it will not try again and again to fetch it.
            // Here we return the geometry as null so that it will be added to the tile cache.
            // TileLayer.GetFeatureInView will have to return only the non null geometries.

            if (e.Image == null)
            {
                return(null);
            }

            return(new Raster(new MemoryStream(e.Image), e.TileInfo.Extent.ToBoundingBox()));
        }
コード例 #4
0
        private void LocalFetchCompleted(object sender, FetchTileCompletedEventArgs e)
        {
            //todo remove object sender
            try
            {
                if (e.Error == null && e.Cancelled == false && isThreadRunning && e.Image != null)
                {
                    var feature = new Feature()
                    {
                        Geometry = new Raster(new MemoryStream(e.Image), e.TileInfo.Extent.ToBoundingBox())
                    };
                    memoryCache.Add(e.TileInfo.Index, feature);
                }
            }
            catch (Exception ex)
            {
                e.Error = ex;
            }
            finally
            {
                threadCount--;
                lock (tilesInProgress)
                {
                    if (tilesInProgress.Contains(e.TileInfo.Index))
                        tilesInProgress.Remove(e.TileInfo.Index);
                }
                waitHandle.Set();
            }

            if (DataChanged != null)
                DataChanged(this, new DataChangedEventArgs(e.Error, e.Cancelled, e.TileInfo));
        }