Esempio n. 1
0
        /// <summary>
        ///
        /// </summary>
        public void Initialise(ILayer baseLayer)
        {
            #region Construct View Port , Add Transforms, Scale

            Viewport3D viewport = ViewPort;
            _transform = new Transform3DGroup();
            _transform.Children.Add(_scale);
            _rotationTranform = new RotateTransform3D(_rotation);
            _transform.Children.Add(_rotationTranform);

            AmbientLight _ambLight = new AmbientLight(System.Windows.Media.Brushes.White.Color);
            var          visuald   = new ModelVisual3D();
            Model3DGroup M3dG      = new Model3DGroup();
            M3dG.Children.Add(_ambLight);
            visuald.Content = M3dG;
            viewport.Children.Add(visuald);

            #endregion

            BaseLayer     = baseLayer;
            this.RootTile = new GlobeTile(0, 0, 0, visuald);

            var root = this.RootTile;
            this.RootTile.zoomIn();

            //Map Viewport as Event Source to Map Event Handlers.
            EventSource = viewport;

            //Add All Necessary Transforms to view port Camera.
            viewport.Camera.Transform = _transform;

            #region Populate Initial Layer [Based on MS Bing Map]


            var initialKey = "032010110132012031";//initial key
            for (var i = 0; i < initialKey.Length; i++)
            {
                root.Children[int.Parse(initialKey.Substring(i, 1))].zoomIn();
            }


            #endregion

            #region Map Events to Handelers

            viewport.MouseDown   += viewport_MouseDown;
            viewport.MouseUp     += viewport_MouseUp;
            viewport.MouseMove   += viewport_MouseMove;
            viewport.MouseWheel  += viewport_MouseWheel;
            viewport.SizeChanged += viewport_SizeChanged;

            #endregion

            RedrawSphere();
        }
Esempio n. 2
0
        public GlobeTile CreateTile(Transform parent, Wmts coords)
        {
            GameObject tileGo = Instantiate(tileTemplate);

            tileGo.transform.SetParentClearRelativeTransform(parent);
            tileGo.name = coords.ToString();

            GlobeTile tile = tileGo.GetComponent <GlobeTile>();

            tile.coords = coords;
            tile.globe  = globe;
            tile.bBox   = Layer.Wmts2DefaultBbox(coords);
            tile.SetVisible(false);
            return(tile);
        }
Esempio n. 3
0
        private void CreateTile(GlobeTile parent, Wmts coords)
        {
            GameObject tileGo = Instantiate(tileTemplate);

            tileGo.transform.SetParentClearRelativeTransform(parent.transform);
            tileGo.name = coords.ToString();

            GlobeTile tile = tileGo.GetComponent <GlobeTile>();

            tile.coords = coords;
            tile.globe  = globe;
            tile.bBox   = globe.CurrentLayer.Wmts2Bbox(coords);

            tile.SetVisible(false);

            parent.AddChild(tile);
        }
Esempio n. 4
0
		void AddTileToRenderList(int x, int y, int zoom)
		{
			string key = GenerateKey(x, y, zoom);

			if (tilesToRender.ContainsKey(key)) return;

			if (tilesOld.ContainsKey(key))
			{
				tilesToRender.Add(key, tilesOld[key]);
				tilesOld.Remove(key);
				return;
			}


			long numTiles = 1 << zoom;

			double x0 = ((double)(x + 0) / (double)numTiles);
			double y0 = ((double)(y + 0) / (double)numTiles);
			double x1 = ((double)(x + 1) / (double)numTiles);
			double y1 = ((double)(y + 1) / (double)numTiles);


			if (tilesFree.Any()) {
				GlobeTile tile;
				if (tilesFree.ContainsKey(key)) {
					tile = tilesFree[key];
					tilesFree.Remove(key);
				} else {
					var temp = tilesFree.First();
					tile = temp.Value;
					tilesFree.Remove(temp.Key);
				}


				tile.X = x;
				tile.Y = y;
				tile.Z = zoom;

				tile.left = x0;
				tile.right = x1;
				tile.top = y0;
				tile.bottom = y1;

				int[] indexes;
				Gis.GeoPoint[] vertices;

				CalculateVertices(out vertices, out indexes, tileDensity, x0, x1, y0, y1);

				tile.VertexBuf.SetData(vertices, 0, vertices.Length);
				tile.IndexBuf.SetData(indexes, 0, indexes.Length);

				tilesToRender.Add(key, tile);

			} else {

				var tile = new GlobeTile {
					X		= x,
					Y		= y,
					Z		= zoom,
					left	= x0,
					right	= x1,
					top		= y0,
					bottom	= y1
				};


				GenerateTileGrid(tileDensity, ref tile.VertexBuf, out tile.IndexBuf, x0, x1, y0, y1, zoom);

				tilesToRender.Add(key, tile);
			}
		}
Esempio n. 5
0
 public void CreateTileAsync(GlobeTile parent, Wmts coords)
 {
     tileQueue.Enqueue(new TileCreationParams(parent, coords));
 }
Esempio n. 6
0
 public TileCreationParams(GlobeTile parent, Wmts coords)
 {
     this.parent = parent;
     this.coords = coords;
 }
Esempio n. 7
0
        void AddTileToRenderList(int x, int y, int zoom)
        {
            string key = GenerateKey(x, y, zoom);

            if (tilesToRender.ContainsKey(key))
            {
                return;
            }

            if (tilesOld.ContainsKey(key))
            {
                tilesToRender.Add(key, tilesOld[key]);
                tilesOld.Remove(key);
                return;
            }
            //if (tilesFree.ContainsKey(key)) {
            //	tilesToRender.Add(key, tilesFree[key]);
            //	tilesFree.Remove(key);
            //	return;
            //}


            long numTiles = 1 << zoom;

            double x0 = ((double)(x + 0) / (double)numTiles);
            double y0 = ((double)(y + 0) / (double)numTiles);
            double x1 = ((double)(x + 1) / (double)numTiles);
            double y1 = ((double)(y + 1) / (double)numTiles);


            if (tilesFree.Any())
            {
                GlobeTile tile;
                if (tilesFree.ContainsKey(key))
                {
                    tile = tilesFree[key];
                    tilesFree.Remove(key);
                }
                else
                {
                    var temp = tilesFree.First();
                    tile = temp.Value;
                    tilesFree.Remove(temp.Key);
                }


                tile.LeftTopMerc     = new Vector2((float)x0, (float)y0);
                tile.RightBottomMerc = new Vector2((float)x1, (float)y1);

                tile.X = x;
                tile.Y = y;
                tile.Z = zoom;

                tile.left   = x0;
                tile.right  = x1;
                tile.top    = y0;
                tile.bottom = y1;

                int[]     indexes;
                GeoVert[] vertices;

                CalculateVertices(out vertices, out indexes, tileDensity, x0, x1, y0, y1, zoom);

                tile.VertexBuf.SetData(vertices, 0, vertices.Length);
                tile.IndexBuf.SetData(indexes, 0, indexes.Length);

                tilesToRender.Add(key, tile);
            }
            else
            {
                var tile = new GlobeTile {
                    LeftTopMerc     = new Vector2((float)x0, (float)y0),
                    RightBottomMerc = new Vector2((float)x1, (float)y1),
                    X      = x,
                    Y      = y,
                    Z      = zoom,
                    left   = x0,
                    right  = x1,
                    top    = y0,
                    bottom = y1
                };


                GenerateTileGrid(tileDensity, out tile.VertexBuf, out tile.IndexBuf, x0, x1, y0, y1, zoom);

                tilesToRender.Add(key, tile);
            }
        }