Example #1
0
        /// <summary>
        /// Generates a URI at which to get the data for a tile.
        /// </summary>
        /// <param name="info">Information about a tile.</param>
        /// <returns>The URI at which to get the data for the specified tile.</returns>
        public Uri GetUri(TileInfo info)
        {
            var url = new StringBuilder(_baseUrl.AbsoluteUri);

            url.Append("&SERVICE=WMS");
            if (!string.IsNullOrEmpty(_version))
            {
                url.AppendFormat("&VERSION={0}", _version);
            }
            url.Append("&REQUEST=GetMap");
            url.AppendFormat("&BBOX={0}", TileTransform.TileToWorld(new TileRange(info.Index.Col, info.Index.Row), info.Index.Level, _schema));
            url.AppendFormat("&FORMAT={0}", _schema.Format);
            url.AppendFormat("&WIDTH={0}", _schema.GetTileWidth(info.Index.Level));
            url.AppendFormat("&HEIGHT={0}", _schema.GetTileHeight(info.Index.Level));
            var crsFormat = !string.IsNullOrEmpty(_version) && string.CompareOrdinal(_version, "1.3.0") >= 0 ? "&CRS={0}" : "&SRS={0}";

            url.AppendFormat(crsFormat, _schema.Srs);
            url.AppendFormat("&LAYERS={0}", ToCommaSeparatedValues(_layers));
            if (_styles != null && _styles.Count > 0)
            {
                url.AppendFormat("&STYLES={0}", ToCommaSeparatedValues(_styles));
            }
            AppendCustomParameters(url);
            return(new Uri(url.ToString()));
        }
Example #2
0
        private static TileRange WorldToTileInvertedY(Extent extent, int level, ITileSchema schema)
        {
            var resolution          = schema.Resolutions[level];
            var tileWidthWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(level);
            var tilHeightWorldUnits = resolution.UnitsPerPixel * schema.GetTileHeight(level);
            var firstCol            = (int)Math.Floor((extent.MinX - schema.GetOriginX(level)) / tileWidthWorldUnits + Tolerance);
            var firstRow            = (int)Math.Floor((-extent.MaxY + schema.GetOriginY(level)) / tilHeightWorldUnits + Tolerance);
            var lastCol             = (int)Math.Ceiling((extent.MaxX - schema.GetOriginX(level)) / tileWidthWorldUnits - Tolerance);
            var lastRow             = (int)Math.Ceiling((-extent.MinY + schema.GetOriginY(level)) / tilHeightWorldUnits - Tolerance);

            return(new TileRange(firstCol, firstRow, lastCol - firstCol, lastRow - firstRow));
        }
Example #3
0
        private static Extent TileToWorldInvertedY(TileRange range, int level, ITileSchema schema)
        {
            var resolution           = schema.Resolutions[level];
            var tileWidthWorldUnits  = resolution.UnitsPerPixel * schema.GetTileWidth(level);
            var tileHeightWorldUnits = resolution.UnitsPerPixel * schema.GetTileHeight(level);
            var minX = range.FirstCol * tileWidthWorldUnits + schema.GetOriginX(level);
            var minY = -(range.FirstRow + range.RowCount) * tileHeightWorldUnits + schema.GetOriginY(level);
            var maxX = (range.FirstCol + range.ColCount) * tileWidthWorldUnits + schema.GetOriginX(level);
            var maxY = -(range.FirstRow) * tileHeightWorldUnits + schema.GetOriginY(level);

            return(new Extent(minX, minY, maxX, maxY));
        }
Example #4
0
 public static void WriteWorldFile(string f, Extent extent, ITileSchema schema)
 {
     using (var sw = new StreamWriter(f))
     {
         var resX = (extent.MaxX - extent.MinX) / schema.GetTileWidth("0");
         var resY = (extent.MaxY - extent.MinY) / schema.GetTileHeight("0");
         sw.WriteLine(resX.ToString(CultureInfo.InvariantCulture));
         sw.WriteLine("0");
         sw.WriteLine("0");
         sw.WriteLine((resY * -1).ToString(CultureInfo.InvariantCulture));
         sw.WriteLine(extent.MinX.ToString(CultureInfo.InvariantCulture));
         sw.WriteLine(extent.MaxY.ToString(CultureInfo.InvariantCulture));
         sw.Close();
     }
 }
Example #5
0
 public static void WriteWorldFile(string f, Extent extent, ITileSchema schema)
 {
     using (var sw = new StreamWriter(f))
     {
         var resX = (extent.MaxX - extent.MinX) / schema.GetTileWidth("0");
         var resY = (extent.MaxY - extent.MinY) / schema.GetTileHeight("0");
         sw.WriteLine(resX.ToString(CultureInfo.InvariantCulture));
         sw.WriteLine("0");
         sw.WriteLine("0");
         sw.WriteLine((resY * -1).ToString(CultureInfo.InvariantCulture));
         sw.WriteLine(extent.MinX.ToString(CultureInfo.InvariantCulture));
         sw.WriteLine(extent.MaxY.ToString(CultureInfo.InvariantCulture));
         sw.Close();
     }
 }
 private void SafeSchema(ITileSchema schema)
 {
     _axis        = schema.YAxis;
     _minX        = schema.Extent.MinX;
     _maxX        = schema.Extent.MaxX;
     _minY        = schema.Extent.MinY;
     _maxY        = schema.Extent.MaxY;
     _format      = schema.Format;
     _height      = schema.GetTileHeight(String.Empty);
     _width       = schema.GetTileWidth(String.Empty);
     _schemaName  = schema.Name;
     _originX     = schema.GetOriginX(String.Empty);
     _originY     = schema.GetOriginY(String.Empty);
     _srs         = schema.Srs;
     _resolutions = new Dictionary <string, Resolution>();
     foreach (var resolution in schema.Resolutions)
     {
         _resolutions.Add(resolution.Key, resolution.Value);
     }
 }
 private void SafeSchema(ITileSchema schema)
 {
     _axis = schema.YAxis;
     _minX = schema.Extent.MinX;
     _maxX = schema.Extent.MaxX;
     _minY = schema.Extent.MinY;
     _maxY = schema.Extent.MaxY;
     _format = schema.Format;
     _height = schema.GetTileHeight(String.Empty);
     _width = schema.GetTileWidth(String.Empty);
     _schemaName = schema.Name;
     _originX = schema.GetOriginX(String.Empty);
     _originY = schema.GetOriginY(String.Empty);
     _srs = schema.Srs;
     _resolutions = new Dictionary<string, Resolution>();
     foreach (var resolution in schema.Resolutions)
         _resolutions.Add(resolution.Key, resolution.Value);
 }
Example #8
0
        private static void DrawTile(ITileSchema schema, Graphics graphics, Bitmap bitmap, RectangleF extent, int level)
        {
            // For drawing on WinForms there are two things to take into account
            // to prevent seams between tiles.
            // 1) The WrapMode should be set to TileFlipXY. This is related
            //    to how pixels are rounded by GDI+
            var imageAttributes = new ImageAttributes();

            imageAttributes.SetWrapMode(WrapMode.TileFlipXY);
            // 2) The rectangle should be rounded to actual pixels.
            var roundedExtent = RoundToPixel(extent);

            graphics.DrawImage(bitmap, roundedExtent, 0, 0, schema.GetTileWidth(level), schema.GetTileHeight(level), GraphicsUnit.Pixel, imageAttributes);
        }
Example #9
0
 private static void DrawTile(ITileSchema schema, Graphics graphics, Bitmap bitmap, RectangleF extent, string levelId)
 {
     // For drawing on WinForms there are two things to take into account
     // to prevent seams between tiles.
     // 1) The WrapMode should be set to TileFlipXY. This is related
     //    to how pixels are rounded by GDI+
     var imageAttributes = new ImageAttributes();
     imageAttributes.SetWrapMode(WrapMode.TileFlipXY);
     // 2) The rectangle should be rounded to actual pixels.
     var roundedExtent = RoundToPixel(extent);
     graphics.DrawImage(bitmap, roundedExtent, 0, 0, schema.GetTileWidth(levelId), schema.GetTileHeight(levelId), GraphicsUnit.Pixel, imageAttributes);
 }