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.
39 lines
1.8 KiB
39 lines
1.8 KiB
using Mapbox.Map;
|
|
using Mapbox.Unity.Map.Interfaces;
|
|
using Mapbox.Unity.MeshGeneration.Data;
|
|
using Mapbox.Unity.Utilities;
|
|
using Mapbox.Utils;
|
|
using UnityEngine;
|
|
|
|
namespace Mapbox.Unity.Map.TileProviders
|
|
{
|
|
//TODO : obsolete.
|
|
[CreateAssetMenu(menuName = "Mapbox/MapVisualizer/QuadTreeMapVisualizer")]
|
|
public class QuadTreeMapVisualizer : AbstractMapVisualizer
|
|
{
|
|
protected override void PlaceTile(UnwrappedTileId tileId, UnityTile tile, IMapReadable map)
|
|
{
|
|
//get the tile covering the center (Unity 0,0,0) of current extent
|
|
UnwrappedTileId centerTile = TileCover.CoordinateToTileId(map.CenterLatitudeLongitude, map.AbsoluteZoom);
|
|
//get center WebMerc corrdinates of tile covering the center (Unity 0,0,0)
|
|
Vector2d centerTileCenter = Conversions.TileIdToCenterWebMercator(centerTile.X, centerTile.Y, map.AbsoluteZoom);
|
|
//calculate distance between WebMerc center coordinates of center tile and WebMerc coordinates exactly at center
|
|
Vector2d shift = map.CenterMercator - centerTileCenter;
|
|
var unityTileSize = map.UnityTileSize;
|
|
// get factor at equator to avoid shifting errors at higher latitudes
|
|
float factor = Conversions.GetTileScaleInMeters(0f, map.AbsoluteZoom) * 256.0f / unityTileSize;
|
|
var scaleFactor = Mathf.Pow(2, (map.InitialZoom - map.AbsoluteZoom));
|
|
|
|
//position the tile relative to the center tile of the current viewport using the tile id
|
|
//multiply by tile size Unity units (unityTileScale)
|
|
//shift by distance of current viewport center to center of center tile
|
|
float shiftX = (float)shift.x / factor;
|
|
float shiftY = (float)shift.y / factor;
|
|
Vector3 position = new Vector3(
|
|
((tileId.X - centerTile.X) * unityTileSize - shiftX) * scaleFactor
|
|
, 0
|
|
, ((centerTile.Y - tileId.Y) * unityTileSize - shiftY) * scaleFactor);
|
|
tile.transform.localPosition = position;
|
|
}
|
|
}
|
|
}
|
|
|