public byte[] GetTile(BruTile.TileInfo tileInfo)
        {
            string url = _tileSchema.mapUrlTemplates[r.Next(0, _tileSchema.mapUrlTemplates.Length - 1)];
            url = string.Format(url, tileInfo.Index.Col, tileInfo.Index.Row, tileInfo.Index.Level, calculateSParam(tileInfo.Index.Col, tileInfo.Index.Row));

            byte[] data = Fetch(url);

            if (_tileSchema._mapType == GoogleV3TileSource.MapTypeId.HYBRID)
            {
                string overlayurl = _tileSchema.overlayUrlTemplates[r.Next(0, _tileSchema.overlayUrlTemplates.Length - 1)];
                overlayurl = string.Format(overlayurl, tileInfo.Index.Col, tileInfo.Index.Row, tileInfo.Index.Level, calculateSParam(tileInfo.Index.Col, tileInfo.Index.Row));
                byte[] overlayData = Fetch(overlayurl);

                using (MemoryStream ms = new MemoryStream(data))
                {
                    using (MemoryStream ms2 = new MemoryStream(overlayData))
                    {
                        System.Drawing.Image img = new System.Drawing.Bitmap(ms);
                        System.Drawing.Image overlayimg = new System.Drawing.Bitmap(ms2);
                        using (System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(img))
                        {
                            g.DrawImage(overlayimg, 0, 0);
                        }

                        using (MemoryStream newMs = new MemoryStream())
                        {

                            ImageCodecInfo jgpEncoder = GetEncoder(ImageFormat.Jpeg);
                            System.Drawing.Imaging.Encoder myEncoder =
                                System.Drawing.Imaging.Encoder.Quality;
                            EncoderParameters myEncoderParameters = new EncoderParameters(1);
                            EncoderParameter myEncoderParameter = new EncoderParameter(myEncoder,
                                90L);
                            myEncoderParameters.Param[0] = myEncoderParameter;
                            img.Save(newMs, jgpEncoder, myEncoderParameters);

                            newMs.Seek(0, SeekOrigin.Begin);
                            data = new byte[newMs.Length];
                            newMs.Read(data, 0, data.Length);
                            newMs.Close();
                        }
                        ms2.Close();
                    }
                    ms.Close();
                }
            }

            return data;
        }
예제 #2
0
        public WmsTileSchema(string name, BruTile.Extent extent, string srs, string format, int tileSize, double highestResUnitsPerPixel, AxisDirection axis)
        {
            // Make us a new extent that is square
            double minx, miny, maxx, maxy, size;
            if (extent.Width > extent.Height)
            {
                minx = extent.MinX;
                maxx = extent.MaxX;
                size = maxx - minx;
                miny = extent.MinY;
                maxy = miny + size;

            }
            else
            {
                miny = extent.MinY;
                maxy = extent.MaxY;
                size = maxy - miny;
                minx = extent.MinX;
                maxx = minx + size;
            }
            int count = 0;
            double unitsPerPixel = size / tileSize;
            do
            {
                Resolutions[count.ToString(CultureInfo.InvariantCulture)] = new Resolution {Id = count.ToString(CultureInfo.InvariantCulture), UnitsPerPixel = unitsPerPixel};
                count++;
                //Resolutions.Add(unitsPerPixel);
                unitsPerPixel /= 2;
            } while (unitsPerPixel > highestResUnitsPerPixel);
            BruTile.Extent myExtent = new BruTile.Extent(minx, miny, maxx, maxy);
            //Extent myExtent = extent;
            Width = tileSize;
            Height = tileSize;
            Extent = myExtent;
            OriginX = myExtent.MinX;
            OriginY = myExtent.MinY;
            Name = name;
            Format = format;
            Axis = axis;
            Srs = srs;
        }
예제 #3
0
        private static ITileSchema CreateSchema()
        {
            var resoltions = new[] { 
                    0.3515625,
                    0.17578125,
                    0.087890625,
                    0.0439453125,
                    0.02197265625,
                    0.010986328125,
                    0.0054931640625,
                    0.00274658203125,
                    0.001373291015625,
                    0.0006866455078125,
                    0.00034332275390625,
                    0.000171661376953125,
                    0.0000858306884765629,
                    0.0000429153442382814,
                    0.0000214576721191407,
                    0.0000107288360595703 };

            const string format = "jpeg";

            var schema = new TileSchema();
            var count = 0;
            foreach (double resolution in resoltions)
            {
                var levelId = count.ToString();
                schema.Resolutions[levelId] = new Resolution { Id = levelId, UnitsPerPixel = resolution};
                count++;
            }
            schema.Height = 512;
            schema.Width = 512;
            schema.Extent = new Extent(-180, -90, 180, 90);
            schema.OriginX = -180;
            schema.OriginY = 90;
            schema.Name = "ESRI";
            schema.Format = format;
            schema.YAxis = YAxis.OSM;
            schema.Srs = "EPSG:4326";
            return schema;
        }
예제 #4
0
        private static SharpMap.Map InitializeMapGoogle(BruTile.Web.GoogleMapType mt)
        {
            var map = new SharpMap.Map();

            BruTile.Web.GoogleRequest req;
            BruTile.ITileSource tileSource;
            SharpMap.Layers.TileLayer tileLayer;

            if (mt == (BruTile.Web.GoogleMapType.GoogleSatellite | BruTile.Web.GoogleMapType.GoogleLabels))
            {
                req = new BruTile.Web.GoogleRequest(BruTile.Web.GoogleMapType.GoogleSatellite);
                tileSource = new BruTile.Web.GoogleTileSource(req);
                tileLayer = new SharpMap.Layers.TileLayer(tileSource, "TileLayer - " + BruTile.Web.GoogleMapType.GoogleSatellite);
                map.Layers.Add(tileLayer);
                req = new BruTile.Web.GoogleRequest(BruTile.Web.GoogleMapType.GoogleLabels);
                tileSource = new BruTile.Web.GoogleTileSource(req);
                mt = BruTile.Web.GoogleMapType.GoogleLabels;
            }
            else
            {
                req = new BruTile.Web.GoogleRequest(mt);
                tileSource = new BruTile.Web.GoogleTileSource(req);
            }

            tileLayer = new SharpMap.Layers.TileLayer(tileSource, "TileLayer - " + mt);
            map.Layers.Add(tileLayer);
            map.ZoomToBox(tileLayer.Envelope);
            return map;
        }
예제 #5
0
        private static SharpMap.Map InitializeMapBing(BruTile.Web.BingMapType mt)
        {
            var map = new SharpMap.Map();

            var tileLayer = new SharpMap.Layers.TileLayer(new BruTile.Web.BingTileSource(BruTile.Web.BingRequest.UrlBingStaging, "", mt), "TileLayer - Bing " + mt);
            map.BackgroundLayer.Add(tileLayer);
            map.ZoomToBox(tileLayer.Envelope);
            return map;
        }
예제 #6
0
 public TileSourceWrapper(BruTile.ITileSource tileSource)
 {
     _tileSource = tileSource;
     _properties = new Dictionary<string, object>();
 }
예제 #7
0
 public byte[] GetTile(BruTile.TileInfo tileInfo)
 {
     return _tileSource.GetTile(tileInfo);
 }
예제 #8
0
        /// <summary>
        /// Creates an instance of this class
        /// </summary>
        /// <param name="tileSource">the source to get the tiles from</param>
        /// <param name="layerName">name of the layer</param>
        /// <param name="transparentColor">transparent color off</param>
        /// <param name="showErrorInTile">generate an error tile if it could not be retrieved from source</param>
        /// <param name="fileCache">If the layer should use a file-cache so store tiles, set this to a fileCacheProvider. Set to null to avoid filecache</param>
        /// <param name="imgFormat">Set the format of the tiles to be used</param>
        public TileLayer(ITileSource tileSource, string layerName, Color transparentColor, bool showErrorInTile, BruTile.Cache.FileCache fileCache, ImageFormat imgFormat)
        {
            _source = tileSource;
            LayerName = layerName;
            if (!transparentColor.IsEmpty)
                _imageAttributes.SetColorKey(transparentColor, transparentColor);
            _showErrorInTile = showErrorInTile;

#if !PocketPC
            _imageAttributes.SetWrapMode(WrapMode.TileFlipXY);
#endif
            _fileCache = fileCache;
            _ImageFormat = imgFormat;
        }
예제 #9
0
 private static Extent FromBruTileExtent(BruTile.Extent extent)
 {
     return new Extent(extent.MinX, extent.MinY, extent.MaxX, extent.MaxY);
 }