lunedì 13 novembre 2017

Compile qgis-server on Debian Stretch

I have some trouble tocompile and using qgis-server on a Debian Streetch.
Try to send a email to QGIS ML, But after two email send I discovered that my subscription was previosly disabled because I no send an email for more than 2 week.
Gasp !.

To boring to subscribe newly and resend all my emails.
So I decide to save my old email in this post for who could be interested to know it.
----------

email #1

Hi,
I'm compiling the qgis-server 2.14 version all seem ok.
The GetMap will work corretly using jeg format,
but when try to use the png ,
I have this error from Web server Logs.

[Fri Nov 10 12:48:06.824931 2017] [core:error] [pid 5760:tid 140522119190272] [c
lient 159.213.4.51:52153] End of script output before headers: qgis_mapserv.fcgi
libpng warning: Application was compiled with png.h from libpng-1.6.26
libpng warning: Application  is  running with png.c from libpng-1.2.56
libpng error: Incompatible libpng version in application and library
[Fri Nov 10 12:48:08.056674 2017] [core:error] [pid 5760:tid 140522110797568] [c
lient 159.213.4.51:52154] End of script output before headers: qgis_mapserv.fcgi
Any thought ?

---------
emal #2


After some tests.
It seem the trouble was done to the gdal tools.
Infact the Debian stretch version use libpng1.6
instead the gdal (i compile from source) come with an internal libpng 1.2.56.
When QGIS (the cmake) explore to find the dependencies it find the libpng from debian stretch (libpng-1.6.26) so the qgis is compile using it.
But when the qgis (the cgi executable) is running it is using instead the libpng-1.2.56 coming from the compile of gdal.
I'm not able to say toqgis to use the libpng1.2.56 of gdal when compile.
So an alternate solution I could try is to try to compile the gdal uing instead of its internal libpng1.2.56 , the libpng-1.6.26 of debian .
But I'm not sure it is cmpiatible with gdal.
So I try to ask to the gdal ML.
Regards,
A.

 ---

After this, I send another email to the gdal ML.
This is the link for it:

https://lists.osgeo.org/pipermail/gdal-dev/2017-November/047696.html
---


domenica 24 luglio 2016

Esempi chiamate WFS

Layer FOGLI BBOX

DescribeFeatureType:

http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmscatasto&SERVICE=WFS&VERSION=2.0.0&REQUEST=DescribeFeatureType&TYPENAME=rt_cat.idcatbdfog.bbox.rt&OUTPUTFORMAT=application%2Fgml%2Bxml%3B%20version%3D3.2

 GetFeature standard - scarica 10 record senza filtri particolari

http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmscatasto&service=wfs&request=getfeature&version=2.0.0&srsName=EPSG:25832&Typename=rt_cat.idcatbdfog.bbox.rt&maxfeatures=10

    GetFeature standard - scarica l'elenco dei fogli di un comune. Filtro sul codice istat del comune. Ritorna tutti gli atributi compresa la geometria. Ordina sul campo "foglio" in modo ascendente
   
http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmscatasto&service=wfs&request=getfeature&version=2.0.0&srsName=EPSG:25832&Typename=rt_cat.idcatbdfog.bbox.rt&sortBy=foglio+A&Filter=<Filter xmlns:wfs="http://www.opengis.net/wfs"><PropertyIsEqualTo><PropertyName>codcom</PropertyName><Literal>048017</Literal></PropertyIsEqualTo></Filter>

Esempio di invocazione con filtro alfanumerico:

http://www502.regione.toscana.it/wmsraster/com.rt.wms.RTmap/wms?map=wmscatasto&service=wfs&request=getfeature&version=2.0.0&srsName=EPSG:25832&Typename=rt_cat.idcatpart.bbox.rt&propertyname=particella,foglio,allegato,siglaprov,geometry&sortBy=particella+A&Filter=<Filter xmlns:wfs="http://www.opengis.net/wfs" xmlns:ogc="http://www.opengis.net/ogc" xmlns:gml="http://www.opengis.net/gml"><ogc:And><ogc:PropertyIsEqualTo><ogc:PropertyName>codcom</ogc:PropertyName><ogc:Literal>048017</ogc:Literal></ogc:PropertyIsEqualTo><ogc:PropertyIsEqualTo><ogc:PropertyName>foglio</ogc:PropertyName><ogc:Literal>2</ogc:Literal></ogc:PropertyIsEqualTo></ogc:And></Filter>

giovedì 26 maggio 2016

How clean the bash_history

To clean fully the bash_history this command work pretty well:

cat /dev/null > ~/.bash_history && history -c && exit


sabato 30 aprile 2016

The RT Topology

In the 30 April 2016
start the repository of the new Topological Library "RT Topology"
The repository and more info at this link:
https://git.osgeo.org/gogs/rttopo/librttopo

It is used by SQLite/Spatialite.


venerdì 22 aprile 2016

QGIS e la cancellazione di una feature in uno shapefile.



Nota per chi utilizza il software GIS GFOSS QGIS.
Stare parecchio attento se si usa il formato esri-shapefile e editando uno shapefile si esegue una operazione di cancellazione.
Questo perche' in realta' QGIS NON CANCELLA il record, ma bensi' lo marca (con una operazione che non e' prevista dallo standard shapefile) come una forma di cancellazione virtuale o logica.
Il che vuol dire che il record non e' realmente cancellato, ma solo MARCATO come fosse cancellato.

Dopo aver marcato il record "cancellato", QGIS non mostra piu' tale record facendo credere all'utente che il record sia stato effettivamente cancellato.

Una volta che viene chiusa la sessione di editing e committato il risultato salvando sullo shapefile le modifiche.
Loshapefile che ne risulta sara' uno shapefile in ui il record CANCELLATO e' ANCORA PRESENTE, solamente possiede un flag (assolutamente non previsto dallo standard shapefile) che lo segna come fosse cancellato.
Purtroppo questo flag di cancellazione e' noto solo a QGIS, per cui se si riaprisse lo shapefile con qgis non si vedrebbe il record cancellato.
Pero' se si apre il medesimo shapefile con un altro software GIS, commerciale o gfoss si vedra'ricomparire il record cancellato come se mai lo fosse stato.

Questo e' un comportamento molto rischioso perche', come ho detot , e' un comportamento fuori standard e se lo shapefile gestito con qgis viene fatto circolare e fornito a altri utenti che loro malgrado non usano qgis, vedrebbero ricomparire ati cancellati e considerarli buoni e validi.

E' facile capire come questo si presta a generare problemi e incomprensoni oltre a comportare dei seri problemi per chi adottasse qgis senza conoscere questa sua caratteristica.

Di seguito alcune immagini di esempio:



L'immagine sopra riportata rappresenta una selezione del dataset confini comunali di Regione Toscana scaricato dal suo sito Cartoteca.
Dopo averla scaricata la ho aggiunta a un progettoQGIS e poi mettendo lo shapefile in editing hocancellato un comune. Si nota infatto su QGIS il buco provocato sulla mappa dalla cancellazione eseguita.

Dopo aver fatto questo chiudo la sessione di editing confermando il salvataggio della nuova situazione e chiudo il QGIS.

Dopo diche se riapro lo shapefile sempre con QGIS vedro' che il buco della cancellazione e' sempre presente. E non mi sarei aspettato altrimenti, vistoche ho eseguito una cancellazione.
:)

Chiudo definitivamente QGIS e mi scaricoun altro software GIS sempre gfoss.
In questo secondo caso si tratta di gvSig un altro famoso software GIS gfoss.

Lo installo e dopo con esso riapro lo shapefile .

Il risultato che vedo e' riportato nella immagine seguente:





Come si puo' notare nella mappa il buco E' ASSENTE. Queto perche' e' ricomparso il  poligono che io avevo cancellato , o meglio che credevo di aver cancellato.

Come ulteriore riprova faccio ricorso a un famoso software GIS commerciale , si tratta del vecchio e glorioso Arcview 3.2.

Anche in questo caso, con il suddetto software GIS apro lo shapefile e visualizzo la mappa dei suoi poligoni e anche in questo caso il buco che dovrebbe esserci non e' presente.
Come si puo' vedere nella immagine seguente:


Da ua ricerca su internet e in particolare sul sito di QGIS risulta che su questa cosa qui ci sia un ticket aperto da svariati anni, ma che mai e' stato risolto.

Probabilmente  qualcuno lo considera una feature. Perche'magari e' considerato un pregio il fatto di avere una cancellazione virtuale.

Secondo me pero' un comportamento che porta fuori da uno standard non e' mai una feature, ma anzi e' una delle pratiche che spesso vengono censurate ccome "bad practice" proprio nel mondo floss a cui qgis vuole appartenere. Questo perche' alla fine produce degli shapefile che sono usabili solo con lui stesso e con nessun altro software.
va anche detto che QGIS e' un ottimo prodotto e considero questa cosa un inciampo di tale prodotto.
Certo il fatto che dopo svariati anni che alla ristretta cerchia degli sviluppatori di qgis questa cosa e' nota e che fin ad oggi questa cosa non era stata risolta ha sicuramente prodotto una serie di archivi che al'insaputa di chi li usava erano difatto fuori standard.

E' quindi importante che chi usava qgis sia messo al corrente dell'esistenza di questo bug.

Termino questa digressione  , fornendo una serie di workarounds per scansare questo problema.

Il primo e' quello di non usare il formato shapefile. Infatti e' un bug presente solo nel formato shapefile all'interno di qgis. Se ad esmepio si sceglie di usare un DBMS postgis il problema non sussiste.
Certo, non tutti sono esperti dbms e sono in grado id installarsi , gestirsi e impiegare un dbms postgres con espensione spaziale postgis. Per cui una soluzione piu' facile, rapida , econoica e altrettanto efficiente e' usare il formato spatialite  che e' basatosu un file unico che contiene un intero archivio geografico e come per il postgres con espesione postgis non soffre del problema della finta cancellazione che affligge lo shapefile.

Ne caso invece in cui per varie ragioni (il mondo e' vario e non sempre si puo' fare cio' che sarebbe meglio)  sisia costretti a usare il formato shapefile , la soluzione e' che al temrine del lavoro si esegua una esportazione tramite il comando "salva come..." (save as...).
Il comando Salva-Come viene usualmente impiegato per salvare un archivio geografico in  formati differenti e puo' sembrare strano impiegarlo per risalvare nel medesimo formato in cui l'archivio e' gia' presente. Ma e' proprio qui il workaround.
Infatti le prove effettuate dimostrano che durante la rigenerazione dell'archivio il QGIS poiche' filtra il record cancellato logicamente non lo trasferisce nel nuovo shapefile generato e quindi solo con questa soluzione si riesce ad avere uno shapefile in cui i dati cancellati SONO REALMENTE CANCELLATI.






E'  un po' macchinoso , ma preserva da problemi peggiori , specie se non ci accorge di questa cosa e si scopre solo dopo parecchio tempo che dati che si credevano cancellati erano invece ancora presenti e magari sono stati impiegati in elaborazioni successive compiute da altri soggetti.

Termino dicendo che questa cosa e' presente in parecchie versioni di qgis, non so' a quando risale la sua comparsa, ed e' presente fino alla versione 2.12.
Infatti con la versione 2.14 mi e' stato segnalato che il bug e'stato risolto.
Da una verifica effttuata confemro la sua scomparsa.
Ma i suoi problemi potrebbero permanere a lungo.
Infatti chi avesse ancora una versione installata di QGIS antecedente alla 2.14 oppure avesse archivi prodotti con una versione antecedente alla 2.14.
Cosa moltoprobabile vistoche la 2.14 e'uscita circa 2 mesi fa'. Molto probabilmente ha archivi difettati sui record cancellati.

E di conseguenza molti degli archivi che sono in circolo e che sono stati rpodotti con qgis sono in queste condizioni.

Analogamente il fatto che sia stato risolto non esime dal gestire questi problema.
Perche' ora ci sono a giro archivi con cancellazioni logiche che probabilmente andrebbero gestiti comunque dai softwares alternativi proprio per attenare i potenziali problemi che sorgenrebbero dall'avere usato una versione di qgis infesriore alla 2.14.
 
Buona fortuna.

venerdì 17 luglio 2015

Spatialite Views

creation of a view runnable on spatialite and compliant with qgis:

CREATE VIEW ucs_2013 as
select
    rowid as rowid,
    ucs2007 as ucs2007,
    geometry as geometry
from
    ucs2013;



insert into views_geometry_columns(view_name,view_geometry,view_rowid,f_table_name,f_geometry_column,read_only)
values('ucs_2013','geometry','rowid','_ucs2013','geometry',1);



IS IMPORTANT TO USE THE ALIAS OTHERWISE THE QGIS SPATIALITE PROVIDER COULD WORK BAD
ALSO IS IMPORTANT TO HAVE THE ROWID field available in the view.



mercoledì 10 giugno 2015

How find a text inside all files of a folder

It return the list of files and the lines where the text is founded.

example: fnd all the files where there is the string FILTERITEM (case sensitive)

find . -type f -fprint /dev/stderr -exec cat {} \; | grep FILTERITEM