예제 #1
0
        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.
        }
예제 #2
0
        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;
        }
예제 #3
0
        /// <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);
                }
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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;
        }
예제 #6
0
        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;
        }
예제 #7
0
        /// <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;
                }
            }
        }
예제 #8
0
        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);
        }
예제 #9
0
        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);
        }
예제 #10
0
        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;
        }
예제 #11
0
        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);
        }
예제 #12
0
        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);
        }
예제 #13
0
 protected abstract void PlaceTile(UnwrappedTileId tileId, UnityTile tile, IMapReadable map);