Страница 1 из 1
Предложение по доработке API Qgis: синхронизация редакции
Добавлено: 30 апр 2009, 01:46
Dorofeev
В ходе изучения API QGis обнаружилось, что программно нельзя модифицировать объекты редактируемых слоев кроме как через методы класса QgsVectorLayer , которых, к сожалению, не всегда бывает достаточно. Так например нет создания буферных зон и некоторых других функций. Можно написать для этого свою функцию, но она не сможет работать внутри слоя (сможет только сохранить в новый). Поэтому напимер fTools результаты геопроцессинга сохраняет исключительно в новых слоях.
Поэтому хочется обратить на эту проблему внимание разработчиков QGis. Но сначала попросить всех знакомых с программированием по Qgis заглянуть в док, в котором подробно описывается проблема. Может возникнут какие-то замечания или будет чего дополнить.
Ссылка на док :
http://docs.google.com/Doc?id=ddjr8h8b_118vhm4qz29
Re: Предложение по доработке API Qgis: синхронизация редакции
Добавлено: 30 апр 2009, 02:02
Максим Дубинин
я так понимаю, что по этой же причине нет возможности и например прорезать один полигон другим в QGIS.
если подобное дополнение будет сочтено сообществом разумным и достаточным, я берусь перевести и донести наш запрос до разработчиков QGIS
Re: Предложение по доработке API Qgis: синхронизация редакции
Добавлено: 30 апр 2009, 08:59
Voltron
В Сях не очень силен (я паскалист). Посмотрел исходники, почитал доку... на мой взгляд, проблема описана правильно, и актуальность предложенной доработки большая. Не только fTools но и многие другие инструменты сохраняют результат работы в новый слой, что часто весьма не удобно.
Присоединяюсь к предыдущим ораторам и готов оказать посильную помощь.
Re: Предложение по доработке API Qgis: синхронизация редакции
Добавлено: 02 май 2009, 04:52
Максим Дубинин
спасибо за реакцию, оказывается QGIS-овцы и сами наталкивались на подобное ограничение и принимают предложение
http://n2.nabble.com/synchronization-fu ... 49387.html
Re: Предложение по доработке API Qgis: синхронизация редакции
Добавлено: 02 май 2009, 12:50
Dorofeev
Просьба протестировать патч. Метод назвается 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 );
Re: Предложение по доработке API Qgis: синхронизация редакции
Добавлено: 02 май 2009, 18:07
Максим Дубинин
Re: Предложение по доработке API Qgis: синхронизация редакци
Добавлено: 10 мар 2011, 13:31
GIS-dev
Этот метод до сих пор существует только в виде патча или включен в состав QGIS?
Re: Предложение по доработке API Qgis: синхронизация редакци
Добавлено: 10 мар 2011, 19:31
Voltron
GIS-dev писал(а):Этот метод до сих пор существует только в виде патча или включен в состав QGIS?
Ну нельзя же быть до такой степени ленивым. Вы бы по ссылке сходили что ли... Или Ъ по ссылкам не ходят?
changeGeometry() was implemented in r10701. Use changeAttributeValue() to update the attributes.
Почти два года как реализовано. И доке по API есть.
Re: Предложение по доработке API Qgis: синхронизация редакци
Добавлено: 11 мар 2011, 02:47
GIS-dev
Voltron писал(а):
Ну нельзя же быть до такой степени ленивым. Вы бы по ссылке сходили что ли... Или Ъ по ссылкам не ходят?
changeGeometry() was implemented in r10701. Use changeAttributeValue() to update the attributes.
Почти два года как реализовано. И доке по API есть.
Эти два метода я видел. Но не обратил внимания, что они введены вместо заявленного в патче "changeFeature".