Предложение по доработке API Qgis: синхронизация редакции

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Предложение по доработке API Qgis: синхронизация редакции

Сообщение Dorofeev » 30 апр 2009, 01:46

В ходе изучения API QGis обнаружилось, что программно нельзя модифицировать объекты редактируемых слоев кроме как через методы класса QgsVectorLayer , которых, к сожалению, не всегда бывает достаточно. Так например нет создания буферных зон и некоторых других функций. Можно написать для этого свою функцию, но она не сможет работать внутри слоя (сможет только сохранить в новый). Поэтому напимер fTools результаты геопроцессинга сохраняет исключительно в новых слоях.

Поэтому хочется обратить на эту проблему внимание разработчиков QGis. Но сначала попросить всех знакомых с программированием по Qgis заглянуть в док, в котором подробно описывается проблема. Может возникнут какие-то замечания или будет чего дополнить.
Ссылка на док : http://docs.google.com/Doc?id=ddjr8h8b_118vhm4qz29

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Предложение по доработке API Qgis: синхронизация редакции

Сообщение Максим Дубинин » 30 апр 2009, 02:02

я так понимаю, что по этой же причине нет возможности и например прорезать один полигон другим в QGIS.

если подобное дополнение будет сочтено сообществом разумным и достаточным, я берусь перевести и донести наш запрос до разработчиков QGIS
пристегивайтесь, турбулентность прямо по курсу

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Предложение по доработке API Qgis: синхронизация редакции

Сообщение Voltron » 30 апр 2009, 08:59

В Сях не очень силен (я паскалист). Посмотрел исходники, почитал доку... на мой взгляд, проблема описана правильно, и актуальность предложенной доработки большая. Не только fTools но и многие другие инструменты сохраняют результат работы в новый слой, что часто весьма не удобно.
Присоединяюсь к предыдущим ораторам и готов оказать посильную помощь.

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Предложение по доработке API Qgis: синхронизация редакции

Сообщение Максим Дубинин » 02 май 2009, 04:52

спасибо за реакцию, оказывается QGIS-овцы и сами наталкивались на подобное ограничение и принимают предложение
http://n2.nabble.com/synchronization-fu ... 49387.html
пристегивайтесь, турбулентность прямо по курсу

Dorofeev
Активный участник
Сообщения: 194
Зарегистрирован: 08 фев 2007, 23:29
Репутация: 1
Откуда: Симферополь
Контактная информация:

Re: Предложение по доработке API Qgis: синхронизация редакции

Сообщение Dorofeev » 02 май 2009, 12:50

Просьба протестировать патч. Метод назвается QgsVectorLayer::changeFeature( QgsFeature &f ) и доступен как в С++ так и python.

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

Index: /home/drofan/unstable/qgis/python/core/qgsvectorlayer.sip
===================================================================
--- /home/drofan/unstable/qgis/python/core/qgsvectorlayer.sip	(revision 10693)
+++ /home/drofan/unstable/qgis/python/core/qgsvectorlayer.sip	(working copy)
@@ -364,6 +364,11 @@
 
   /**access range */
   RangeData &range(int idx);
+  
+   /** Change feature  with 3rd party geometry and attribue updates
+   @note this method was added in version 1.1
+   */
+   changeFeature( QgsFeature &f );
 
 public slots:

Index: /home/drofan/unstable/qgis/src/core/qgsvectorlayer.cpp
===================================================================
--- /home/drofan/unstable/qgis/src/core/qgsvectorlayer.cpp	(revision 10693)
+++ /home/drofan/unstable/qgis/src/core/qgsvectorlayer.cpp	(working copy)
@@ -3671,3 +3670,16 @@
   }
   return 0; //not found
 }
+
+void QgsVectorLayer::changeFeature( QgsFeature &f )
+{
+      // do not update when we aren't in editing mode
+  if ( ! mEditable )
+    return;
+
+  mChangedGeometries[f.id()]= *f.geometry();
+
+  mChangedAttributeValues[ f.id()]=f.attributeMap();
+
+  setModified(true,false);
+}

Index: /home/drofan/unstable/qgis/src/core/qgsvectorlayer.h
===================================================================
--- /home/drofan/unstable/qgis/src/core/qgsvectorlayer.h	(revision 10693)
+++ /home/drofan/unstable/qgis/src/core/qgsvectorlayer.h	(working copy)
@@ -447,6 +447,11 @@
     */
     QgsVectorOverlay* findOverlayByType( const QString& typeName );
 
+     /** Change feature  with 3rd party geometry and attribue updates
+     @note this method was added in version 1.1
+     */
+    void changeFeature( QgsFeature &f );
+
   public slots:
     /** Select feature by its ID, optionally emit signal selectionChanged() */
     void select( int featureId, bool emitSignal = TRUE );

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Предложение по доработке API Qgis: синхронизация редакции

Сообщение Максим Дубинин » 02 май 2009, 18:07

пристегивайтесь, турбулентность прямо по курсу

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Предложение по доработке API Qgis: синхронизация редакци

Сообщение GIS-dev » 10 мар 2011, 13:31

Этот метод до сих пор существует только в виде патча или включен в состав QGIS?

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Предложение по доработке API Qgis: синхронизация редакци

Сообщение Voltron » 10 мар 2011, 19:31

GIS-dev писал(а):Этот метод до сих пор существует только в виде патча или включен в состав QGIS?
Ну нельзя же быть до такой степени ленивым. Вы бы по ссылке сходили что ли... Или Ъ по ссылкам не ходят?
changeGeometry() was implemented in r10701. Use changeAttributeValue() to update the attributes.
Почти два года как реализовано. И доке по API есть.

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Предложение по доработке API Qgis: синхронизация редакци

Сообщение GIS-dev » 11 мар 2011, 02:47

Voltron писал(а): Ну нельзя же быть до такой степени ленивым. Вы бы по ссылке сходили что ли... Или Ъ по ссылкам не ходят?
changeGeometry() was implemented in r10701. Use changeAttributeValue() to update the attributes.
Почти два года как реализовано. И доке по API есть.
Эти два метода я видел. Но не обратил внимания, что они введены вместо заявленного в патче "changeFeature".

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя