Ejemplo n.º 1
0
 public RasterFileInfoView(RasterInfo info, string dataType)
 {
     RasterNum = info.RasterNum ?? 0;
     if (dataType == "2G" && !string.IsNullOrEmpty(info.CsvFilesName2G))
     {
         CsvFilesNames = info.CsvFilesName2G.Split(';');
     }
     if (dataType == "3G" && !string.IsNullOrEmpty(info.CsvFilesName3G))
     {
         CsvFilesNames = info.CsvFilesName3G.Split(';');
     }
     if (dataType == "4G" && !string.IsNullOrEmpty(info.CsvFilesName4G))
     {
         CsvFilesNames = info.CsvFilesName4G.Split(';');
     }
 }
Ejemplo n.º 2
0
        public void GetJobSize(IRasterDataset dataset, int maxDesiredLevel, out int maxActualLevel, out int numTiles)
        {
            double xMin, yMin, xMax, yMax;

            maxActualLevel = 0;

            RasterInfo r = dataset.Info;

            xMin = r.FieldInfo[0].Envelope.XMin;
            xMax = r.FieldInfo[0].Envelope.XMax;
            yMin = r.FieldInfo[0].Envelope.YMin;
            yMax = r.FieldInfo[0].Envelope.YMax;
            var sourceSample = dataset.Info.FieldInfo[0].CellSizeX.Decimal;

            int  total = 0;
            bool atMax = false;
            int  zoom  = 0;

            while (!atMax)
            {
                var southWestTile = PointToTile.LatLonToTile(zoom, yMin, xMin);
                var northEastTile = PointToTile.LatLonToTile(zoom, yMax, xMax);
                var dx            = northEastTile.X - southWestTile.X;
                var dy            = northEastTile.Y - southWestTile.Y;

                //copy paste quick+ dirty code to determine whether we are creating this zoom level
                var boundingBox = PointToTile.TileBounds(zoom, northEastTile.X, northEastTile.Y);
                var tileSample  = (boundingBox.Max.Lon - boundingBox.Min.Lon) / 64;

                if (tileSample < (sourceSample / 2.0) || zoom > maxDesiredLevel)
                {
                    atMax = true;
                }
                else
                {
                    maxActualLevel = zoom;
                    zoom++;
                    total += ((dx + 1) * (dy + 1));
                }
            }

            numTiles = total;
        }
Ejemplo n.º 3
0
        public void CreateAllTiles(IRasterDataset dataset, int maxZoom, IOutput output, System.IProgress <int> progress = null)
        {
            double     xMin, yMin, xMax, yMax;
            var        bytes = 65 * 65 * 2;
            byte       zero  = 0;
            int        count = 0;
            RasterInfo r     = dataset.Info;

            xMin = r.FieldInfo[0].Envelope.XMin;
            xMax = r.FieldInfo[0].Envelope.XMax;
            yMin = r.FieldInfo[0].Envelope.YMin;
            yMax = r.FieldInfo[0].Envelope.YMax;


            Dictionary <string, string> existingTiles = new Dictionary <string, string>();

            for (int zoom = maxZoom; zoom >= 0; zoom--)
            {
                //only generate tiles within the extents of the data
                var southWestTile = PointToTile.LatLonToTile(zoom, yMin, xMin);
                var northEastTile = PointToTile.LatLonToTile(zoom, yMax, xMax);
                var dx            = northEastTile.X - southWestTile.X;
                var dy            = northEastTile.Y - southWestTile.Y;

                var boundingBox  = PointToTile.TileBounds(zoom, northEastTile.X, northEastTile.Y);
                var tileSample   = (boundingBox.Max.Lon - boundingBox.Min.Lon) / 64;
                var sourceSample = dataset.Info.FieldInfo[0].CellSizeX.Decimal;


                ThreadLocal <byte[]> terrainTileLocal = new ThreadLocal <byte[]>(() => new byte[(bytes + 2)]);
                Console.WriteLine($"{(dx+1)*dy}");
                Parallel.For(0, dx + 1, (easterlyOffset) =>
                {
                    Parallel.For(0, dy + 1, (northerlyOffset) =>
                    {
                        int tX               = southWestTile.X + easterlyOffset;
                        int tY               = southWestTile.Y + northerlyOffset;
                        var terrainTile      = terrainTileLocal.Value;
                        byte childQuadSwitch = zero;
                        if (zoom != maxZoom)
                        {
                            childQuadSwitch = GetChildQuads(zoom, tX, tY, existingTiles);
                        }
                        //always create tiles with child tiles
                        bool create = childQuadSwitch > 0 || (zoom == maxZoom);
                        if (create)
                        {
                            bool created = false;

                            created = CreateTile(tX, tY, zoom, dataset, terrainTile);


                            if (zoom == maxZoom)
                            {
                                create = created;
                            }
                        }


                        if (create)
                        {
                            terrainTile[bytes]     = childQuadSwitch;
                            terrainTile[bytes + 1] = 0;   //We'll say it's all land for now

                            output.WriteTile(zoom, tX, tY, terrainTile);
                            existingTiles.Add($"{zoom}/{tX}/{tY}", "");
                        }
                        progress?.Report(++count);
                    });
                });
            }
        }