コード例 #1
0
ファイル: ExplorerObjects.cs プロジェクト: jugstalt/gview5
        public Task <object> GetInstanceAsync()
        {
            if (_class == null)
            {
                try
                {
                    Dataset      dataset = new Dataset();
                    IRasterLayer layer   = (IRasterLayer)dataset.AddRasterFile(_filename);

                    if (layer != null && layer.Class is IRasterClass)
                    {
                        _class = layer.Class as IRasterClass;
                        if (_class is RasterClassV1)
                        {
                            if (!((RasterClassV1)_class).isValid)
                            {
                                _class = null;
                            }
                        }
                    }
                }
                catch { return(Task.FromResult <object>(_class)); }
            }
            return(Task.FromResult <object>(_class));
        }
コード例 #2
0
 public void Dispose()
 {
     if (_rc != null)
     {
         _rc = null;
     }
 }
コード例 #3
0
ファイル: ExplorerObjects.cs プロジェクト: jugstalt/gview5
 public void Dispose()
 {
     if (_class != null)
     {
         _class = null;
     }
 }
コード例 #4
0
 public void Dispose()
 {
     if (_class != null)
     {
         _class.EndPaint(null);
         _class = null;
     }
 }
コード例 #5
0
        async private Task <bool> ImportFiles(string[] data, bool refreshList, Dictionary <string, Guid> providers)
        {
            IRasterClass rc = await _exObject.GetInstanceAsync() as IRasterClass;

            if (rc == null)
            {
                return(false);
            }

            IRasterDataset rDS = rc.Dataset as IRasterDataset;

            if (rDS == null || rDS.Database == null)
            {
                return(false);
            }

            FDBImageDataset operations = new FDBImageDataset(rDS.Database as IImageDB, rDS.DatasetName);

            // refreshList = false wenn ganzen Verzeichnis durchsucht wird...
            // dann sollen auch keine Fehler verursacht werden wenn ein bild nicht gereferenziert ist,
            // in diesem fall bild einfach ignorieren
            operations.handleNonGeorefAsError = refreshList;

            ImageImportProgressReporter reporter = new ImageImportProgressReporter(operations, data.Length);

            ImportArguments args = new ImportArguments(operations, rDS, data, providers);

            FormTaskProgress progress = new FormTaskProgress();

            progress.Text = "Import Images: " + rDS.DatasetName;
            progress.Mode = ProgressMode.ProgressDisk;
            progress.ShowProgressDialog(reporter, Import(args));

            if (refreshList)
            {
                await RefreshList();
            }

            if (!reporter.CancelTracker.Continue)
            {
                MessageBox.Show("Cancel...");
                return(false);
            }

            if (operations.lastErrorMessage != String.Empty)
            {
                MessageBox.Show("ERROR: " + operations.lastErrorMessage);
                return(false);
            }

            await rDS.RefreshClasses();

            return(true);
        }
コード例 #6
0
        public TileCacheLayerExplorerObject(TileCacheDatasetExplorerObject parent, IDatasetElement element)
            : base(parent, typeof(FeatureClass), 1)
        {
            if (element == null)
            {
                return;
            }

            _parent = parent;
            _fcname = element.Title;

            if (element.Class is IRasterClass)
            {
                _rc = (IRasterClass)element.Class;
            }
        }
コード例 #7
0
        public IRasterLayer AddRasterFile(string filename, IPolygon polygon)
        {
            try
            {
                FileInfo fi = new FileInfo(filename);
                if (_directory == "")
                {
                    _directory = fi.Directory.FullName;
                }

                IRasterClass rasterClass = null;
                switch (OSGeo.Initializer.InstalledVersion)
                {
                case OSGeo.GdalVersion.V3:
                    rasterClass = (polygon == null) ? new RasterClassV3(this, filename) : new RasterClassV3(this, filename, polygon);
                    if (((RasterClassV3)rasterClass).IsValid == false)
                    {
                        rasterClass = null;
                    }
                    break;

                case OSGeo.GdalVersion.V1:
                    rasterClass = (polygon == null) ? new RasterClassV1(this, filename) : new RasterClassV1(this, filename, polygon);
                    if (((RasterClassV1)rasterClass).isValid == false)
                    {
                        rasterClass = null;
                    }
                    break;

                default:
                    throw new Exception("No GDAL Version detected/installed");
                }

                if (rasterClass != null)
                {
                    RasterLayer layer = new RasterLayer(rasterClass);
                    _layers.Add(layer);

                    return(layer);
                }
            }
            catch (Exception ex)
            {
                this.LastErrorMessage = ex.Message;
            }
            return(null);
        }
コード例 #8
0
ファイル: RasterLayer.cs プロジェクト: configare/hispeed
        public static IRasterLayer FromXElement(XElement ele)
        {
            if (ele == null)
            {
                return(null);
            }
            string       name              = ele.Attribute("name").Value;
            bool         visible           = bool.Parse(ele.Attribute("visible").Value);
            ScaleRange   displayScaleRange = ScaleRange.FromXElement(ele.Element("DisplayScaleRange"));
            IRasterClass rasterclass       = AgileMap.Core.RasterClass.FromXElement(ele.Element("RasterClass"));

            rasterclass.Name = name;
            IRasterLayer lyr = new RasterLayer(name, rasterclass);

            (lyr as ILayerDrawable).Visible = visible;
            return(lyr);
        }
コード例 #9
0
        async private void btnImportDirectory_Click(object sender, EventArgs e)
        {
            FormSelectImageDatasetFolderAndFilter dlg = new FormSelectImageDatasetFolderAndFilter();

            if (dlg.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    string   rootPath = dlg.SelectedFolder;
                    string[] filters  = dlg.FormatFilters;
                    Dictionary <string, Guid> providers = dlg.ProviderGuids;

                    var importResult = await ImportDirectory(new DirectoryInfo(rootPath), filters, providers);

                    int counter = importResult.dirCount;

                    if (!importResult.success)
                    {
                        //MessageBox.Show("Canceled...");
                    }
                    await RefreshList();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }

            IRasterClass rc = await _exObject.GetInstanceAsync() as IRasterClass;

            if (rc == null)
            {
                return;
            }

            IRasterDataset rDS = rc.Dataset as IRasterDataset;

            if (rDS == null)
            {
                return;
            }

            await rDS.RefreshClasses();
        }
コード例 #10
0
        private void toolStripButtonAdd_Click(object sender, EventArgs e)
        {
            if (openImageFiles.ShowDialog() == DialogResult.OK)
            {
                ImportFiles(openImageFiles.FileNames, true, null);
            }

            IRasterClass rc = _exObject.Object as IRasterClass;

            if (rc == null)
            {
                return;
            }
            IRasterDataset rDS = rc.Dataset as IRasterDataset;

            if (rDS == null)
            {
                return;
            }

            rDS.RefreshClasses();
        }
コード例 #11
0
        private bool InsertImage(IFeatureUpdater fdb, IFeatureClass rasterFC, FileInfo fi, Dictionary <string, Guid> providers)
        {
            if (!_cancelTracker.Continue)
            {
                _errMsg = "Canceled by user...";
                return(false);
            }

            if (ReportAction != null)
            {
                ReportAction(this, "Insert Image: " + fi.FullName);
            }
            if (ReportProgress != null)
            {
                ReportProgress(this, 1);
            }

            System.Drawing.Imaging.ImageFormat format = System.Drawing.Imaging.ImageFormat.Jpeg;
            switch (fi.Extension.ToLower())
            {
            case ".png":
                format = System.Drawing.Imaging.ImageFormat.Png;
                break;

            case ".tif":
            case ".tiff":
                format = System.Drawing.Imaging.ImageFormat.Tiff;
                break;
            }

            #region RasterFileDataset bestimmen
            List <IRasterFileDataset> rFileDatasets = new List <IRasterFileDataset>();
            IRasterFileDataset        rFileDataset  = null;
            IRasterLayer  rasterLayer = null;
            PlugInManager compMan     = new PlugInManager();
            foreach (XmlNode ds in compMan.GetPluginNodes(Plugins.Type.IDataset))
            {
                IRasterFileDataset rds = compMan.CreateInstance(ds) as IRasterFileDataset;
                if (rds == null)
                {
                    continue;
                }

                if (rds.SupportsFormat(fi.Extension) < 0)
                {
                    continue;
                }
                if (providers != null && providers.ContainsKey(fi.Extension.ToLower()))
                {
                    if (!providers[fi.Extension.ToLower()].Equals(PlugInManager.PlugInID(rds)))
                    {
                        continue;
                    }
                }
                rFileDatasets.Add(rds);
            }
            if (rFileDatasets.Count == 0)
            {
                _errMsg = "No Rasterfile Provider for " + fi.Extension;
                return(false);
            }

            // RasterFileDataset nach priorität sortieren
            rFileDatasets.Sort(new RasterFileDatasetComparer(fi.Extension));

            // RasterFileDataset suchen, mit dem sich Bild öffnen läßt
            foreach (IRasterFileDataset rfd in rFileDatasets)
            {
                rfd.AddRasterFile(fi.FullName);

                if (rfd.Elements.Count == 0)
                {
                    //Console.WriteLine(_errMsg = fi.FullName + " is not a valid Raster File...");
                    continue;
                }
                IDatasetElement element = rfd.Elements[0];
                if (!(element is IRasterLayer))
                {
                    //Console.WriteLine(_errMsg = fi.FullName + " is not a valid Raster Layer...");
                    rFileDataset.Dispose();
                    continue;
                }

                // gefunden...
                rasterLayer  = (IRasterLayer)element;
                rFileDataset = rfd;
                break;
            }
            if (rasterLayer == null || rFileDataset == null)
            {
                Console.WriteLine(_errMsg = fi.FullName + " is not a valid Raster Layer...");
                return(false);
            }
            #endregion

            FileInfo fiWorld = null;
            double   cellX   = 1;
            double   cellY   = 1;

            IRasterFile rasterFile = null;
            if (rasterLayer is IRasterFile)
            {
                rasterFile = (IRasterFile)rasterLayer;
            }
            if (rasterLayer.RasterClass != null)
            {
                if (rasterLayer.RasterClass is IRasterFile &&
                    ((IRasterFile)rasterLayer.RasterClass).WorldFile != null)
                {
                    rasterFile = (IRasterFile)rasterLayer.RasterClass;
                }
                else
                {
                    IRasterClass c = (IRasterClass)rasterLayer.RasterClass;
                    cellX = Math.Sqrt(c.dx1 * c.dx1 + c.dx2 * c.dx2);
                    cellY = Math.Sqrt(c.dy1 * c.dy1 + c.dy2 * c.dy2);
                }
            }
            if (rasterFile != null)
            {
                try
                {
                    IRasterWorldFile world = rasterFile.WorldFile;
                    if (world != null)
                    {
                        if (!world.isGeoReferenced)
                        {
                            if (handleNonGeorefAsError)
                            {
                                _errMsg = "Can't add non georeferenced images: " + fi.FullName;
                                return(false);
                            }
                            else
                            {
                                return(true);
                            }
                        }

                        cellX = Math.Sqrt(world.dx_X * world.dx_X + world.dx_Y * world.dx_Y);
                        cellY = Math.Sqrt(world.dy_X * world.dy_X + world.dy_Y * world.dy_Y);

                        fiWorld = new FileInfo(rasterFile.WorldFile.Filename);
                        if (!fiWorld.Exists)
                        {
                            fiWorld = null;
                        }
                    }
                }
                catch
                {
                    fiWorld = null;
                }
            }

            #region Check if already Exits
            //
            // Suchen, ob Image mit gleichen Pfad schon vorhanden ist, wenn ja
            // nur weitermachen, wenn sich das änderungsdatum unterscheidet...
            //

            QueryFilter filter = new QueryFilter();
            filter.AddField("FDB_OID");
            filter.AddField("PATH");
            filter.AddField("LAST_MODIFIED");
            filter.AddField("PATH2");
            filter.AddField("LAST_MODIFIED2");

            string fullName = fi.FullName.Replace(@"\", @"\\");
            if (_fdb is AccessFDB)
            {
                filter.WhereClause = ((AccessFDB)_fdb).DbColName("PATH") + "='" + fullName + "'";
            }
            else
            {
                filter.WhereClause = "PATH='" + fullName + "'";
            }
            int deleteOID = -1;
            using (IFeatureCursor cursor = rasterFC.GetFeatures(filter))
            {
                IFeature existingFeature = cursor.NextFeature;
                if (existingFeature != null)
                {
                    DateTime dt1 = (DateTime)existingFeature["LAST_MODIFIED"];
                    if (Math.Abs(((TimeSpan)(dt1 - fi.LastWriteTimeUtc)).TotalSeconds) > 1.0)
                    {
                        deleteOID = existingFeature.OID;
                    }
                    else if (fiWorld != null &&
                             existingFeature["PATH2"] != System.DBNull.Value &&
                             existingFeature["PATH2"].ToString() != String.Empty)
                    {
                        DateTime dt2 = (DateTime)existingFeature["LAST_MODIFIED2"];
                        if (existingFeature["PATH2"].ToString().ToLower() != fiWorld.FullName.ToLower() ||
                            Math.Abs(((TimeSpan)(dt2 - fiWorld.LastWriteTimeUtc)).TotalSeconds) > 1.0)
                        {
                            deleteOID = existingFeature.OID;
                        }
                    }

                    if (deleteOID == -1)
                    {
                        Console.Write(".");
                        //Console.WriteLine(fi.FullName + " already exists...");
                        return(true);
                    }
                }
            }
            if (deleteOID != -1)
            {
                if (!fdb.Delete(rasterFC, deleteOID))
                {
                    Console.WriteLine(_errMsg = "Can't delete old record " + fi.FullName + "\n" + fdb.lastErrorMsg);
                    return(false);
                }
            }
            //
            ///////////////////////////////////////////////////////////////////
            //
            #endregion

            Feature feature = new Feature();
            feature.Shape = rasterLayer.RasterClass.Polygon;
            feature.Fields.Add(new FieldValue("PATH", fi.FullName));
            feature.Fields.Add(new FieldValue("LAST_MODIFIED", fi.LastWriteTimeUtc));
            if (fiWorld != null)
            {
                feature.Fields.Add(new FieldValue("PATH2", fiWorld.FullName));
                feature.Fields.Add(new FieldValue("LAST_MODIFIED2", fiWorld.LastWriteTimeUtc));
            }
            else
            {
                feature.Fields.Add(new FieldValue("PATH2", ""));
            }
            feature.Fields.Add(new FieldValue("RF_PROVIDER", PlugInManager.PlugInID(rFileDataset).ToString()));
            feature.Fields.Add(new FieldValue("MANAGED", _managed && (rasterLayer is IBitmap)));
            feature.Fields.Add(new FieldValue("FORMAT", fi.Extension.Replace(".", "")));
            feature.Fields.Add(new FieldValue("CELLX", cellX));
            feature.Fields.Add(new FieldValue("CELLY", cellY));
            feature.Fields.Add(new FieldValue("LEVELS", (_managed) ? Math.Max(_levels, 1) : 0));

            if (!fdb.Insert(rasterFC, feature))
            {
                Console.WriteLine("\nERROR@" + fi.FullName + ": " + fdb.lastErrorMsg);
            }
            else
            {
                if (_managed && (rasterLayer is IBitmap) && (fdb is SqlFDB))
                {
                    QueryFilter qfilter = new QueryFilter();
                    qfilter.SubFields = "FDB_OID";
                    if (_fdb is AccessFDB)
                    {
                        filter.WhereClause = ((AccessFDB)_fdb).DbColName("PATH") + "='" + fi.FullName + "'";
                    }
                    else
                    {
                        qfilter.WhereClause = "PATH='" + fi.FullName + "'";
                    }
                    IFeatureCursor cursor = ((SqlFDB)fdb).Query(rasterFC, qfilter);
                    if (cursor != null)
                    {
                        IFeature feat = cursor.NextFeature;
                        if (feat != null)
                        {
                            InsertImageDatasetBitmap(feat.OID, rasterLayer, _levels, format);
                        }
                        cursor.Dispose();
                    }
                }

                Console.WriteLine(">" + fi.FullName + " added...");
            }

            rFileDataset.Dispose();
            return(true);
        }
コード例 #12
0
        public AccessFDBFeatureClassExplorerObject(AccessFDBDatasetExplorerObject parent, string filename, string dsname, IDatasetElement element)
            : base(parent, typeof(FeatureClass))
        {
            if (element == null)
            {
                return;
            }

            _parent   = parent;
            _filename = filename;
            _dsname   = dsname;
            _fcname   = element.Title;

            string typePrefix = String.Empty;
            bool   isLinked   = false;

            if (element.Class is LinkedFeatureClass)
            {
                typePrefix = "Linked ";
                isLinked   = true;
            }

            if (element.Class is IRasterCatalogClass)
            {
                _icon = new AccessFDBRasterIcon();
                _type = typePrefix + "Raster Catalog Layer";
                _rc   = (IRasterClass)element.Class;
            }
            else if (element.Class is IRasterClass)
            {
                _icon = new AccessFDBRasterIcon();
                _type = typePrefix + "Raster Layer";
                _rc   = (IRasterClass)element.Class;
            }
            else if (element.Class is IFeatureClass)
            {
                _fc = (IFeatureClass)element.Class;
                switch (_fc.GeometryType)
                {
                case geometryType.Envelope:
                case geometryType.Polygon:
                    if (isLinked)
                    {
                        _icon = new AccessFDBLinkedPolygonIcon();
                    }
                    else
                    {
                        _icon = new AccessFDBPolygonIcon();
                    }
                    _type = typePrefix + "Polygon Featureclass";
                    break;

                case geometryType.Multipoint:
                case geometryType.Point:
                    if (isLinked)
                    {
                        _icon = new AccessFDBLinkedPointIcon();
                    }
                    else
                    {
                        _icon = new AccessFDBPointIcon();
                    }
                    _type = typePrefix + "Point Featureclass";
                    break;

                case geometryType.Polyline:
                    if (isLinked)
                    {
                        _icon = new AccessFDBLinkedLineIcon();
                    }
                    else
                    {
                        _icon = new AccessFDBLineIcon();
                    }
                    _type = typePrefix + "Polyline Featureclass";
                    break;
                }
            }

            _contextItems    = new ToolStripItem[1];
            _contextItems[0] = new ToolStripMenuItem("Tasks");

            //_contextItems = new ToolStripItem[1];
            //_contextItems[0] = new ToolStripMenuItem("Rebuild Spatial Index...");
            //_contextItems[0].Click += new EventHandler(RebuildSpatialIndex_Click);
            ToolStripMenuItem item = new ToolStripMenuItem("Shrink Spatial Index...");

            item.Click += new EventHandler(ShrinkSpatialIndex_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
            item        = new ToolStripMenuItem("Spatial Index Definition...");
            item.Click += new EventHandler(SpatialIndexDef_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
            item        = new ToolStripMenuItem("Repair Spatial Index...");
            item.Click += new EventHandler(RepairSpatialIndex_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(new ToolStripSeparator());
            item        = new ToolStripMenuItem("Truncate");
            item.Click += new EventHandler(Truncate_Click);
            ((ToolStripMenuItem)_contextItems[0]).DropDownItems.Add(item);
        }
コード例 #13
0
ファイル: RasterLayer.cs プロジェクト: configare/hispeed
 public void Dispose()
 {
     _class.Dispose();
     _class = null;
 }
コード例 #14
0
ファイル: RasterLayer.cs プロジェクト: configare/hispeed
 public RasterLayer(string name, IRasterClass rasterClass)
     : this(name)
 {
     _class      = rasterClass;
     _class.Name = name;
 }
コード例 #15
0
ファイル: RasterLayer.cs プロジェクト: configare/hispeed
 public RasterLayer(string name, string filename)
     : this(name)
 {
     _class = new RasterClass(filename);
 }