internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, int zoom, Texture2D loadingTexture = null) { TileScale = scale; _relativeScale = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x); Rect = Conversions.TileBounds(tileId); UnwrappedTileId = tileId; CanonicalTileId = tileId.Canonical; _loadingTexture = loadingTexture; float scaleFactor = 1.0f; if (_isInitialized == false) { _isInitialized = true; InitialZoom = zoom; } CurrentZoom = zoom; scaleFactor = Mathf.Pow(2, (map.InitialZoom - zoom)); gameObject.transform.localScale = new Vector3(scaleFactor, scaleFactor, scaleFactor); gameObject.SetActive(true); IsRecycled = false; //MeshRenderer.enabled = true; // Setup Loading as initial state - Unregistered // When tile registers with factories, it will set the appropriate state. // None, if Factory source is None, Loading otherwise. }
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; }
/// <summary> /// Initializes the factories by passing the file source down, which is necessary for data (web/file) calls /// </summary> /// <param name="fileSource"></param> public virtual void Initialize(IMapReadable map, IFileSource fileSource) { _map = map; _tileProgress = new Dictionary <UnwrappedTileId, int>(); // Allow for map re-use by recycling any active tiles. var activeTiles = _activeTiles.Keys.ToList(); foreach (var tile in activeTiles) { DisposeTile(tile); } State = ModuleState.Initialized; foreach (var factory in Factories) { if (null == factory) { Debug.LogError("AbstractMapVisualizer: Factory is NULL"); } else { factory.Initialize(fileSource); UnregisterEvents(factory); RegisterEvents(factory); } } }
internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, int zoom, Texture2D loadingTexture = null) { TileScale = scale; _unwrappedTileId = tileId; _loadingTexture = loadingTexture; // TODO geoAR: use boolean flag instead of direct type check if (map is SwissBasicMap) { // scale is constant, does not depend on latitude _relativeScale = scale; _rect = SwissConversions.TileBounds(tileId); // do not wrap around _canonicalTileId = new CanonicalTileId(tileId.Z, tileId.X, tileId.Y); } else { _relativeScale = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x); _rect = Conversions.TileBounds(tileId); _canonicalTileId = tileId.Canonical; } float scaleFactor = 1.0f; if (_isInitialized == false) { _isInitialized = true; InitialZoom = zoom; } scaleFactor = Mathf.Pow(2, (map.InitialZoom - zoom)); gameObject.transform.localScale = new Vector3(scaleFactor, scaleFactor, scaleFactor); gameObject.SetActive(true); }
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.WebMercatorToTileId(map.CenterMercator, _map.Zoom); //get center WebMerc corrdinates of tile covering the center (Unity 0,0,0) Vector2d centerTileCenter = Conversions.TileIdToCenterWebMercator(centerTile.X, centerTile.Y, _map.Zoom); //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.Zoom) * 256 / unityTileSize; Vector3 unityTileScale = new Vector3(unityTileSize, 1, unityTileSize); //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 Vector3 position = new Vector3( (tileId.X - centerTile.X) * unityTileSize - (float)shift.x / factor , 0 , (centerTile.Y - tileId.Y) * unityTileSize - (float)shift.y / factor); tile.transform.localPosition = position; tile.transform.localScale = unityTileScale; }
internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, int zoom, Texture2D loadingTexture = null) { TileScale = scale; _relativeScale = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x); _rect = Conversions.TileBounds(tileId); _unwrappedTileId = tileId; _canonicalTileId = tileId.Canonical; _loadingTexture = loadingTexture; float scaleFactor = 1.0f; if (_isInitialized == false) { _isInitialized = true; InitialZoom = zoom; } scaleFactor = Mathf.Pow(2, (map.InitialZoom - zoom)); gameObject.transform.localScale = new Vector3(scaleFactor, scaleFactor, scaleFactor); gameObject.SetActive(true); /* * Edit by Garry Guan */ var collider = gameObject.AddComponent <BoxCollider>(); var tileSize = new Vector3(100, 1, 100); //hard coded size collider.size = tileSize; }
/// <summary> /// Initializes the factories by passing the file source down, which is necessary for data (web/file) calls /// </summary> /// <param name="fileSource"></param> public void Initialize(IMapReadable map, IFileSource fileSource) { _map = map; // Allow for map re-use by recycling any active tiles. var activeTiles = _activeTiles.Keys.ToList(); foreach (var tile in activeTiles) { DisposeTile(tile); } State = ModuleState.Initialized; foreach (var factory in Factories) { if (null == factory) { Debug.LogError("AbstractMapVisualizer: Factory is NULL"); } else { factory.Initialize(fileSource); factory.OnFactoryStateChanged += UpdateState; } } }
internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, int zoom, Texture2D loadingTexture = null) { TileScale = scale; _relativeScale = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x); _rect = Conversions.TileBounds(tileId); _unwrappedTileId = tileId; _canonicalTileId = tileId.Canonical; _loadingTexture = loadingTexture; float scaleFactor = 1.0f; if (_isInitialized == false) { _isInitialized = true; InitialZoom = zoom; } scaleFactor = Mathf.Pow(2, (map.InitialZoom - zoom)); gameObject.transform.localScale = new Vector3(scaleFactor, 1, scaleFactor); /* STURFEE CHANGE: Changes the Mapbox tiles to 'Map' layer so the map camera can see it */ gameObject.layer = LayerMask.NameToLayer("Map"); gameObject.SetActive(true); }
internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, Texture2D loadingTexture = null) { TileScale = scale; _relativeScale = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x); _rect = Conversions.TileBounds(tileId); _unwrappedTileId = tileId; _canonicalTileId = tileId.Canonical; _loadingTexture = loadingTexture; gameObject.SetActive(true); }
protected override void PlaceTile(UnwrappedTileId tileId, UnityTile tile, IMapReadable map) { var rect = tile.Rect; // TODO: this is constant for all tiles--cache. var scale = tile.TileScale; var position = new Vector3( (float)(rect.Center.x - map.CenterMercator.x) * scale, 0, (float)(rect.Center.y - map.CenterMercator.y) * scale); tile.transform.localPosition = position; }
protected override void PlaceTile(UnwrappedTileId tileId, UnityTile tile, IMapReadable map) { var rect = tile.Rect; // TODO: this is constant for all tiles--cache. var scale = tile.TileScale; var position = new Vector3( (float)(rect.Center.x - map.CenterMercator.x) * scale, 0, (float)(rect.Center.y - map.CenterMercator.y) * scale); tile.transform.localPosition = position; tile.transform.parent.gameObject.GetComponent <GameController>().tiles.Add(tile.transform.gameObject); }
internal void Initialize(IMapReadable map, UnwrappedTileId tileId, float scale, int zoom, Texture2D loadingTexture = null) { TileScale = scale; _relativeScale = 1 / Mathf.Cos(Mathf.Deg2Rad * (float)map.CenterLatitudeLongitude.x); _rect = Conversions.TileBounds(tileId); _unwrappedTileId = tileId; _canonicalTileId = tileId.Canonical; _loadingTexture = loadingTexture; float scaleFactor = 1.0f; if (_isInitialized == false) { _isInitialized = true; InitialZoom = zoom; } scaleFactor = Mathf.Pow(2, (map.InitialZoom - zoom)); gameObject.transform.localScale = new Vector3(scaleFactor, scaleFactor, scaleFactor); gameObject.SetActive(true); }
protected abstract void PlaceTile(UnwrappedTileId tileId, UnityTile tile, IMapReadable map);