Страница 1 из 1

Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 14:35
Всеволод
Дано:
1) Проект, содержащий много объектов
2) БД, на которую ссылается проект, содержащая ещё больше объектов (в т.ч. ненужных)

Задача:
1) Удалить из БД объекты, которых нет в проекте (вручную это займет очень много времени).

Re: Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 14:39
freeExec

Код: Выделить всё

DELETE FROM БД
WHERE детек_ненужных_объектов = true

Re: Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 14:46
Всеволод
Прошу прощения за глупый вопрос:
1) Куда вводить этот код?
2) Его вводить дословно, или "БД" заменить на имя моей БД?
:D

Re: Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 14:50
trir
1. sql browser
2. заменить

иногда проще скопировать нужное в новую БД

Re: Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 15:00
evgenich
Можно использовать Arcpy (питоновская библиотека под arcgis):
1. Сначала получаем список классов объектов в проекте, т.е. MXD c помощью команды ListLayers, пример тут http://desktop.arcgis.com/ru/arcmap/10. ... layers.htm и тут https://support.esri.com/en/technical-article/000011530
2. Аналогично можно вытянуть список классов объектов БД, если речь о базе геоданных https://support.esri.com/en/technical-article/000011504
3. Сравниваем два списка и удаляем с помощью команды arcpy

Если кратко:)

Re: Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 16:57
Vadim
Если там "пустышки" есть, то можно удалить кодом:

import arcpy
from arcpy import env

env.workspace = r"C:\Temp\Test.gdb"

listFCs = arcpy.ListFeatureClasses("*")

for fc in listFCs:
count1 = str(arcpy.GetCount_management(fc))
if count1 == "0":
arcpy.Delete_management(fc)

Re: Как удалить из БД неиспользуемые слои

Добавлено: 20 фев 2018, 17:25
geouser
Всеволод писал(а):
20 фев 2018, 14:35
Дано:
1) Проект, содержащий много объектов
2) БД, на которую ссылается проект, содержащая ещё больше объектов (в т.ч. ненужных)

Задача:
1) Удалить из БД объекты, которых нет в проекте (вручную это займет очень много времени).
Я перечитал исходный вопрос и ничего не понял. Что такое "объекты"? Это слои? Это классы объектов? Типа реки, здания, дороги. Или это объекты внутри класса - например, здания из слоя/таблицы "здания", которые не отображаются на карте?
Постановка задачи совершенно нечёткая с точки зрения информатики.

Да, конечно, неиспользуемые слои и классы объектов (например, дороги) удаляются куда проще.
А для удаления объектов (конкретных зданий) из слоя (здания) нужен совсем другой код, более навороченный и заковыристый. Типа поиск объектов внутри экстента карты.

Нам нужно понимать, что такое "объекты". Аморфное определение, ни о чём специалисту не говорящее.

А "пустышек" я думаю там нет, их ведь надо специально создавать. Для чего нужны пустые классы объектов, кроме как для создания новых объектов по шаблону?

Я понимаю через интуитивный переводчик на разумный язык, что речь идёт либо о ненужных (неиспользуемых) слоях/таблицах в базе, либо о не-отображаемых в проекте объектах внутри конкретного слоя. В одном случае удаляются таблицы, в другом - записи внутри таблицы.

Re: Как удалить из БД неиспользуемые слои

Добавлено: 21 фев 2018, 12:12
Serp
У Евгенича нормально написано. Главное, не промахнуться с базой. Нужно точно знать, что она принадлежит одному проекту.