Перерахунок повного обсягу класу функцій File Geodatabase?


19

У мене є клас класів функцій у базі даних про географічну базу даних Esri. Коли я редагую функції за допомогою редактора в ArcMap і видаляю більшість моїх функцій і зберігаю лише ті, що знаходяться в середині, команда масштабування шару не працює так, як очікувалося. Замість масштабування масштабів функцій, що залишаються у класі функцій, масштаб буде попереднім (містить усі видалені функції). Переглядаючи значення міри в діалоговому вікні властивостей класу характеристик, я можу чітко бачити старі значення. Тому сеанс редагування, схоже, не змінює значення в повному обсязі.

Чи є спосіб перерахувати ці значення?

Я майже впевнений, що ця проблема повинна виникнути у всіх функцій редагування в ArcMap ...


1
На жаль Arc: REBOX не перекладається як інструмент ArcGIS :-)
PolyGeo

Відповіді:


6

Тепер у Esri є інструмент для цього в 10.4 (ура): Перерахувати масштаб класу функцій.

Я стикався з цим питанням, коли створював клас об’єктів і записував в нього геометрію з архпією. Мабуть, ці інструменти не оновлюють масштаби (можливо, це гарна ідея з міркувань продуктивності).

Я успішно скинув ступінь в 10.2.2 за пропозицією @Lou:

arcpy.CompressFileGeodatabaseData_management(output_workspace)
arcpy.UncompressFileGeodatabaseData_management(output_workspace)

19

Клацніть правою кнопкою миші клас функції в ArcCatalog та перейдіть до Властивості. На вкладці Обсяг функцій натисніть кнопку Перерахувати. І вуаля!

Я використовую ArcGIS 10.2.1


6

Ущільнення бази даних Geodata приведе в дію ваш просторовий індекс

"Якщо ви часто додаєте та видаляєте дані, вам слід щомісяця компагувати файл чи особисту базу геоданих. Ви також повинні ущільнювати базу даних геоданих після будь-яких масштабних змін. Ущільнюйте пристосування для зберігання даних шляхом переупорядкування записів та усунення невикористаного простору. Після ущільнення, до даних у кожному файлі можна отримати більш ефективний доступ. Ущільнення також зменшує розмір кожного файлу - можливо зменшити розмір бази даних геоданих на половину або більше ".

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Compacting_file_and_personal_geodatabases/003n0000007t000000/

Компактний (управління даними)

"Рекомендується ущільнювати персональні бази даних геоданих, коли вони перевищують 250 Мб. Якщо введення, видалення або загальне редагування даних часто виконується в базі даних, базу даних слід регулярно ущільнювати, щоб забезпечити оптимальну продуктивність."

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//00170000000n000000


4
Якщо ви робите масових видалень, це важливо зробити (особливо для великих геоданих). В мене особисто не було надійно виправити проблему, але це, безумовно, хороша ідея.
Лу

6

Ось надбудова ArcCatalog для ArcGIS 10, яка додає команду для оновлення масштабу класу функцій, ймовірно, використовуючи той самий метод, що і код VBA @ Ragi:


Це посилання є надбудовою, яка чудово працює для мене в 10.1 arcgis.com/home/item.html?id=576ebff497094274bdd7c76e456de6c3
Саймон

5

Об'єм GeoDatabase завжди розширюється - ніколи не скорочується автоматично. Стискання та стискання оптимізують лише сховище та фрагментацію, але не саму Extent. Я спробую спершу відтворити просторовий індекс і побачити, чи це робить фокус.

Оновлення:

Оскільки відновлення просторового індексу не спрацює , я впевнений, що наступний код VBA :

Public Sub reCalcExt()
  Dim pGXApplication As IGxApplication
  Set pGXApplication = Application

  Dim pGxObject As IGxObject
  Set pGxObject = pGXApplication.SelectedObject

  If Not TypeOf pGxObject.InternalObjectName Is IFeatureClassName Then
    Exit Sub
  End If

  Dim pName As IName
  Set pName = pGxObject.InternalObjectName
  Dim pSchemaLock As ISchemaLock
  Set pSchemaLock = pName.Open

  pSchemaLock.ChangeSchemaLock esriExclusiveSchemaLock
  Dim pFeatureClassManage As IFeatureClassManage
  Set pFeatureClassManage = pSchemaLock
  pFeatureClassManage.UpdateExtent

  Exit Sub

ErrHandler:
  pSchemaLock.ChangeSchemaLock esriSharedSchemaLock
End Sub

Це можна зробити на будь-якій іншій мові програмування, що підтримується ESRI. Трюк полягає в тому, щоб отримати схему блоку і використовувати метод IFeatureClassManage :: UpdateExtent .


Я спробував відтворити просторовий індекс на вибірковому наборі даних, і це не допомогло у моєму тестовому випадку. Я був чесно здивований.
Лу

Оновлення моєї відповіді потім деяким кодом.
Рагі Ясер Бурхум

Таким чином, це код VBA ArcCatalog.
Рагі Ясер Бурхум

4

Я точно не знаю, що викликає це у базі файлів геоданих, але я справді в змозі його копіювати, і це те, з чим я стикався раніше. Єдиний спосіб, коли мені вдалося дізнатися, як його обійти, - це стиснення бази даних геоданих. Це вирішить проблему масштабу. Декомпресувати його потрібно буде після завершення, оскільки ви не можете редагувати базу даних для стисненого файлу.

Під час сеансу редагування / ArcMap, коли ви фактично використовуєте дані, ви завжди можете вибрати всі | масштабування вибрано як обхідний шлях. Це не чудово, але я використовував це в своєму робочому процесі, поки не дійшов до точки розриву, де я міг би зробити цей трюк на стиснення / декомпресію.

Зауважте, ущільнення не буде працювати (принаймні, не надійно). Це відновить ваші індекси, але я вважаю це ненадійним для вирішення проблем із масштабами. Це все-таки щось, що вам слід час від часу робити. Я просто спробував це знову зараз, і він не працював на моїй вибірці даних. YMMV.


Ви також можете перенести класи функцій на нову базу даних / shapefile, але я дуже сумніваюся, що це прийнятна відповідь. Однак, за випадкових випадків, які є частиною вашого робочого процесу (упаковка даних для доставки), він може працювати для вас і не вимагати додаткових кроків.
Лу

3

Якщо ви хочете оновити ступінь класифікації функцій у своєму mxd документі, цей фрагмент коду може допомогти вам:

Dim pLayer As ILayer
        Dim pEnumLayer As IEnumLayer
        Dim pFeatureLayer As IFeatureLayer
        Dim pFeatureClass As IFeatureClass
        Dim pFeatureClassManage As IFeatureClassManage


        pEnumLayer = pMap.Layers
        pLayer = pEnumLayer.Next

        Do Until pLayer Is Nothing
            If TypeOf pLayer Is FeatureLayer Then
                pFeatureLayer = pLayer
                pFeatureClass = pFeatureLayer.FeatureClass
                pFeatureClassManage = pFeatureClass
                pFeatureClassManage.UpdateExtent()
            End If
            pLayer = pEnumLayer.Next
        Loop
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.