[Gfoss] Qgis e recipe #19 di Spatialite cookbook

Andrea Peri aperi2007 a gmail.com
Mer 5 Mar 2014 20:10:28 CET


Una precisazione.

Secondo me sarebbe piu' indicato usare il costrutto

ST_Multi()
al posto del costrutto CastoToMulti().

Su spatialite ST_Multi() è un alias di CastToMulti() e quindi usare luno o
l'altro è indifferente.
Ma ST_Multi() è usato anche da Postgis e proviene da ISO per cui a parer
mio ha un valore simbolico superiore.

O esiste una differenza che ignoro tra CastToMulti() e ST_Multi()
?



Il giorno 05 marzo 2014 19:59, <a.furieri a lqt.it> ha scritto:

> Ciao Beppe,
>
> come diceva Mao Tse Tung:
> "quando trovi uno che ha fame non gli regalare mai un pesce;
>  insegnagli piuttosto ad usare la canna da pesca"
>
> vedi i miei commenti passo per passo:
>
>
> On Wed, 5 Mar 2014 10:09:52 -0800 (PST), Beppe wrote:
>
>> Salve a tutti!
>> Nella ricetta #19  dello Spatialite Cookbook mi sono reso conto che il
>> file
>>
>>
> giusto per pedante precisione: non e' affatto un "file", e' una tavola
> dentro ad un DB-file ... tutt'altra zuppa ;-)
>
>
>
>  che dovrebbe contenere il merging dei comuni a formare le provincie non
>> viene aperto da QGIS, o meglio viene visto come "tabella senza geometria".
>> Ciò non ostante, se controllo da SpatialiteGUI le geometrie sono
>> visualizzabili correttamente sia mediante il menù Map Preview che con
>> comando del menù contestuale "Blob Explore".
>>
>> Ho seguito la seguente procedura indicata dallo Spatialite Cookbook:
>>
>> 1-Creato un nuovo db (srid 23032, codifica cp152) nel quale ho importato
>> lo
>> shapefile com2010_g (SRID 23032, codifica CP152, lasciando deselezionate
>> le
>> opzioni della voce "Geometry Storage", selezionando alla voce "Geometry
>> Type" l'opzione "Mode:Automatic" ed alla voce "Primary Key Column"
>> l'opzione
>> "Automatic".
>>
>> 2-Ho creato la view 'local_councils':
>>   CREATE VIEW local_councils AS
>>   SELECT c.cod_reg AS cod_reg,
>>     c.cod_pro AS cod_pro,
>>     c.cod_com AS cod_com,
>>     c.nome_com AS nome_com,
>>     p.nome_pro AS nome_pro,
>>     p.sigla AS sigla,
>>     r.nome_reg AS nome_reg,
>>     c.geometry AS geometry
>>   FROM com2010_g AS c
>>   JOIN prov2010_g AS p USING (cod_pro)
>>   JOIN reg2010_g AS r USING(cod_reg)
>>
>> 3-Ho creato la tabella 'counties' e relativa colonna geometrica:
>>   CREATE TABLE counties AS
>>   SELECT cod_pro, nome_pro, sigla, cod_reg, nome_reg,
>>     ST_Union(geometry) AS geometry
>>   FROM local_councils
>>   GROUP BY cod_pro
>>
>>   SELECT RecoverGeometryColumn('counties', 'geometry',
>>     23032, 'MULTIPOLYGON', 'XY').
>>
>>
> e qua ti sei evidentemente distratto :-)
>
> quest'ultima SELECT ritorna ZERO ... cioe' FALSE
> insomma, non e' andata a buon fine, non ce l'ha fatta proprio a ricoverare
> correttamente la geometria.
> conclusione: non hai affatto una tavola Spatial, hai ancora una banale
> tavola di tipo ordinario (anche se contiene delle geometrie)  perche'
> non e' registrata su "geometry_columns"
> e di conseguenza QGIS ti dice (correttamente) che non trova nessuna
> tavola Spatial (aka layer) che si chiami "counties".
>
> andiamo a verificare perche' la RecoverGeometryColumn fallisce:
>
> SELECT Count(*) AS count, ST_GeometryType(geometry) AS type,
>   ST_SRID(geometry) AS srid, CoordDimension(geometry) AS dims
> FROM counties
> GROUP BY type, srid;
> -------
> 44 MULTIPOLYGON 23032 XY
> 66 POLYGON      23032 XY
>
> ora e' tutto chiaro; la tavola "counties" contiene geometrie
> di tipo misto: qualche volta poligoni semplici, altre volte
> poligoni multipli (pensa p.es. a tutte le provincie sulla
> costa che hanno isole, isolotti, scogli etc).
>
> nelle versioni piu' recenti di splite i controlli di tipo
> sono rigidamente inflessibili; non puoi registrare una "vera
> e genuina" tavola Spatial se il tipo geometrico non e'
> rigorosamente univoco.
>
> soluzione A)
> ------------
> UPDATE counties SET geometry = CastToMultiPolygon(geometry);
>
> cioe' applichiamo a posteriori un casting sul tipo geometrico;
> questa UPDATE assicura che tutto verra' convertito a MultiPolygon
> in modo rigorosamente consistente.
>
>
> soluzione B)
> ------------
> correggiamo la SELECT di origine in modo tale da renderla
> aderente ai requisiti delle ultime versioni (personalmente,
> preferisco questa seconda soluzione):
>
> DROP TABLE counties;
>
>
> CREATE TABLE counties AS
> SELECT cod_pro, nome_pro, sigla, cod_reg, nome_reg,
>   CastToMultiPolygon(ST_Union(geometry)) AS geometry
>
> FROM local_councils
> GROUP BY cod_pro;
>
> SELECT RecoverGeometryColumn('counties', 'geometry',
>   23032, 'MULTIPOLYGON', 'XY');
>
> voila: ora finalmente funziona tutto correttamente ;-)
>
> ciao Sandro
>
> _______________________________________________
> Gfoss a lists.gfoss.it
> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
> Questa e' una lista di discussione pubblica aperta a tutti.
> I messaggi di questa lista non hanno relazione diretta con le posizioni
> dell'Associazione GFOSS.it.
> 666 iscritti al 22.7.2013
>



-- 
-----------------
Andrea Peri
. . . . . . . . .
qwerty àèìòù
-----------------
-------------- parte successiva --------------
Un allegato HTML ? stato rimosso...
URL: <http://lists.gfoss.it/pipermail/gfoss/attachments/20140305/1fcef8a8/attachment-0001.html>


Maggiori informazioni sulla lista Gfoss