Okay, thanks, all clear now.

Maybe documenting that setDataSource is useless in case of memory layers
would prevent future questions like this.
Thanks again!

On Fri, 14 Jun 2019 at 01:49, Nyall Dawson <[email protected]> wrote:

> On Fri, 14 Jun 2019 at 09:41, Ivan Ivanov <[email protected]> wrote:
> >
> > Hi, Nyall,
> >
> > I'm developing a plugin with a lot of internal layers, that are being
> (re)created on user interaction.
> >
> > There are multiple event listeners attached to a layer, as well as
> passed around to different functions and might have custom styles. At some
> point, I want to replace the layer entirely with another one (result from
> an algorithm).
> >
> > To solve this, I came up with three solutions, maybe there are more:
> > One option to achieve this is to copy all the features from the new
> layer and put them in the first one, but the layers might be very big and
> I'm afraid it would be a problem.
> > The second option that I'm currently using is to recreate all the event
> listeners on the new layer and replace it from the layer tree. This is
> okayish and it works.
> > The third option is to set a new data source, as I thought it's the most
> optimal one, however, when the layer has two uids it's practically broken.
>
> Well, this approach will work perfectly fine for everything BUT memory
> layers. The features from memory layers can't be shared between two
> layers, so resetting the data source here really doesn't have any
> meaning. There's just no way to duplicate a memory layer except for
> copy all the features and adding to a new layer.
>
> Nyall
>
> >
> > I got some inspiration from here:
> https://github.com/enricofer/changeDataSource/blob/master/setdatasource.py#L175-L206
> > directly editing the XML but the result is the same - double ids. I
> checked this plugin because I'm sure it used to work in 3.2 (currently
> having 3.6.3 on Ubuntu).
> >
> > Best,
> > Ivan
> >
> >
> >
> > On Fri, 14 Jun 2019 at 01:21, Nyall Dawson <[email protected]>
> wrote:
> >>
> >> On Wed, 12 Jun 2019 at 10:09, Ivan Ivanov <[email protected]> wrote:
> >> >
> >> > I fixed it. Sorry for the inconvenience:
> >> >
> >> > layer1 = QgsVectorLayer('Polygon?crs=epsg:32612', 'layer2', 'memory')
> >> > layer2 = QgsVectorLayer('Polygon?crs=epsg:32612', 'layer1', 'memory')
> >> >
> >> > print(layer1.source())
> >> > print(layer2.source())
> >> > layer1.setDataSource(layer2.source(), layer2.name(),
> layer2.dataProvider().name())
> >> > print(layer1.source())
> >>
> >> I agree that the results of this output look odd - but what exactly
> >> are you trying to achieve here?
> >>
> >> Nyall
> >>
> >> >
> >> > On Wed, 12 Jun 2019 at 00:28, Nyall Dawson <[email protected]>
> wrote:
> >> >>
> >> >> On Tue, 11 Jun 2019 at 15:06, Ivan Ivanov <[email protected]>
> wrote:
> >> >> >
> >> >> > Hello,
> >> >> >
> >> >> >
> >> >> > Can you give me some idea why I'm getting two uids in the layer's
> source? And also how I can fix this because now the layer just disappears
> from the map canvas. (all layers are isValid() = True)
> >> >> >
> >> >> > oldLayer.source()
> >> >> > #
> MultiLineString?crs=EPSG:32737&field=fid:integer(0,0)&uid={6cd1f176-9c05-4d2a-961a-3143a8fa422b}
> >> >> >
> >> >> > newLayer = processing.run('save:selectedfeatures', {
> >> >> >     'INPUT': oldLayer,
> >> >> >     'OUTPUT': 'memory:newLayer'
> >> >> > )
> >> >> >
> >> >> > oldLayer.setDataSource(newLayer.source(), oldLayer.name(),
> newLayer.dataProvider().name())
> >> >> >
> >> >> > newLayer.source()
> >> >> > #
> MultiLineString?crs=EPSG:32737&field=fid:integer(0,0)&uid={d36aff88-4248-4ffb-be2f-2ac1891ac26d}
> >> >> > oldLayer.source()
> >> >> >
> >> >> > # WRONG, I would expect the same as above. Also, the uid is
> completely new.
> >> >> > #
> MultiLineString?crs=EPSG:32737&field=fid:integer(0,0)&uid={d36aff88-4248-4ffb-be2f-2ac1891ac26d}&uid={3422de07-cf38-4249-af55-23c7d9779daf}
> >> >>
> >> >> Hi Ivan,
> >> >>
> >> >> Your code seems incomplete and has some syntax errors -- maybe it
> >> >> wasn't copied correctly? Can you repost please?
> >> >>
> >> >> Nyall
>
_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to