Ejemplo n.º 1
0
        private void Run(UnityTile tile)
        {
            var parameters = new Tile.Parameters
            {
                Fs    = this.FileSource,
                Id    = new CanonicalTileId(tile.Zoom, (int)tile.TileCoordinate.x, (int)tile.TileCoordinate.y),
                MapId = _mapId
            };

            tile.HeightDataState = TilePropertyState.Loading;
            var pngRasterTile = new RawPngRasterTile();

            pngRasterTile.Initialize(parameters, () =>
            {
                if (pngRasterTile.Error != null)
                {
                    tile.HeightDataState = TilePropertyState.Error;
                    return;
                }

                var texture      = new Texture2D(256, 256);
                texture.wrapMode = TextureWrapMode.Clamp;
                texture.LoadImage(pngRasterTile.Data);
                CreateTerrain(tile, texture);

                tile.HeightData      = texture;
                tile.HeightDataState = TilePropertyState.Loaded;

                FixStitches(tile);
            });
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Creates the non-flat terrain using a height multiplier
        /// </summary>
        /// <param name="tile"></param>
        /// <param name="heightMultiplier">Multiplier for queried height value</param>
        private void CreateTerrainHeight(UnityTile tile, float heightMultiplier = 1)
        {
            if (tile.HeightData == null)
            {
                var parameters = new Tile.Parameters
                {
                    Fs    = this.FileSource,
                    Id    = new CanonicalTileId(tile.Zoom, (int)tile.TileCoordinate.x, (int)tile.TileCoordinate.y),
                    MapId = _mapId
                };

                tile.HeightDataState = TilePropertyState.Loading;
                var pngRasterTile = new RawPngRasterTile();
                pngRasterTile.Initialize(parameters, () =>
                {
                    if (pngRasterTile.Error != null)
                    {
                        tile.HeightDataState = TilePropertyState.Error;
                        return;
                    }
                    var texture      = new Texture2D(256, 256);
                    texture.wrapMode = TextureWrapMode.Clamp;
                    texture.LoadImage(pngRasterTile.Data);
                    tile.HeightData      = texture;
                    tile.HeightDataState = TilePropertyState.Loaded;
                    GenerateTerrainMesh(tile, heightMultiplier);
                });
            }
            else
            {
                GenerateTerrainMesh(tile, heightMultiplier);
            }
        }
Ejemplo n.º 3
0
        public void States()
#endif
        {
            var parameters = new Tile.Parameters();

            parameters.Fs = _fs;
            parameters.Id = new CanonicalTileId(1, 1, 1);

            var tile = new RawPngRasterTile();

            Assert.AreEqual(Tile.State.New, tile.CurrentState);

            tile.Initialize(parameters, () => { });
            Assert.AreEqual(Tile.State.Loading, tile.CurrentState);

#if UNITY_5_6_OR_NEWER
            IEnumerator enumerator = _fs.WaitForAllRequests();
            while (enumerator.MoveNext())
            {
                yield return(null);
            }
#else
            _fs.WaitForAllRequests();
#endif

            Assert.AreEqual(Tile.State.Loaded, tile.CurrentState);

            tile.Cancel();
            Assert.AreEqual(Tile.State.Canceled, tile.CurrentState);
        }
Ejemplo n.º 4
0
        private void BuildRasterTile()
        {
            var parameters = new Tile.Parameters
            {
                Fs    = _fileSource,
                Id    = new CanonicalTileId(zoomLevel, (int)tileCoordinate.x, (int)tileCoordinate.y),
                MapId = string.IsNullOrEmpty(_styleUrl) ? "mapbox://styles/mapbox/satellite-v9" : _styleUrl
            };

            // Use RasterTile class for raster tiles. Requests mapbox.satellite mapid by default.
            var rasterTile = new RasterTile();

            rasterTile.Initialize(parameters, () =>
            {
                if (rasterTile.Error != null)
                {
                    Debug.Log(rasterTile.Error);
                    return;
                }

                var satt = new Texture2D(512, 512);
                satt.LoadImage(rasterTile.Data);

                var rend = tileObject.GetComponent <MeshRenderer>();
                rend.material.mainTexture = satt;
            });
        }
Ejemplo n.º 5
0
        public void TileLoading()
#endif
        {
            byte[] data;

            var parameters = new Tile.Parameters();

            parameters.Fs = _fs;
            parameters.Id = new CanonicalTileId(1, 1, 1);

            var tile = new RawPngRasterTile();

            tile.Initialize(parameters, () => { data = tile.Data; });

#if UNITY_5_6_OR_NEWER
            IEnumerator enumerator = _fs.WaitForAllRequests();
            while (enumerator.MoveNext())
            {
                yield return(null);
            }
#else
            _fs.WaitForAllRequests();
#endif

            Assert.Greater(tile.Data.Length, 1000);
        }
Ejemplo n.º 6
0
        private void Run(UnityTile tile)
        {
            if (!string.IsNullOrEmpty(_mapId))
            {
                var parameters = new Tile.Parameters();
                parameters.Fs    = this.FileSource;
                parameters.Id    = new CanonicalTileId(tile.Zoom, (int)tile.TileCoordinate.x, (int)tile.TileCoordinate.y);
                parameters.MapId = _mapId;

                tile.ImageDataState = TilePropertyState.Loading;
                var rasterTile = parameters.MapId.StartsWith("mapbox://") ? new RasterTile() : new ClassicRasterTile();
                rasterTile.Initialize(parameters, (Action)(() =>
                {
                    if (rasterTile.Error != null)
                    {
                        tile.ImageDataState = TilePropertyState.Error;
                        return;
                    }

                    var rend = tile.GetComponent <MeshRenderer>();
                    rend.material = _baseMaterial;
                    tile.ImageData = new Texture2D(256, 256, TextureFormat.RGB24, false);
                    tile.ImageData.wrapMode = TextureWrapMode.Clamp;
                    tile.ImageData.LoadImage(rasterTile.Data);
                    rend.material.mainTexture = tile.ImageData;
                    tile.ImageDataState = TilePropertyState.Loaded;
                }));
            }
            else
            {
                var rend = tile.GetComponent <MeshRenderer>();
                rend.material = _baseMaterial;
            }
        }
Ejemplo n.º 7
0
 protected override void OnInitialized(Tile.Parameters parameters)
 {
     if (!string.IsNullOrEmpty(_styleUrl))
     {
         parameters.MapId = _styleUrl;
     }
     _tile.Initialize(parameters, HandleTileLoaded);
 }
Ejemplo n.º 8
0
        private void BuildVectorTile()
        {
            // Define which features from the vector tile will be made into game objects
            var builderDictionary = new Dictionary <string, MeshBuilder>()
            {
                {
                    "building", new MeshBuilder()
                    {
                        Modifiers = new List <MeshModifier>()
                        {
                            new PolygonMeshModifier(),
                            new UvModifier(),
                            new HeightModifier()
                        }
                    }
                },
                // Not using these for now.
                //{
                //    "road", new MeshBuilder()
                //    {
                //        Modifiers = new List<MeshModifier>()
                //        {
                //            new LineMeshModifier(),
                //            new UvModifier(),
                //            new HeightModifier()
                //        }
                //    }
                //}
            };

            var parameters = new Tile.Parameters
            {
                Fs = _fileSource,
                Id = new CanonicalTileId(zoomLevel, (int)tileCoordinate.x, (int)tileCoordinate.y)
            };

            // Use VectorTile class for vector tiles. Requests mapbox.mapbox-streets-v7 mapid by default.
            var vectorTile = new VectorTile();

            vectorTile.Initialize(parameters, () =>
            {
                if (vectorTile.Error != null)
                {
                    Debug.Log(vectorTile.Error);
                    return;
                }

                foreach (var builder in builderDictionary)
                {
                    var layer = vectorTile.GetLayer(builder.Key);
                    builder.Value.Create(layer, tileRect, heightData, tileObject.transform, parameters);
                }
            });
        }
Ejemplo n.º 9
0
        private void BuildTerrainTile()
        {
            var parameters = new Tile.Parameters
            {
                Fs = _fileSource,
                Id = new CanonicalTileId(zoomLevel, (int)tileCoordinate.x, (int)tileCoordinate.y)
            };

            // Use RawPngRasterTile class for terrain. requests mapbox.terrain-rgb mapid by default.
            var heightTile = new RawPngRasterTile();

            heightTile.Initialize(parameters, () =>
            {
                if (heightTile.Error != null)
                {
                    Debug.Log(heightTile.Error);
                    return;
                }

                heightData = new Texture2D(256, 256);
                heightData.LoadImage(heightTile.Data);

                //var heightOffset = GetHeightFromColor(heightData.GetPixel(0, 0));

                var verts = new List <Vector3>();
                for (float x = 0; x < tileResolution; x++)
                {
                    for (float y = 0; y < tileResolution; y++)
                    {
                        var stepx  = Mathf.Lerp(-tileHalfEdge, tileHalfEdge, x / (tileResolution - 1));
                        var stepy  = 1 - Mathf.Lerp(-tileHalfEdge, tileHalfEdge, y / (tileResolution - 1));
                        var height = GetHeightFromColor(heightData.GetPixel((int)Mathf.Clamp((x / (tileResolution - 1) * 256), 0, 255), (int)Mathf.Clamp((256 - (y / (tileResolution - 1) * 256)), 0, 255)));
                        verts.Add(new Vector3(stepx,
                                              height,
                                              stepy));
                    }
                }

                //tileObject.transform.position = new Vector3(0, heightOffset, 0);

                var mf = tileObject.GetComponent <MeshFilter>();
                mf.mesh.SetVertices(verts);
                mf.mesh.RecalculateNormals();
                mf.mesh.RecalculateBounds();
                SnapCamera();
            });
        }
Ejemplo n.º 10
0
        public void TileLoading()
        {
            byte[] data;

            var parameters = new Tile.Parameters();

            parameters.Fs = this.fs;
            parameters.Id = new CanonicalTileId(1, 1, 1);

            var tile = new RawPngRasterTile();

            tile.Initialize(parameters, () => { data = tile.Data; });

            this.fs.WaitForAllRequests();

            Assert.Greater(tile.Data.Length, 1000);
        }
Ejemplo n.º 11
0
        void Build()
        {
            foreach (var tile in _instantiatedTiles)
            {
                Destroy(tile);
            }

            _instantiatedTiles.Clear();

            _unwrappedTileId = MapboxConvenience.LatitudeLongitudeToTileId(_latitude, _longitude, _zoom);

            _parameters = new Tile.Parameters
            {
                Fs = MapboxConvenience.Instance.FileSource,
                Id = new CanonicalTileId(_zoom, _unwrappedTileId.X, _unwrappedTileId.Y)
            };

            Initialize(_parameters);
        }
Ejemplo n.º 12
0
        public void States()
        {
            var parameters = new Tile.Parameters();

            parameters.Fs = this.fs;
            parameters.Id = new CanonicalTileId(1, 1, 1);

            var tile = new RawPngRasterTile();

            Assert.AreEqual(Tile.State.New, tile.CurrentState);

            tile.Initialize(parameters, () => { });
            Assert.AreEqual(Tile.State.Loading, tile.CurrentState);

            this.fs.WaitForAllRequests();
            Assert.AreEqual(Tile.State.Loaded, tile.CurrentState);

            tile.Cancel();
            Assert.AreEqual(Tile.State.Canceled, tile.CurrentState);
        }
Ejemplo n.º 13
0
        protected override void OnInitialized(Tile.Parameters parameters)
        {
            for (int i = 0; i < _mapWidth; i++)
            {
                for (int j = 0; j < _mapHeight; j++)
                {
                    var instance = Instantiate <GameObject>(_tilePrefab);
                    _instantiatedTiles.Add(instance);
                    instance.transform.SetParent(transform, false);
                    instance.transform.localPosition = new Vector3(_tileSize * i, 0, _tileSize * j);

                    // Unity plane UVs are "backwards."
                    var tiles = instance.GetInterfaces <ITile>();
                    foreach (var tile in tiles)
                    {
                        parameters.Id = new CanonicalTileId(_zoom, _unwrappedTileId.X - i, _unwrappedTileId.Y + j);
                        tile.Initialize(parameters);
                    }
                }
            }
        }
Ejemplo n.º 14
0
    void loadMapCone()
    {
        var parameters = new Tile.Parameters();

        parameters.Fs = MapboxAccess.Instance;
        // lat long -37.8142, 144.9632
        Vector2d latlong = _map.WorldToGeoPosition(transform.position);

        //UnwrappedTileId tileId = Conversions.LatitudeLongitudeToTileId(-37.8142, 144.9632, 10);
        // Current latlong: 144.96470,-37.82177
        Debug.Log("Current latlong: " + latlong);
        UnwrappedTileId tileId = Conversions.LatitudeLongitudeToTileId(latlong.x, latlong.y, 10);

        parameters.Id    = new CanonicalTileId(tileId.Z, tileId.X, tileId.Y);
        parameters.MapId = "mapbox://styles/quangquach/cjonlkxkg3it52snz3q5yfnqd";
        var rasterTile = new RasterTile();

        Debug.Log("Start to fetch Mapbox");
        rasterTile.Initialize(parameters, (Action)(() =>
        {
            if (!rasterTile.HasError)
            {
                Debug.Log("Mapbox image loaded, saving");
                var texture = new Texture2D(0, 0);
                texture.LoadImage(rasterTile.Data);

                string filePath = String.Join(System.IO.Path.DirectorySeparatorChar.ToString(), new string[] {
                    Application.dataPath,
                    "maptest.png"
                });

                File.WriteAllBytes(filePath, rasterTile.Data);
            }
            else
            {
                Debug.Log("Mapbox failed to load image!");
            }
        }));
    }
Ejemplo n.º 15
0
 protected override void OnInitialized(Tile.Parameters parameters)
 {
     _elevation.Initialize(parameters, HandleTileLoaded);
 }
Ejemplo n.º 16
0
 protected abstract void OnInitialized(Tile.Parameters parameters);
Ejemplo n.º 17
0
 public void Initialize(Tile.Parameters parameters)
 {
     _center            = MapboxConvenience.TileIdToLatitudeLongitude(parameters.Id.X, parameters.Id.Y, parameters.Id.Z);
     _tileScaleInMeters = MapboxConvenience.GetTileScaleInMeters(_center.x, parameters.Id.Z);
     OnInitialized(parameters);
 }
Ejemplo n.º 18
0
 public virtual void Create(VectorTileLayer layer, Rect rect, Texture2D height, Transform parent, Tile.Parameters parameters)
 {
 }
Ejemplo n.º 19
0
        public override void Create(VectorTileLayer layer, Rect rect, Texture2D height, Transform parent, Tile.Parameters parameters)
        {
            _container = new GameObject("Buildings");
            _container.transform.SetParent(parent, true);

            if (layer == null)
            {
                return;
            }

            for (int i = 0; i < layer.FeatureCount(); i++)
            {
                var feature = layer.GetFeature(i);
                Build(feature, rect, height, _container, parameters);
            }
        }
Ejemplo n.º 20
0
        private void Build(VectorTileFeature feature, Rect rect, Texture2D height, GameObject parent, Tile.Parameters parameters)
        {
            foreach (var geometry in feature.GeometryAsWgs84((ulong)parameters.Id.Z, (ulong)parameters.Id.X, (ulong)parameters.Id.Y))
            {
                var meshData = new MeshData();
                //we'll run all visualizers on MeshData here
                var list = geometry.Select(wgs84 => GM.LatLonToMeters(wgs84.Lat, wgs84.Lng).ToVector3xz()).ToList();
                meshData.Vertices = list.Select(vertex =>
                {
                    var cord = vertex - rect.center.ToVector3xz();
                    var rx   = (vertex.x - rect.min.x) / rect.width;
                    var ry   = 1 - (vertex.z - rect.min.y) / rect.height;

                    var h = height == null ? 0 : GetHeightFromColor(height.GetPixel(
                                                                        (int)Mathf.Clamp((rx * 256), 0, 255),
                                                                        (int)Mathf.Clamp((ry * 256), 0, 255)));
                    cord.y += h;

                    return(cord);
                }).ToList();

                foreach (var mod in Modifiers)
                {
                    mod.Run(feature, meshData);
                }

                CreateGameObject(meshData, parent);
            }
        }