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)); }
public void Dispose() { if (_rc != null) { _rc = null; } }
public void Dispose() { if (_class != null) { _class = null; } }
public void Dispose() { if (_class != null) { _class.EndPaint(null); _class = null; } }
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); }
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; } }
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); }
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); }
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(); }
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(); }
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); }
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); }
public void Dispose() { _class.Dispose(); _class = null; }
public RasterLayer(string name, IRasterClass rasterClass) : this(name) { _class = rasterClass; _class.Name = name; }
public RasterLayer(string name, string filename) : this(name) { _class = new RasterClass(filename); }