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 WorldToTileNormal(Extent extent, string levelId, ITileSchema schema)
 {
     var resolution = schema.Resolutions[levelId];
     var tileWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(levelId);
     var firstCol = (int)Math.Floor((extent.MinX - schema.GetOriginX(levelId)) / tileWorldUnits);
     var firstRow = (int)Math.Floor((extent.MinY - schema.GetOriginY(levelId)) / tileWorldUnits);
     var lastCol = (int)Math.Ceiling((extent.MaxX - schema.GetOriginX(levelId)) / tileWorldUnits);
     var lastRow = (int)Math.Ceiling((extent.MaxY - schema.GetOriginY(levelId)) / tileWorldUnits);
     return new TileRange(firstCol, firstRow, lastCol - firstCol, lastRow - firstRow);
 }
Example #3
0
 private static Extent TileToWorldNormal(TileRange range, string levelId, ITileSchema schema)
 {
     var resolution = schema.Resolutions[levelId];
     var tileWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(levelId);
     var minX = range.FirstCol * tileWorldUnits + schema.GetOriginX(levelId);
     var minY = range.FirstRow * tileWorldUnits + schema.GetOriginY(levelId);
     var maxX = (range.FirstCol + range.ColCount) * tileWorldUnits + schema.GetOriginX(levelId);
     var maxY = (range.FirstRow + range.RowCount) * tileWorldUnits + schema.GetOriginY(levelId);
     return new Extent(minX, minY, maxX, maxY);
 }
        private static TileRange WorldToTileInvertedY(Extent extent, string levelId, ITileSchema schema)
        {
            var resolution     = schema.Resolutions[levelId];
            var tileWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(levelId);
            var firstCol       = (int)Math.Floor((extent.MinX - schema.GetOriginX(levelId)) / tileWorldUnits + Tolerance);
            var firstRow       = (int)Math.Floor((-extent.MaxY + schema.GetOriginY(levelId)) / tileWorldUnits + Tolerance);
            var lastCol        = (int)Math.Ceiling((extent.MaxX - schema.GetOriginX(levelId)) / tileWorldUnits - Tolerance);
            var lastRow        = (int)Math.Ceiling((-extent.MinY + schema.GetOriginY(levelId)) / tileWorldUnits - Tolerance);

            return(new TileRange(firstCol, firstRow, lastCol - firstCol, lastRow - firstRow));
        }
        private static Extent TileToWorldInvertedY(TileRange range, string levelId, ITileSchema schema)
        {
            var resolution     = schema.Resolutions[levelId];
            var tileWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(levelId);
            var minX           = range.FirstCol * tileWorldUnits + schema.GetOriginX(levelId);
            var minY           = -(range.FirstRow + range.RowCount) * tileWorldUnits + schema.GetOriginY(levelId);
            var maxX           = (range.FirstCol + range.ColCount) * tileWorldUnits + schema.GetOriginX(levelId);
            var maxY           = -(range.FirstRow) * tileWorldUnits + schema.GetOriginY(levelId);

            return(new Extent(minX, minY, maxX, maxY));
        }
Example #6
0
        private static Extent TileToWorldNormal(TileRange range, int level, ITileSchema schema)
        {
            var resolution     = schema.Resolutions[level];
            var tileWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(level);
            var minX           = range.FirstCol * tileWorldUnits + schema.GetOriginX(level);
            var minY           = range.FirstRow * tileWorldUnits + schema.GetOriginY(level);
            var maxX           = (range.FirstCol + range.ColCount) * tileWorldUnits + schema.GetOriginX(level);
            var maxY           = (range.FirstRow + range.RowCount) * tileWorldUnits + schema.GetOriginY(level);

            return(new Extent(minX, minY, maxX, maxY));
        }
Example #7
0
        public static TileRange WorldToTileNormal(Extent extent, string levelId, ITileSchema schema)
        {
            var resolution     = schema.Resolutions[levelId];
            var tileWorldUnits = resolution.UnitsPerPixel * schema.GetTileWidth(levelId);
            var firstCol       = (int)Math.Floor((extent.MinX - schema.GetOriginX(levelId)) / tileWorldUnits);
            var firstRow       = (int)Math.Floor((extent.MinY - schema.GetOriginY(levelId)) / tileWorldUnits);
            var lastCol        = (int)Math.Ceiling((extent.MaxX - schema.GetOriginX(levelId)) / tileWorldUnits);
            var lastRow        = (int)Math.Ceiling((extent.MaxY - schema.GetOriginY(levelId)) / tileWorldUnits);

            return(new TileRange(firstCol, firstRow, lastCol - firstCol, lastRow - firstRow));
        }
Example #8
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);
 }
Example #9
0
        private static TileRange WorldToTileNormal(Extent extent, int level, ITileSchema schema)
        {
            var resolution = schema.Resolutions[level];

            var tileWidthWorldUnits  = resolution.UnitsPerPixel * schema.GetTileWidth(level);
            var tileHeightWorldUnits = resolution.UnitsPerPixel * schema.GetTileHeight(level);
            var firstCol             = (int)Math.Floor((extent.MinX - schema.GetOriginX(level)) / tileWidthWorldUnits + Tolerance);
            var firstRow             = (int)Math.Floor((extent.MinY - schema.GetOriginY(level)) / tileHeightWorldUnits + Tolerance);
            var lastCol = (int)Math.Ceiling((extent.MaxX - schema.GetOriginX(level)) / tileWidthWorldUnits - Tolerance);
            var lastRow = (int)Math.Ceiling((extent.MaxY - schema.GetOriginY(level)) / tileHeightWorldUnits - Tolerance);

            return(new TileRange(firstCol, firstRow, lastCol - firstCol, lastRow - firstRow));
        }
Example #10
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 #11
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 #14
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);
 }