コード例 #1
0
ファイル: TileMatrix.cs プロジェクト: Venzz/VkPhotos
        public Changes Apply(UInt16 width, UInt16 height, Double zoomLevel, GeoPoint center, Boolean recreate)
        {
            var previousTiles = new List <GeoTileWithObjects <T> >(GetTiles());
            var tileWidth     = 360.0 / (1 << (Byte)zoomLevel);
            var tileHeight    = 180.0 / (1 << (Byte)zoomLevel);

            Width  = width;
            Height = height;

            Matrix = new GeoTileWithObjects <T> [Height * 2 + 1, Width * 2 + 1];
            Matrix[Height, Width] = new GeoTileWithObjects <T>(center, (Byte)zoomLevel);
            var centerPoint = Matrix[Height, Width].Tile.Point;

            for (var i = -Width; i <= Width; i++)
            {
                for (var j = -Height; j <= Height; j++)
                {
                    if ((i == 0) && (j == 0))
                    {
                        continue;
                    }
                    Matrix[j + Height, i + Width] = new GeoTileWithObjects <T>(new GeoTile(new GeoPoint(centerPoint.Latitude + tileHeight * j, centerPoint.Longitude + tileWidth * i), (Byte)zoomLevel));
                }
            }

            var newTiles        = new List <GeoTileWithObjects <T> >(GetTiles());
            var notChangedTiles = recreate ? new List <GeoTileWithObjects <T> >() : previousTiles.Intersect(newTiles).ToList();

            foreach (var notChangedTile in notChangedTiles)
            {
                var previousTile = previousTiles[previousTiles.IndexOf(notChangedTile)];
                var newTile      = newTiles[newTiles.IndexOf(notChangedTile)];
                foreach (var obj in previousTile.Objects)
                {
                    newTile.Objects.Add(obj);
                }
            }
            var removedTiles = previousTiles.Except(notChangedTiles).ToList();
            var addedTiles   = GetTiles().Except(notChangedTiles).ToList();

            return(new Changes(removedTiles, addedTiles, notChangedTiles));
        }
コード例 #2
0
 public TileWithNodesData(GeoTileWithObjects <Object> tile, IEnumerable <NodeData> nodesData)
 {
     Tile = tile; NodesData = nodesData;
 }