async public Task <IRasterLayer> NextRasterLayer()
        {
            if (_cursor == null || _layer == null)
            {
                return(null);
            }

            try
            {
                while (true)
                {
                    IFeature feature = await _cursor.NextFeature();

                    if (feature == null)
                    {
                        return(null);
                    }

                    IRasterLayer rLayer = null;

                    double cell   = Math.Max((double)feature["CELLX"], (double)feature["CELLY"]);
                    int    levels = Convert.ToInt32(feature["LEVELS"]);

                    if ((bool)feature["MANAGED"] && _layer._imageSpaceType == SQLiteFDBImageCatalogClass.ImageSpaceType.FileSystem)
                    {
                        //gView.DataSources.Raster.File.PyramidFileClass rasterClass = new gView.DataSources.Raster.File.PyramidFileClass(_layer._dataset, _layer._imageSpace + @"/" + (string)feature["MANAGED_FILE"], feature.Shape as IPolygon);
                        //if (rasterClass.isValid)
                        //{
                        //    rLayer = LayerFactory.Create(rasterClass) as IRasterLayer;
                        //    if (rLayer != null)
                        //    {
                        //        rLayer.InterpolationMethod = _layer.InterpolationMethod;
                        //        if (rasterClass.SpatialReference == null) rasterClass.SpatialReference = _layer._sRef;
                        //    }
                        //}
                    }
                    else if (!(bool)feature["MANAGED"])
                    {
                        if (feature["RF_PROVIDER"] == null || feature["RF_PROVIDER"] == DBNull.Value)
                        {
                            gView.DataSources.Raster.File.RasterFileDataset rDataset = new gView.DataSources.Raster.File.RasterFileDataset();
                            rLayer = rDataset.AddRasterFile((string)feature["PATH"], feature.Shape as IPolygon);
                        }
                        else
                        {
                            IRasterFileDataset rDataset = _layer._compMan.CreateInstance(new Guid(feature["RF_PROVIDER"].ToString())) as IRasterFileDataset;
                            if (rDataset == null)
                            {
                                continue;
                            }

                            rLayer = rDataset.AddRasterFile((string)feature["PATH"], feature.Shape as IPolygon);
                        }
                        if (rLayer != null && rLayer.RasterClass != null)
                        {
                            rLayer.InterpolationMethod = _layer.InterpolationMethod;
                            if (rLayer.RasterClass.SpatialReference == null)
                            {
                                rLayer.RasterClass.SpatialReference = _layer._sRef;
                            }
                        }
                    }

                    if (rLayer != null)
                    {
                        if (rLayer.Class is IGridClass)
                        {
                            IGridClass gridClass = (IGridClass)rLayer.Class;
                            gridClass.ColorClasses        = _layer.ColorClasses;
                            gridClass.UseHillShade        = _layer.UseHillShade;
                            gridClass.HillShadeVector     = _layer.HillShadeVector;
                            gridClass.UseIgnoreDataValue  = _layer.UseIgnoreDataValue;
                            gridClass.IgnoreDataValue     = _layer.IgnoreDataValue;
                            gridClass.RenderRawGridValues = _layer.RenderRawGridValues;
                        }

                        return(rLayer);
                    }
                }
            }
            catch
            {
            }
            return(null);
        }
Beispiel #2
0
        async public Task <IRasterLayer> NextRasterLayer()
        {
            if (_cursor == null || _layer == null)
            {
                return(null);
            }

            try
            {
                while (true)
                {
                    IFeature feature = await _cursor.NextFeature();

                    if (feature == null)
                    {
                        return(null);
                    }

                    IRasterLayer rLayer = null;

                    double cell = Math.Max((double)feature["CELLX"], (double)feature["CELLY"]);
                    int    levels = (int)feature["LEVELS"], level = 0;

                    if ((bool)feature["MANAGED"] && _layer._imageSpaceType == SqlFDBImageCatalogClass.ImageSpaceType.Database)
                    {
                        for (int l = 0; l < levels; l++)
                        {
                            if (cell * Math.Pow(2, l) < _pix)
                            {
                                level = l + 1;
                            }
                            else
                            {
                                break;
                            }
                        }
                        if (level == 0 && levels > 0)
                        {
                            level = 1;
                        }

                        DataTable tab = await _layer._fdb.Select("ID,SHAPE", _layer._dsname + "_IMAGE_DATA", "IMAGE_ID=" + feature.OID + " AND LEV=" + level);

                        if (tab == null)
                        {
                            continue;
                        }

                        foreach (DataRow row in tab.Rows)
                        {
                            byte[] obj = (byte[])row["SHAPE"];

                            BinaryReader r = new BinaryReader(new MemoryStream());
                            r.BaseStream.Write((byte[])obj, 0, ((byte[])obj).Length);
                            r.BaseStream.Position = 0;

                            Polygon polygon = new Polygon();
                            polygon.Deserialize(r, new GeometryDef(geometryType.Polygon, null, true));
                            r.Close();

                            if (gView.Framework.SpatialAlgorithms.Algorithm.IntersectBox(polygon, _dispEnvelope))
                            {
                                SqlFDBImageDatasetImageClass rClass = new SqlFDBImageDatasetImageClass(_layer._fdb, _layer._dsname, (int)row["ID"], polygon);
                                rLayer = new RasterLayer(rClass);
                                rLayer.InterpolationMethod = _layer.InterpolationMethod;
                                if (rClass.SpatialReference == null)
                                {
                                    rClass.SpatialReference = _layer._sRef;
                                }
                            }
                        }
                    }
                    else if (!(bool)feature["MANAGED"])
                    {
                        if (feature["RF_PROVIDER"] == null || feature["RF_PROVIDER"] == DBNull.Value)
                        {
                            gView.DataSources.Raster.File.RasterFileDataset rDataset = new gView.DataSources.Raster.File.RasterFileDataset();
                            rLayer = rDataset.AddRasterFile((string)feature["PATH"], feature.Shape as IPolygon);
                        }
                        else
                        {
                            IRasterFileDataset rDataset = _layer._compMan.CreateInstance(new Guid(feature["RF_PROVIDER"].ToString())) as IRasterFileDataset;
                            if (rDataset == null)
                            {
                                continue;
                            }

                            rLayer = rDataset.AddRasterFile((string)feature["PATH"], feature.Shape as IPolygon);
                        }
                        if (rLayer != null && rLayer.RasterClass != null)
                        {
                            rLayer.InterpolationMethod = _layer.InterpolationMethod;
                            if (rLayer.RasterClass.SpatialReference == null)
                            {
                                rLayer.RasterClass.SpatialReference = _layer._sRef;
                            }
                        }
                    }

                    if (rLayer != null)
                    {
                        if (rLayer.Class is IGridClass)
                        {
                            IGridClass gridClass = (IGridClass)rLayer.Class;
                            gridClass.ColorClasses        = _layer.ColorClasses;
                            gridClass.UseHillShade        = _layer.UseHillShade;
                            gridClass.HillShadeVector     = _layer.HillShadeVector;
                            gridClass.UseIgnoreDataValue  = _layer.UseIgnoreDataValue;
                            gridClass.IgnoreDataValue     = _layer.IgnoreDataValue;
                            gridClass.RenderRawGridValues = _layer.RenderRawGridValues;
                        }

                        return(rLayer);
                    }
                }
            }
            catch
            {
            }
            return(null);
        }
Beispiel #3
0
        async public Task <IRasterLayer> NextRasterLayer()
        {
            if (_cursor == null || _layer == null)
            {
                return(null);
            }

            try
            {
                while (true)
                {
                    IFeature feature = await _cursor.NextFeature();

                    if (feature == null)
                    {
                        return(null);
                    }

                    IRasterLayer rLayer = null;

                    double cell   = Math.Max((double)feature["CELLX"], (double)feature["CELLY"]);
                    int    levels = (int)feature["LEVELS"];

                    if (!(bool)feature["MANAGED"])
                    {
                        if (feature["RF_PROVIDER"] == null || feature["RF_PROVIDER"] == DBNull.Value)
                        {
                            gView.DataSources.Raster.File.RasterFileDataset rDataset = new gView.DataSources.Raster.File.RasterFileDataset();
                            rLayer = rDataset.AddRasterFile((string)feature["PATH"], feature.Shape as IPolygon);
                        }
                        else
                        {
                            IRasterFileDataset rDataset = _layer._compMan.CreateInstance(new Guid(feature["RF_PROVIDER"].ToString())) as IRasterFileDataset;
                            if (rDataset == null)
                            {
                                continue;
                            }

                            rLayer = rDataset.AddRasterFile((string)feature["PATH"], feature.Shape as IPolygon);
                        }
                        if (rLayer != null && rLayer.RasterClass != null)
                        {
                            rLayer.InterpolationMethod = _layer.InterpolationMethod;
                            if (rLayer.RasterClass.SpatialReference == null)
                            {
                                rLayer.RasterClass.SpatialReference = _layer._sRef;
                            }
                        }
                    }

                    if (rLayer != null)
                    {
                        if (rLayer.Class is IGridClass)
                        {
                            IGridClass gridClass = (IGridClass)rLayer.Class;
                            gridClass.ColorClasses        = _layer.ColorClasses;
                            gridClass.UseHillShade        = _layer.UseHillShade;
                            gridClass.HillShadeVector     = _layer.HillShadeVector;
                            gridClass.UseIgnoreDataValue  = _layer.UseIgnoreDataValue;
                            gridClass.IgnoreDataValue     = _layer.IgnoreDataValue;
                            gridClass.RenderRawGridValues = _layer.RenderRawGridValues;
                        }

                        return(rLayer);
                    }
                }
            }
            catch
            {
            }
            return(null);
        }