[Gfoss] Qgis 2.8.1 e VectorLayer Translate

Luigi Pirelli luipir a gmail.com
Mer 22 Apr 2015 15:45:40 CEST


faccio una ipotesi alla cieca, non perdendo il tempo a leggere il
codice della 1.8

che le feature fossero caricate in cache nel momento del caricameto
del layer? vedo che fai iface.activeLayer() che attualmente passa dal
QgsMapLayerRegistry per "registrare" il layer in qgis. Se ricordo bene
era cosi' anche allora... solo che ora ole feature vengono caricate
con intelligenza, cioe' solo se servono, e questo permette di gestire
vettoriali di grosse dimensioni senza incorrere in problemi di
memoria.

un'altra ottimizzazione dipende dalla complessita' delle features...
queste vengono semplificate lato provider quando la visualizzazione
non le necessita (tipo scala troppo affollata)... questo, se ricordo
bene non c'era nella 1.8 ed e' stato aggiunto con il rendering
MultiThread... morale, appena caricato il layer e visualizzato  a
bassa scala (o alta?... mi confondo sempre) non e' detto che hai
effettivamente preso le features... queste vengono prese solo se ne
hai effettivamente bisogno... conta che e' un bel vantaggio in caso di
layer remoti.

morale... e' cambiato il motore di fetch dei dati che e' piu' astuto :)

fai un po il confronto nel caricamento e visualizzazione del layer
nella 1.8 e 2.8

ciao e a presto, Luigi Pirelli

**************************************************************************************************
* LinkedIn: https://www.linkedin.com/in/luigipirelli
* Elance: https://www.elance.com/s/edit/luigipirelli/
* GitHub: https://github.com/luipir
* Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
* Mastering QGIS:
https://www.packtpub.com/application-development/mastering-qgis
**************************************************************************************************


2015-04-22 15:14 GMT+02:00 Pietro Panzeri <pietro.panzeri a treuropa.com>:
> Grazie mille per la risposta.
> Ho provato ad usare il codice hai scritto e che utilizza la getFeatures().
> Le cose sono effettivamente cambiate nel seguente modo:
> la prima volta che faccio una traslazione ci impiega sempre 4minuti come
> prima mentre dalla seconda volta ci impiega 20 secondi: ha effettivamente
> messo in cache le geometrie.
> La domanda quindi rimane aperta: come mai nella versione 1.8 gia' la prima
> esecuzione ha prestazioni ottime mentre nella 2.8.1 invece e' necessario
> popolare "esplicitamente" la cache con prestazioni notevolmente peggiori?
>
> Pietro
>
>
>
>
>
>
> 2015-04-22 12:59 GMT+02:00 Luigi Pirelli <luipir a gmail.com>:
>>
>> 2015-04-22 11:06 GMT+02:00 Pietro Panzeri <pietro.panzeri a treuropa.com>:
>> > translateFeature
>>
>>
>> il codice del translate e' piuttosto semplice [1] attualmente percio'
>> penso a due aspetti
>>
>> 1) senza andarmi a vedere il codice della 1.8 direi che prima avevi la
>> rob ain cache e ora no
>> 2) in cache potenzialment enon la hay visto che usi featureCount
>> invece che getFeatures()
>> 3) sconsiglio0 di usare un range su featureCount... non farei
>> assunzioni su quale debba essere la logica degli id delle feature
>> dentro QGIS => userei la classica
>> 4) la http://qgis.org/api/qgsvectorlayereditutils_8cpp_source.html#l00174
>> dice che se la geometria non e' nella cache fa una getFeature ad hoc
>> => fai una get feature ricreando l'iteratore ogni volta!...
>>
>> for feat in vector.getFeatures():
>>     fid = feat.id()
>>     vlayer.translateFeature(fid, delta_x, delta_y)
>>
>> prova e fai sapere
>>
>> [1] http://qgis.org/api/qgsvectorlayereditutils_8cpp_source.html#l00164
>>
>> a presto, Luigi Pirelli
>>
>>
>> **************************************************************************************************
>> * LinkedIn: https://www.linkedin.com/in/luigipirelli
>> * Elance: https://www.elance.com/s/edit/luigipirelli/
>> * GitHub: https://github.com/luipir
>> * Stackexchange: http://gis.stackexchange.com/users/19667/luigi-pirelli
>> * Mastering QGIS:
>> https://www.packtpub.com/application-development/mastering-qgis
>>
>> **************************************************************************************************
>
>
>
>
> --
> Pietro Panzeri
>
> Software Development Manager
>
> Tele-Rilevamento Europa - T.R.E. srl
> Ripa di Porta Ticinese, 79
> 20143 Milano – Italia
> Tel.: +39.02.4343.121 - Fax: +39.02.4343.1230
> pietro.panzeri a treuropa.com - www.treuropa.com


Maggiori informazioni sulla lista Gfoss