public void Helsinki()
        {
            // Assertion results verified on Mapbox GL Native.
            var sw = new Vector2d(60.163200, 24.937700);
            var ne = new Vector2d(60.163300, 24.937800);

            var set1 = TileCover.Get(new Vector2dBounds(sw, ne), 13);

            Assert.AreEqual(1, set1.Count);

            var list1 = new List <CanonicalTileId>(set1);

            Assert.AreEqual("13/4663/2371", list1[0].ToString());

            var set2 = TileCover.Get(new Vector2dBounds(sw, ne), 6);

            Assert.AreEqual(1, set2.Count);

            var list2 = new List <CanonicalTileId>(set2);

            Assert.AreEqual("6/36/18", list2[0].ToString());

            var set3 = TileCover.Get(new Vector2dBounds(sw, ne), 0);

            Assert.AreEqual(1, set3.Count);

            var list3 = new List <CanonicalTileId>(set3);

            Assert.AreEqual("0/0/0", list3[0].ToString());
        }
        public void Init()
        {
            _className = this.GetType().Name;

            Runnable.EnableRunnableInEditor();

            _allTilesetNames = new string[] {
                TS_NO_OVERWRITE
                , TS_FORCE_OVERWRITE
                , TS_CONCURRENT1
                , TS_CONCURRENT2
                , TS_CONCURRENT3
                , TS_CONCURRENT4
                , TS_PRUNE
                , TS_REINIT
            };

            Vector2d       southWest = new Vector2d(48.2174, 16.3662);
            Vector2d       northEast = new Vector2d(48.2310, 16.3877);
            Vector2dBounds bounds    = new Vector2dBounds(southWest, northEast);

            _tileIds = TileCover.Get(bounds, 19);


            // delete cache from previous runs
            string dbFullPath = SQLiteCache.GetFullDbPath(_dbName);

            if (File.Exists(dbFullPath))
            {
                File.Delete(dbFullPath);
            }

            _cache = new SQLiteCache(_maxCacheTileCount, _dbName);
        }
Beispiel #3
0
        void AddTiles(Vector2dBounds bounds, int zoom)
        {
            var tileCover = TileCover.Get(bounds, zoom);

            if (zoom == fullZoom)
            {
                foreach (var tile in tileCover)
                {
                    finalTiles.Add(new UnwrappedTileId(tile.Z, tile.X, tile.Y));
                }
                return;
            }

            var overlappingTileCover = overlappingTileCoverCache[zoom - _map.Zoom];

            foreach (var tile in tileCover)
            {
                if (!overlappingTileCover.Contains(tile))
                {
                    finalTiles.Add(new UnwrappedTileId(tile.Z, tile.X, tile.Y));
                }
                else
                {
                    AddTiles(Conversions.TileIdToBounds(tile.X, tile.Y, tile.Z), zoom + 1);
                }
            }
        }
Beispiel #4
0
        public override void OnInspectorGUI()
        {
            serializedObject.Update();

            EditorGUILayout.Space();

            string _notes = "The purpose of this example is to demonstrate a slippy map built with the sdk \n"
                            + " using satellite imagery draped over geometry generated from terrain data.\n"
                            + "At runtime an area that corresponds the specified lat/lon Northeast and Southwest coordinates\n"
                            + "and zoom level will be created. \n"
                            + "The area displayed will be determined by the zoom and bounding box.\n"
                            + " mouse click and drag to pan the map in play mode.\n";

            EditorGUILayout.HelpBox(_notes, MessageType.Info);

            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Southwest coordinate");
            south.doubleValue = EditorGUILayout.DelayedDoubleField(south.doubleValue);
            west.doubleValue  = EditorGUILayout.DelayedDoubleField(west.doubleValue);
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Northeast coordinate");
            north.doubleValue = EditorGUILayout.DelayedDoubleField(north.doubleValue);
            east.doubleValue  = EditorGUILayout.DelayedDoubleField(east.doubleValue);
            EditorGUILayout.EndHorizontal();

            var bounds = new GeoCoordinateBounds(
                new GeoCoordinate(south.doubleValue, west.doubleValue),
                new GeoCoordinate(north.doubleValue, east.doubleValue));

            EditorGUILayout.Space();
            EditorGUILayout.BeginHorizontal();
            EditorGUILayout.LabelField("Center coordinate");
            EditorGUILayout.LabelField(bounds.Center.ToString());
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.Space();
            EditorGUILayout.IntSlider(zoom, 0, 20, new GUIContent("Zoom"));

            var tileCount = TileCover.Get(bounds, zoom.intValue).Count;

            EditorGUILayout.Space();
            EditorGUILayout.LabelField("Tile count", tileCount.ToString());

            if (tileCount > Map <RasterTile> .TileMax)
            {
                EditorGUILayout.Space();
                EditorGUILayout.HelpBox("Too many tiles!", MessageType.Error);
            }

            EditorGUILayout.Space();
            edge.floatValue = EditorGUILayout.FloatField("Tile edge", edge.floatValue);

            serializedObject.ApplyModifiedProperties();

            DrawDefaultInspector();
        }
 public void World()
 {
     // Zoom > 8 will generate so many tiles that we
     // might run out of memory.
     for (int zoom = 0; zoom < 8; ++zoom)
     {
         var tiles = TileCover.Get(Vector2dBounds.World(), zoom);
         Assert.AreEqual(Math.Pow(4, zoom), tiles.Count);
     }
 }
Beispiel #6
0
        public void ToVector2d()
        {
            var set = TileCover.Get(Vector2dBounds.World(), 5);

            foreach (var tile in set)
            {
                var reverse = TileCover.CoordinateToTileId(tile.ToVector2d(), 5);

                Assert.AreEqual(tile.Z, reverse.Z);
                Assert.AreEqual(tile.X, reverse.X);
                Assert.AreEqual(tile.Y, reverse.Y);
            }
        }
        private void Update()
        {
            if (_map.AbsoluteZoom > 5)
            {
                throw new System.Exception("Too many tiles! Use a lower zoom level!");
            }

            var tileCover = TileCover.Get(Vector2dBounds.World(), _map.AbsoluteZoom);

            foreach (var tile in tileCover)
            {
                AddTile(new UnwrappedTileId(tile.Z, tile.X, tile.Y));
            }
        }
Beispiel #8
0
        public override void OnInitialized()
        {
            // HACK: don't allow too many tiles to be requested.
            if (_map.Zoom > 5)
            {
                throw new System.Exception("Too many tiles! Use a lower zoom level!");
            }

            var tileCover = TileCover.Get(Vector2dBounds.World(), _map.Zoom);

            foreach (var tile in tileCover)
            {
                AddTile(new UnwrappedTileId(tile.Z, tile.X, tile.Y));
            }
        }
Beispiel #9
0
        public override void UpdateTileExtent()
        {
            // HACK: don't allow too many tiles to be requested.
            if (_map.AbsoluteZoom > 5)
            {
                throw new System.Exception("Too many tiles! Use a lower zoom level!");
            }

            var tileCover = TileCover.Get(Vector2dBounds.World(), _map.AbsoluteZoom);

            foreach (var tile in tileCover)
            {
                _currentExtent.activeTiles.Add(new UnwrappedTileId(tile.Z, tile.X, tile.Y));
            }
            OnExtentChanged();
        }
Beispiel #10
0
        internal override void OnInitialized()
        {
            // HACK: don't allow too many tiles to be requested.
            if (_map.Zoom > 5 || fullZoom > 8)
            {
                throw new System.Exception("Too many tiles! Use a lower zoom level!");
            }

            if (showHighResArea)
            {
                string cacheFilename = ((int)(highResN * highResE * highResS * highResW * fullZoom)).ToString() + ".cache";

                if (File.Exists(cacheFilename))
                {
                    using (BinaryReader reader = new BinaryReader(File.Open(cacheFilename, FileMode.Open)))
                    {
                        int count = reader.ReadInt32();
                        for (int i = 0; i < count; ++i)
                        {
                            int z = reader.ReadInt32();
                            int x = reader.ReadInt32();
                            int y = reader.ReadInt32();

                            AddTile(new UnwrappedTileId(z, x, y));
                        }
                    }

                    return;
                }

                var sw = new Vector2d(highResS, highResW);
                var ne = new Vector2d(highResN, highResE);
                var b  = new Vector2dBounds(sw, ne);

                for (int i = _map.Zoom; i < fullZoom; ++i)
                {
                    overlappingTileCoverCache.Add(TileCover.Get(b, i));
                }

                AddTiles(Vector2dBounds.World(), _map.Zoom);

                using (BinaryWriter writer = new BinaryWriter(File.Open(cacheFilename, FileMode.Create)))
                {
                    writer.Write(finalTiles.Count);
                    foreach (var t in finalTiles)
                    {
                        writer.Write(t.Z);
                        writer.Write(t.X);
                        writer.Write(t.Y);

                        AddTile(t);
                    }
                }
            }
            else
            {
                foreach (var tile in TileCover.Get(Vector2dBounds.World(), _map.Zoom))
                {
                    AddTile(new UnwrappedTileId(tile.Z, tile.X, tile.Y));
                }
            }
        }