// Copyright (C) Stichting Deltares 2017. All rights reserved.
//
// This file is part of Ringtoets.
//
// Ringtoets is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public License
// along with this program. If not, see .
//
// All names, logos, and references to "Deltares" are registered trademarks of
// Stichting Deltares and remain full property of Stichting Deltares at all times.
// All rights reserved.
using System;
using System.Text.RegularExpressions;
using BruTile;
using BruTile.Wmts;
using Core.Components.Gis.Data;
namespace Core.Components.BruTile.TestUtil
{
///
/// Factory class to create instances of .
///
public static class TileSchemaFactory
{
///
/// Create a based on a instance.
///
/// The data for which the schema will be based upon.
/// The newly created tile schema.
/// Thrown when isn't
/// configured.
public static WmtsTileSchema CreateWmtsTileSchema(WmtsMapData mapData)
{
if (!mapData.IsConfigured)
{
throw new ArgumentException($"Only configured {typeof(WmtsMapData).Name} instances can be used to create a schema for.",
nameof(mapData));
}
WmtsTileSchema schema = ConstructWmtsTileSchema();
schema.Title = mapData.Name;
schema.Format = mapData.PreferredFormat;
schema.Resolutions["1"] = new Resolution("1", 1);
var capabilityIdRegex = new Regex(@"(?.+)\((?.+)\)");
Match match = capabilityIdRegex.Match(mapData.SelectedCapabilityIdentifier);
schema.Layer = match.Groups["Layer"].Value;
schema.TileMatrixSet = match.Groups["TileMatrixSet"].Value;
var coordinateSystemRegex = new Regex(@"EPSG:(?\d+)");
Match potentialMatch = coordinateSystemRegex.Match(schema.TileMatrixSet);
schema.Srs = potentialMatch.Success ?
$"EPSG:{potentialMatch.Groups["SrsNumber"]}" :
"EPSG:3857";
return schema;
}
private static WmtsTileSchema ConstructWmtsTileSchema()
{
return (WmtsTileSchema) Activator.CreateInstance(typeof(WmtsTileSchema), true);
}
}
}