POST
|
Hi Chris, No I didn't, I just continued doing that particular part in C# (batch environment). I'm going to look at it again however, as I do need to bring the code together - maybe looking at the proxy classes. If I don't get anywhere with that I'll raise it with ESRI. It's possibly changed for the better in 10.3, as well. I had a similar problem with creating layer files for individual rasters from a mosaic dataset (use the "lock" method) - that would only work in Java, not C# !! Cheers, pb
... View more
02-03-2015
06:01 PM
|
0
|
0
|
650
|
POST
|
Hello, I would be most grateful for help with the following. Below is some annotated Java code and output for two different attempts at opening a mosaic dataset, neither of which work for me. Further below is the equivalent C# code and output, which does work. I've tried with both ArcGIS Desktop 10.2.1 and 10.2.2, standard edition. Thanks, Peter Barrs. // JAVA static void accessMosaicDataset() throws IOException { IWorkspaceFactory wf = new FileGDBWorkspaceFactory(); IWorkspace ws = wf.openFromFile("C:\\temp\\DataArchiveCatalog.gdb", 0); // below is the recommended access method and aligns with the object diagram // "DataSourcesRaster Object Model (Mosaic Dataset)" IMosaicWorkspaceExtensionHelper helper = new MosaicWorkspaceExtensionHelper(); IMosaicWorkspaceExtension mwex = helper .findExtension(ws); System.out.println("\nMethod 1 - direct open"); // fails here (md is always null, no error), no exception is thrown // if the name is changed to a non existent mosaic dataset name, an exception is // thrown to that effect // However, it is possible to delete the mosaic dataset IMosaicDataset md = mwex.openMosaicDataset("DataArchiveImageCatalog"); if (md == null) System.out.println("md = null"); else System.out.println("md catalog oid name = " + md.getCatalog().getOIDFieldName()); System.out.println("\nMethod 2 - open using an IWorkspaceName obtained by enumeration"); IDatasetContainer3 dscntr = (IDatasetContainer3) mwex; IEnumDatasetName dns = dscntr .getDatasetNames(esriDatasetType.esriDTMosaicDataset); IDatasetName dn = dns.next(); // actually gives a IDatasetNameProxy // which cannot be cast to IMosaicDatasetName while (dn != null) { // prints mosaic dataset name System.out.println("dataset name: " + dn.getName()); // prints geodatabase name IWorkspaceName wn = dn.getWorkspaceName(); System.out.println("workspace name = " + wn.getBrowseName()); MosaicDatasetName mdn = new MosaicDatasetName(); mdn.setWorkspaceNameByRef(wn); mdn.setName(dn.getName()); Object o = mdn.open(); // In the eclipse debugger, o is shown as an RasterDataset // and it can indeed be opened as a RasterDataset IRasterDataset rd = (IRasterDataset) mdn.open(); System.out.println("as raster dataset, format = " + rd.getFormat()); // Attempting to open it as an IMosaicDataset fails // com.esri.arcgis.datasourcesraster.RasterDataset cannot be cast to com.esri.arcgis.datasourcesraster.IMosaicDataset md = (IMosaicDataset) mdn.open(); System.out.println("md catalog oid name = " + md.getCatalog().getOIDFieldName()); dn = dns.next(); } } Java output Method 1 - direct open md = null Method 2 - open using an IWorkspaceName obtained by enumeration dataset name: DataArchiveImageCatalog workspace name = DataArchiveCatalog as raster dataset, format = AMD Exception in thread "main" java.lang.ClassCastException: com.esri.arcgis.datasourcesraster.RasterDataset cannot be cast to com.esri.arcgis.datasourcesraster.IMosaicDataset at mosaicDataset.Main.accessMosaicDataset(Main.java:117) at mosaicDataset.Main.main(Main.java:43) C# Version // C# equivalent static void accessMosaicDataset() { IWorkspaceFactory wf = new FileGDBWorkspaceFactory(); IWorkspace ws = wf.OpenFromFile("C:\\temp\\DataArchiveCatalog.gdb", 0); IMosaicWorkspaceExtensionHelper helper = new MosaicWorkspaceExtensionHelper(); IMosaicWorkspaceExtension mwex = helper .FindExtension(ws); Debug.WriteLine("\nMethod 1 - direct open - works fine"); IMosaicDataset md = mwex.OpenMosaicDataset("DataArchiveImageCatalog"); Debug.WriteLine("md catalog oid name = " + md.Catalog.OIDFieldName); Debug.WriteLine("\nMethod 2 - open using an IWorkspaceName obtained by enumeration - works fine"); IDatasetContainer3 dscntr = (IDatasetContainer3)mwex; IEnumDatasetName dns = dscntr .get_DatasetNames(esriDatasetType.esriDTMosaicDataset); IDatasetName dn = dns.Next(); while (dn != null) { // prints mosaic dataset name Debug.WriteLine("dataset name: " + dn.Name); // prints geodatabase name IWorkspaceName wn = dn.WorkspaceName; Debug.WriteLine("workspace name = " + wn.BrowseName); MosaicDatasetNameClass mdn = new MosaicDatasetNameClass(); mdn.WorkspaceName = wn; mdn.Name = dn.Name; IMosaicDataset md2 = (IMosaicDataset)mdn.Open(); IFeatureClass cat = md2.Catalog; Debug.WriteLine("md catalog oid name = " + md2.Catalog.OIDFieldName); dn = dns.Next(); } } C# output Method 1 - direct open - works fine md catalog oid name = OBJECTID Method 2 - open using an IWorkspaceName obtained by enumeration - works fine dataset name: DataArchiveImageCatalog workspace name = DataArchiveCatalog md catalog oid name = OBJECTID
... View more
10-23-2014
10:44 PM
|
1
|
2
|
4717
|
Title | Kudos | Posted |
---|---|---|
1 | 10-23-2014 10:44 PM |
Online Status |
Offline
|
Date Last Visited |
11-11-2020
02:24 AM
|