/// <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())); }
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)); }
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)); }
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); }
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); }
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); }