You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mapbox-sdk/Unity/Map/TileProviders/RangeTileProvider.cs

54 lines
1.4 KiB

1 year ago
using System.Collections.Generic;
using Mapbox.Map;
namespace Mapbox.Unity.Map.TileProviders
{
public class RangeTileProvider : AbstractTileProvider
{
private RangeTileProviderOptions _rangeTileProviderOptions;
private bool _initialized = false;
public override void OnInitialized()
{
if (Options != null)
{
_rangeTileProviderOptions = (RangeTileProviderOptions)Options;
}
else
{
_rangeTileProviderOptions = new RangeTileProviderOptions();
}
_initialized = true;
_currentExtent.activeTiles = new HashSet<UnwrappedTileId>();
}
public override void UpdateTileExtent()
{
if (!_initialized || _rangeTileProviderOptions == null)
{
return;
}
_currentExtent.activeTiles.Clear();
var centerTile = TileCover.CoordinateToTileId(_map.CenterLatitudeLongitude, _map.AbsoluteZoom);
_currentExtent.activeTiles.Add(new UnwrappedTileId(_map.AbsoluteZoom, centerTile.X, centerTile.Y));
for (int x = (centerTile.X - _rangeTileProviderOptions.west); x <= (centerTile.X + _rangeTileProviderOptions.east); x++)
{
for (int y = (centerTile.Y - _rangeTileProviderOptions.north); y <= (centerTile.Y + _rangeTileProviderOptions.south); y++)
{
_currentExtent.activeTiles.Add(new UnwrappedTileId(_map.AbsoluteZoom, x, y));
}
}
OnExtentChanged();
}
public override bool Cleanup(UnwrappedTileId tile)
{
return (!_currentExtent.activeTiles.Contains(tile));
}
}
}