Удаление колонок таблицы атрибутов для нескольких слоёв
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Удаление колонок таблицы атрибутов для нескольких слоёв
Приветствую! Есть шейп-слой со следующей структурой таблицы атрибутов:
Необходимо разбить шейп-слой по "названию объекта", но в результирующих слоях в таблице атрибутов должна остаться только колонка с "порядковым номером": Разбитие слоя по "названию объекта" сделал в QGIS (Вектор - Управление данными - Разбить векторный слой), удаление "лишнего текста" в названии файлов удалил через коммандер. Как удалить в наборе шейп-слоев из таблицы атрибутов определённую колонку (перебор каждого слоя не предлагать, очень много их...)? Софт: ArcGIS, QGIS, PostGIS, OGR... Спасибо!
- название объекта, уникальный номер для каждого объекта слояНеобходимо разбить шейп-слой по "названию объекта", но в результирующих слоях в таблице атрибутов должна остаться только колонка с "порядковым номером": Разбитие слоя по "названию объекта" сделал в QGIS (Вектор - Управление данными - Разбить векторный слой), удаление "лишнего текста" в названии файлов удалил через коммандер. Как удалить в наборе шейп-слоев из таблицы атрибутов определённую колонку (перебор каждого слоя не предлагать, очень много их...)? Софт: ArcGIS, QGIS, PostGIS, OGR... Спасибо!
-
- Гуру
- Сообщения: 1695
- Зарегистрирован: 14 июн 2011, 16:47
- Репутация: 133
- Ваше звание: Завсегдатай
- Откуда: Череповец
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Доп модуль Table Manager пробовали?
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
В PostGIS:
Вместо ST_Collect можно использовать ST_Union, если хотите, чтобы удалились общие границы между полигонами с одинаковым полем NAME.
Код: Выделить всё
CREATE TABLE new AS
SELECT number, ST_Multi(ST_Collect(the_geom))
FROM
(SELECT name, number, (ST_Dump(geom)).geom AS the_geom
FROM region) AS r
GROUP BY name;
SELECT Populate_Geometry_Columns('new'::regclass);
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Table Manager не подходит. С ним нужно каждый слой (слоёв будет не менее 700) просматривать и удалять ненужное поле.Petruxin писал(а):Доп модуль Table Manager пробовали?
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Запустил данный запрос в pgAdmin, но в строкеrhot писал(а):В PostGIS:Вместо ST_Collect можно использовать ST_Union, если хотите, чтобы удалились общие границы между полигонами с одинаковым полем NAME.Код: Выделить всё
CREATE TABLE new AS SELECT number, ST_Multi(ST_Collect(the_geom)) FROM (SELECT name, number, (ST_Dump(geom)).geom AS the_geom FROM region) AS r GROUP BY name; SELECT Populate_Geometry_Columns('new'::regclass);
Код: Выделить всё
(ST_Dump(geom))
Код: Выделить всё
SELECT number,
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Я вас, наверное, не правильно понял. Вы хотите из одного слоя получить несколько, разбитых по полю NAME?HasT писал(а):Как быть дальше?
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Да. Нужно из одного слоя сделать несколько, разбитых по полю Name, при этом в новых слоях не должно остаться поля Name.rhot писал(а):Я вас, наверное, не правильно понял. Вы хотите из одного слоя получить несколько, разбитых по полю NAME?HasT писал(а):Как быть дальше?
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
В базу данных PostGIS залил все разбитые слои по полю Name. Может как-то используя запрос можно удалить ненужное поле? только как задать все таблицы в базе для этого запроса?...
Код: Выделить всё
ALTER TABLE [u]"все таблицы"[/u] DROP COLUMN "NAME";
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Тогда у меня ещё вопрос: а зачем это надо? Ведь можно при добавлении слоя сделать выборку по атрибутам, а само поле name скрыть через меню "свойства слоя".
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Вам следует создать функцию, а потом вызвать её.HasT писал(а):В базу данных PostGIS залил все разбитые слои по полю Name. Может как-то используя запросможно удалить ненужное поле? только как задать все таблицы в базе для этого запроса?...Код: Выделить всё
ALTER TABLE [u]"все таблицы"[/u] DROP COLUMN "NAME";
Код: Выделить всё
CREATE OR REPLACE FUNCTION test()
RETURNS VOID
AS $$
DECLARE
my_row RECORD;
BEGIN
FOR my_row IN
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'information_schema'
LOOP
ALTER TABLE my_row.table_name DROP COLUMN "NAME";
END LOOP;
END;
$$ LANGUAGE plpgsql;
SELECT test();
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
слой создается в БД несколькими пользователями, затем будет производится дальнейшая его "обработка" несколькими операторами в проприетарном ПО, которое загружает слои только с определенной таблицей атрибутовrhot писал(а):Тогда у меня ещё вопрос: а зачем это надо? Ведь можно при добавлении слоя сделать выборку по атрибутам, а само поле name скрыть через меню "свойства слоя".
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Сделал функцию test(), только из-за ошибки "схема "my_row" не существует" поменял "my_row" на "public". При запуске запросаrhot писал(а):Вам следует создать функцию, а потом вызвать её.Код: Выделить всё
CREATE OR REPLACE FUNCTION test() RETURNS VOID AS $$ DECLARE my_row RECORD; BEGIN FOR my_row IN SELECT table_name FROM information_schema.tables WHERE table_schema = 'information_schema' LOOP ALTER TABLE my_row.table_name DROP COLUMN "NAME"; END LOOP; END; $$ LANGUAGE plpgsql; SELECT test();
Код: Выделить всё
SELECT test();
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Код: Выделить всё
CREATE OR REPLACE FUNCTION test()
RETURNS VOID
AS $$
DECLARE
my_row RECORD;
BEGIN
FOR my_row IN
SELECT table_name
FROM information_schema.tables
WHERE table_schema = 'information_schema'
LOOP
EXECUTE 'ALTER TABLE' || my_row.table_name || 'DROP COLUMN "NAME"';
END LOOP;
END;
$$ LANGUAGE plpgsql;
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
-
- Активный участник
- Сообщения: 142
- Зарегистрирован: 16 окт 2009, 22:08
- Репутация: 55
- Откуда: Харьков
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
Пробую этот запрос... my_row - это же название схемы (у меня схема public)?rhot писал(а):Код: Выделить всё
CREATE OR REPLACE FUNCTION test() RETURNS VOID AS $$ DECLARE my_row RECORD; BEGIN FOR my_row IN SELECT table_name FROM information_schema.tables WHERE table_schema = 'information_schema' LOOP EXECUTE 'ALTER TABLE' || my_row.table_name || 'DROP COLUMN "NAME"'; END LOOP; END; $$ LANGUAGE plpgsql;
Для запроса получаю ошибку
Код: Выделить всё
ОШИБКА: ошибка синтаксиса (примерное положение: "TABLEinformation_schema_catalog_nameDROP")
LINE 1: ALTER TABLEinformation_schema_catalog_nameDROP COLUMN "Polyg...
^
QUERY: ALTER TABLEinformation_schema_catalog_nameDROP COLUMN "PolygonID"
CONTEXT: PL/pgSQL function test() line 10 at оператор EXECUTE
- rhot
- Гуру
- Сообщения: 1727
- Зарегистрирован: 25 янв 2011, 17:50
- Репутация: 194
- Ваше звание: доктор
- Откуда: Архангельск
Re: Удаление колонок таблицы атрибутов для нескольких слоёв
___________(¯`·.¸(¯`·.¸ Scientia potentia est _/ {SILVA}:::{FOSS}:::{GIS} \_ Знание сила ¸.·´¯)¸.·´¯)___________
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость