Cílem cvičení bude implementovat generátor map na základě dat z OSM.
Vytvořte konzolovou aplikaci s názvem OSMMap a knihovnu tříd s názvem OSMMapLib.
V knihovně OSMMapLib vytvořte třídy Tile, Layer a Map.
Třída Tile:
Třída Layer:
Bude mít vlastnosti UrlTemplate (string) a MaxZoom (int). Tyto vlastnosti bude možné nastavit pouze uvnitř třídy. Číst je bude možné odkudkoliv.
Bude obsahovat konstruktor s možností nastavení urlTemplate a maxZoom. Obě tyto hodnoty budou nepovinné a budou mít výchozí hodnoty:
Bude obsahovat metodu FormatUrl, která bude přijímat parametry x, y a zoom (všechny typu int). Tato metoda bude vracet URL konkrétní dlaždice mapy. URL bude vygenerována nahrazením zástupných znaků ve složených závorkách v šabloně URL za konkrétní hodnoty. Hodnotou pro {c} bude náhodně vygenerované písmeno a, b nebo c.
Bude obsahovat indexer přijímající hodnoty x, y a zoom (typu int) a vracející novou dlaždici (Tile) na daných souřadnicích x a y.
Třída Map:
(int)((lon + 180.0) / 360.0 * (1 << zoom))(int)((1.0 - Math.Log(Math.Tan(lat * Math.PI / 180.0) + 1.0 / Math.Cos(lat * Math.PI / 180.0)) / Math.PI) / 2.0 * (1 << zoom))MapRenderer mapRenderer = new MapRenderer(4, 4);
for (int x = -2; x < 2; x++)
{
for (int y = -2; y < 2; y++)
{
Tile tile = this.Layer[this.CenterTileX + x, this.CenterTileY + y, this.Zoom];
Console.WriteLine(tile);
mapRenderer.Set(x + 2, y + 2, tile.Url);
}
}
mapRenderer.Flush();
mapRenderer.Render(fileName);
Následně otestujte svou implementaci. Pro otestování vytvořte novou mapu a přiřaďte jí vrstvu. Následně na mapě zavolejte metodu Render.
Zkuste vytvořit další vrstvu (šablona "https://b.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png" a maximální zoom 17) a vykreslit mapu s touto vrstvou.