Generator Płytki

Generator Płytki

Mapa w postaci płytek to najpopularniejszy sposób wyświetlania i nawigacji po mapach. GeneratorTiles posiada metody do renderowania płytek dla zbudowanej mapy lub innych praktycznych celów. Musimy ustawić warstwę wejściową (lub warstwy), katalog wyjściowy oraz parametr zoomu. Jeśli mamy więcej niż jedną warstwę, to dla każdej warstwy łączymy geometrie i tworzymy nową scaloną warstwę. Wszystkie płytki są tworzone w ustawionym katalogu wyjściowym i mają nazwę tile_zxy_{z}_{x}_{y}, gdzie z jest parametrem zoomu, a x i y to współrzędne lewego górnego rogu zasięgu płytki. Przy poziomie zoomu “0” cała warstwa zostanie wyrenderowana w jednej płytce mapy. Każdy poziom zoomu podwaja się w obu wymiarach, więc pojedyncza płytka jest zastępowana przez 4 płytki podczas powiększania. Płytki są zapisywane z rozszerzeniem “png”.

Przykład z warstwą InMemory

var layer = Drivers.InMemory.CreateLayer();

Feature feature_1 = layer.ConstructFeature();
feature_1.Geometry = Geometry.FromText("LINESTRING(0 0, 500 300)");
layer.Add(feature_1);

Feature feature_2 = layer.ConstructFeature();
feature_2.Geometry = Geometry.FromText("LINESTRING(0 300, 500 0)");
layer.Add(feature_2);

GeneratorTiles.GenerateTiles(layer, OutDirectory, zoom: 0); // aby zobaczyć całą płytkę
GeneratorTiles.GenerateTiles(layer, OutDirectory, zoom: 1); // aby zobaczyć 4 płytki

Przykład gdy pobieramy warstwę z pliku GeoJson (lub innego)

var layer_GeoJson = VectorLayer.Open(sourcePath, Drivers.GeoJson);
var layer_OsmXml = VectorLayer.Open(sourcePath, Drivers.OsmXml);

GeneratorTiles.GenerateTiles(layer_GeoJson, OutDirectory, zoom: 0); // aby zobaczyć całą płytkę
GeneratorTiles.GenerateTiles(layer_GeoJson, OutDirectory, zoom: 2); // aby zobaczyć 16 płytek

GeneratorTiles.GenerateTiles(layer_OsmXml, OutDirectory, zoom: 0); // aby zobaczyć całą płytkę
GeneratorTiles.GenerateTiles(layer_OsmXml, OutDirectory, zoom: 2); // aby zobaczyć 16 płytek

Przykład z wieloma warstwami

var layer1 = Drivers.InMemory.CreateLayer();
var layer2 = Drivers.InMemory.CreateLayer();
var layer3 = Drivers.InMemory.CreateLayer();

Feature feature1 = layer1.ConstructFeature();
feature1.Geometry = Geometry.FromText("LINESTRING(-250 100, 0 0)");
layer1.Add(feature1);

Feature feature2 = layer1.ConstructFeature();
feature2.Geometry = Geometry.FromText("LINESTRING(0 100, 250 200)");
layer2.Add(feature2);

Feature feature3 = layer1.ConstructFeature();
feature3.Geometry = Geometry.FromText("LINESTRING(-250 200, 250 0)");
layer3.Add(feature3);

List<VectorLayer> listLayers = new List<VectorLayer>();
listLayers.Add(layer1);
listLayers.Add(layer2);
listLayers.Add(layer3);

GeneratorTiles.GenerateTiles(listLayers, OutDirectory, zoom: 0); // aby zobaczyć całą płytkę
GeneratorTiles.GenerateTiles(listLayers, OutDirectory, zoom: 1); // aby zobaczyć 4 płytki