Beispiel #1
0
        public static string GetPathFromGeodatabase(ArcGIS.Core.Data.Geodatabase gdb)
        {
            string gdbPath = string.Empty;

            if (gdb == null)
            {
                return(gdbPath); // Empty
            }
            ArcGIS.Core.Data.FileGeodatabaseConnectionPath fgdbcp = gdb.GetConnector() as
                                                                    ArcGIS.Core.Data.FileGeodatabaseConnectionPath;

            if (fgdbcp != null)
            {
                gdbPath = fgdbcp.Path.LocalPath;
            }

            return(gdbPath);
        }
        private void OpenGDB()
        {
            if (_executeQuery)
            {
                return;
            }
            if (_gdbPath == "")
            {
                return;
            }
            _executeQuery = true;

            System.Windows.Data.BindingOperations.CollectionRegistering += BindingOperations_CollectionRegistering;

            ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
            {
                using (ArcGIS.Core.Data.Geodatabase gdb = new ArcGIS.Core.Data.Geodatabase(
                           new ArcGIS.Core.Data.FileGeodatabaseConnectionPath(new Uri(_gdbPath, UriKind.Absolute))))
                {
                    IReadOnlyList <ArcGIS.Core.Data.Definition> fcList = gdb.GetDefinitions <ArcGIS.Core.Data.FeatureClassDefinition>();
                    IReadOnlyList <ArcGIS.Core.Data.Definition> tables = gdb.GetDefinitions <ArcGIS.Core.Data.TableDefinition>();

                    ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Total number of feature classes: " + fcList.Count.ToString() +
                                                                     "\nFirst Feature is: " + FeatureString(fcList[0] as ArcGIS.Core.Data.FeatureClassDefinition));

                    lock (_theLock)
                    {
                        // Add all features to _tables list
                        foreach (var fcDef in fcList)
                        {
                            _tables.Add(TableString(fcDef as ArcGIS.Core.Data.TableDefinition)); // Feature class table is read as TableDefinition and NOT FeatureClassDefinition
                        }
                        // Add all tables to _tables list
                        foreach (var tableDef in tables)
                        {
                            _tables.Add(TableString(tableDef as ArcGIS.Core.Data.TableDefinition));
                            // ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("TableString: " + (TableString(tableDef as ArcGIS.Core.Data.TableDefinition)));
                        }
                    }
                }
            });
        }
Beispiel #3
0
        /// <summary>
        /// Create Pipeline Route from input pipeline centerline
        /// </summary>
        /// <param name="fcPath"></param>
        /// <returns></returns>
        public static async Task <ArcGIS.Desktop.Core.Geoprocessing.IGPResult> CreatePipelineRoute(string fcPath)
        {
            // Check if input pipeline has "ROUTEID" field // Active Map must hvae fcPath
            var output = await QueuedTask.Run(() =>
            {
                var lyr = ArcGIS.Desktop.Mapping.MapView.Active.Map.FindLayers(fcPath).First() as ArcGIS.Desktop.Mapping.FeatureLayer;
                var gdb = lyr.GetTable().GetDatastore() as ArcGIS.Core.Data.Geodatabase;

                Uri path        = gdb.GetPath();
                string fullPath = Path.Combine(path.LocalPath, lyr.GetTable().GetName().ToString());

                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("GDB is: " + path);
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("path is: " + fullPath);

                fcPath = fullPath;

                Uri uri = new Uri(path.ToString());
                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("database uri here: " + uri);

                // Check if input pipline layer has a "ROUTEID" field
                using (ArcGIS.Core.Data.Geodatabase fileGeodatabase = new ArcGIS.Core.Data.Geodatabase(new ArcGIS.Core.Data.FileGeodatabaseConnectionPath(uri)))
                    using (ArcGIS.Core.Data.FeatureClass featureClass = fileGeodatabase.OpenDataset <ArcGIS.Core.Data.FeatureClass>(lyr.Name))
                    {
                        ArcGIS.Core.Data.FeatureClassDefinition lyrDefinition = featureClass.GetDefinition();
                        IReadOnlyList <ArcGIS.Core.Data.Field> fields         = lyrDefinition.GetFields();
                        List <string> fieldsList = new List <string>();
                        ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Checking fields");
                        foreach (var field in fields)
                        {
                            fieldsList.Add(field.Name);
                        }

                        return(fieldsList);
                    }
            });
        }
Beispiel #4
0
        private async void GetActiveMapLayerGDBPathAsync()
        {
            // Check if active MapView exists
            if (ArcGIS.Desktop.Mapping.MapView.Active == null)
            {
                return;
            }

            _tables.Clear();

            IEnumerable<ArcGIS.Desktop.Mapping.Layer> layers = ArcGIS.Desktop.Mapping.MapView.Active.Map.Layers.Where(layer => layer is ArcGIS.Desktop.Mapping.FeatureLayer);

            await ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
            {
                foreach (ArcGIS.Desktop.Mapping.FeatureLayer featureLayer in layers)
                {
                    try  // TRY/CATCH TO CHECK FOR LAYERS WITH LOST CONNECTIONS (DELETED/CHANGED SOURCES) //
                    {
                        using (ArcGIS.Core.Data.Table table = featureLayer.GetTable())
                        using (ArcGIS.Core.Data.Datastore datastore = table.GetDatastore())
                        {
                            if (datastore is ArcGIS.Core.Data.UnknownDatastore)
                            {
                                ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Unknow datastore for: " + featureLayer.Name);
                            }
                            ArcGIS.Core.Data.Geodatabase gdb = datastore as ArcGIS.Core.Data.Geodatabase;
                            _tables.Add(gdb.GetPath().ToString() + "/" + featureLayer.Name.ToString());
                        }
                    }
                    catch
                    {
                        return;
                    }
                }                
            }); 
        }