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
_______________________________________________
[email protected]
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