67 lines
2.2 KiB
C#
67 lines
2.2 KiB
C#
using Microsoft.Extensions.Logging.Abstractions;
|
|
using TileServer.Domain.Tiles;
|
|
using TileServer.Infrastructure.Tiles;
|
|
using TileServer.Infrastructure.Tiles.Mvt;
|
|
|
|
namespace TileServer.UnitTests;
|
|
|
|
public sealed class VectorTileOverzoomerTests
|
|
{
|
|
[Fact]
|
|
public void Overzoom_MapsParentPointIntoNwChild()
|
|
{
|
|
var parent = EncodePoint(100, 100, "poi");
|
|
var overzoomer = new VectorTileOverzoomer(NullLogger<VectorTileOverzoomer>.Instance);
|
|
var child = overzoomer.Overzoom(parent, new TileCoordinate(0, 0, 0), new TileCoordinate(1, 0, 0));
|
|
|
|
var decoded = MvtCodec.Decode(child);
|
|
var layer = Assert.Single(decoded.Layers);
|
|
Assert.Equal("poi", layer.Name);
|
|
var feature = Assert.Single(layer.Features);
|
|
var path = Assert.Single(MvtCodec.DecodeGeometry(feature.Geometry));
|
|
var point = Assert.Single(path);
|
|
Assert.Equal(200, point.X);
|
|
Assert.Equal(200, point.Y);
|
|
}
|
|
|
|
[Fact]
|
|
public void Overzoom_DropsPointOutsideChild()
|
|
{
|
|
var parent = EncodePoint(100, 100, "poi");
|
|
var overzoomer = new VectorTileOverzoomer(NullLogger<VectorTileOverzoomer>.Instance);
|
|
var child = overzoomer.Overzoom(parent, new TileCoordinate(0, 0, 0), new TileCoordinate(1, 1, 1));
|
|
|
|
var decoded = MvtCodec.Decode(child);
|
|
Assert.Empty(decoded.Layers);
|
|
}
|
|
|
|
private static TileData EncodePoint(int x, int y, string layerName)
|
|
{
|
|
var tile = new MvtTile
|
|
{
|
|
Layers =
|
|
[
|
|
new MvtLayer
|
|
{
|
|
Name = layerName,
|
|
Extent = 4096,
|
|
Version = 2,
|
|
Keys = ["class"],
|
|
Values = [new MvtValue { StringValue = "test" }],
|
|
Features =
|
|
[
|
|
new MvtFeature
|
|
{
|
|
Id = 1,
|
|
Type = MvtCodec.Point,
|
|
Tags = [0, 0],
|
|
Geometry = MvtCodec.EncodeGeometry([[(x, y)]], close: false)
|
|
}
|
|
]
|
|
}
|
|
]
|
|
};
|
|
return MvtCodec.EncodeGzip(tile);
|
|
}
|
|
}
|