|
|
Come da titolo, supponendo di avere un edificio con attributo "quota_base" pari all'altezza s.l.m. del suo piede, è possibile estrarre (col Calcolatore Campi) anche la quota del suo tetto?
Mi sono disperatamente inventato una sintassi tipo:
geomFromWKT($z)ma non funziona, e neppure in Rete pare ci sia letteratura in merito...
Allego una shape di prova:
polygonz.zipGrazie in anticipo!
|
|
Il giorno Mon, 30 Jun 2014 01:12:40 -0700 (PDT)
Sieradz < [hidden email]> ha scritto:
ariciao Antonio,
forse ho capito male il problema, ma l'altezza dell'edificio la puoi
ricavare come differenza quota_tetto - quota_base; la seconda ce l'hai
nell'attributo, la prima?
> Grazie in anticipo!
per così poco? ciao :-)
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
giulianc51 wrote
l'altezza dell'edificio la puoi ricavare come differenza quota_tetto - quota_base; la seconda ce l'hai nell'attributo, la prima?
Ciao caro, è proprio quella che manca: la quota-tetto è integrata nel file .SHP di geometria (come in tutte le shape di classe PolygonZ) mentre io vorrei "trasmetterla" al file .DBF di attributi...
È da stamattina che setaccio invano il Web: pare che nessuno al mondo abbia mai avuto l'esigenza di estrapolare la quota Z da una shape siffatta, almeno con sw di pubblico dominio....
|
|
Il 30/06/2014 14:54, Sieradz ha scritto:
> /
> giulianc51 wrote
>> l'altezza dell'edificio la puoi ricavare come differenza quota_tetto -
>> quota_base; la seconda ce l'hai nell'attributo, la prima?
> /
>
> Ciao caro, è proprio quella che manca: la quota-tetto è integrata nel file
> .SHP di geometria (come in tutte le shape di classe PolygonZ) mentre io
> vorrei "trasmetterla" al file .DBF di attributi...
>
> È da stamattina che setaccio invano il Web: pare che nessuno al mondo abbia
> mai avuto l'esigenza di estrapolare la quota Z da una shape siffatta, almeno
> con sw di pubblico dominio....
>
>
mmm mi sa che con poligon avrai problemi
per estrarre una cordinata z da punto 3d in uno shape si possono usare
le api ogr o shapelib
io preferisco le ogr
data una feature di uno shape
geom = feature.geometry()
wkb = geom.asWkb()
punto3d = ogr.CreateGeometryFromWkb(wkb)
self.z = punto3d.GetZ()
self.feat = feature
nelle linestring dovrebbe funzionare infatti c'è la getZ nelle api
http://www.gdal.org/classOGRLineString.htmlper i poligoni non mi sembra di aver trovato nulla nella ogr puoi vedere
nella documentazione della shapelib se c'è qualcosa
ciao
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il giorno Mon, 30 Jun 2014 05:54:50 -0700 (PDT)
Sieradz < [hidden email]> ha scritto:
> /
> giulianc51 wrote
> > l'altezza dell'edificio la puoi ricavare come differenza
> > quota_tetto - quota_base; la seconda ce l'hai nell'attributo, la
> > prima?
>
> /
>
> Ciao caro,
ciao Antonio,
> ..... è proprio quella che manca: la quota-tetto è integrata nel
> file .SHP di geometria (come in tutte le shape di classe PolygonZ)
> mentre io vorrei "trasmetterla" al file .DBF di attributi...
>
> È da stamattina che setaccio invano il Web: pare che nessuno al mondo
> abbia mai avuto l'esigenza di estrapolare la quota Z da una shape
> siffatta, almeno con sw di pubblico dominio....
con il comando
$ ogrinfo -ro -al (path)/polygonz.shp
ottengo:
INFO: Open of (path)/polygonz.shp'
using driver `ESRI Shapefile' successful.
Layer name: polygonz
Geometry: 3D Polygon
Feature Count: 1
Extent: (8.713623, 38.925486) - (8.713864, 38.925606)
Layer SRS WKT:
(unknown)
quota_base: String (254.0)
OGRFeature(polygonz):0
quota_base (String) = 14
POLYGON ((8.713623356757918 38.925496189771991 123,8.713644604540052
38.925606155477183 123,8.713864308741204 38.925590794604112
123,8.713849586419242 38.925486453050652 123,8.713707139093028
38.925496294786541 123,8.71367569630933 38.925486241311773
123,8.713623356757918 38.925496189771991 123))
quindi direi che il tuo edificio ha sommità 123 e quindi altezza 123-14
= 109m: possibile?
quindi la tua domanda diventa: quale libreria GDAL/OGR compliant vede
la coordinata Z? so che è solo una parafrasi della tua domanda
originaria, però ti devi al momento accontentare :-) :-)
ciao,
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
giulianc51 wrote
il tuo edificio ha sommità 123 e quindi altezza 123-14 = 109m: possibile?
Non e' solo possibile, e' perfetto: bravissimo!
Il problema e' se tu hai un'intera citta' con migliaia di edifici, ossia popolare automaticamente il campo Z della tabella attributi di tutti gli N poligoni.
Grazie lo stesso, almeno si e' accesa una lucina in fondo al tunnel...
|
|
Non sono su un PC provvisto degli strumenti necessari, per cui non posso dettagliare la procedera, ma io procederei così:
- trasformazione dello shape in layer Spatialite
- creo la colonna altezza
- popolo la colonna con qualcosa tipo:
update altezza set (quota_base - Z( GeometryN(ExteriorRing(geom, 0))))
ovvero prendendo semplicemente la z del primo punto del ring esterno del poligono, assumendo che tutti i vertici abbiano la stessa z.
giovanni
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il giorno Mon, 30 Jun 2014 18:07:07 +0200
"G. Allegri" < [hidden email]> ha scritto:
> Non sono su un PC provvisto degli strumenti necessari, per cui non
> posso dettagliare la procedera, ma io procederei così:
>
> - trasformazione dello shape in layer Spatialite
ok e confermo che Spatialite vede le tre coordinate;
> .....
> - popolo la colonna con qualcosa tipo:
>
> update altezza set (quota_base - Z( GeometryN(ExteriorRing(geom, 0))))
quì invece no perchè:
a) GeometryN agisce su GeometryCollection non su Polygon (almeno così
succede a me :-)
b) la porzione "....ExteriorRing(geom, 0))..." va sostituita con
"...ExteriorRing(geom), 0)..." altrimenti dice che il numero di
parametri di ExteriorRing è sbagliato e comunque lo 0 dovrebbe
essere un parametro di GeometryN (se funzionasse :-(
grazie, comunque mi hai fatto imparare qualcosa in più di
Spatialite :-)
> giovanni
ciao,
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il 30 giugno 2014 19:07, giulianc51 < [hidden email]> ha scritto:
> quì invece no perchè:
>
> a) GeometryN agisce su GeometryCollection non su Polygon (almeno così
> succede a me :-)
>
> b) la porzione "....ExteriorRing(geom, 0))..." va sostituita con
> "...ExteriorRing(geom), 0)..." altrimenti dice che il numero di
> parametri di ExteriorRing è sbagliato e comunque lo 0 dovrebbe
> essere un parametro di GeometryN (se funzionasse :-(
Ciao,
credo che convenga usare le funzioni MaxZ / MinZ.
Saluti
Luca
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Giusto Luca, al volo non mi era venuto in mente MaxZ/MinZ.
giovanni
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
giohappy wrote
Un piccolo video per eseguire l'intera operazione, senza uscire da QGIS
...che vale più di 1000 parole: funziona meravigliosamente.
Ringrazio tutti per l'attenzione, in particolare Luca per l'assist MaxZ, e Giovanni che ha incornato in gol.
Per gli appassionati che vogliano cimentarsi con dati concreti, allego la shape 3D di Cortina d'Ampezzo, coi suoi 3000 edifici.
shape3d.zipOgni oggetto è situato alla sua propria quota Z (intesa come altezza di gronda) e l'unico campo esistente viene popolato all'istante con la sintassi SQL:
update cortina3d set z_gronda = (ST_MaxZ(geom))Giusto per completezza d'esposizione, l'esigenza era nata dal fatto che in Google Earth è possibile vettorizzare gli edifici, applicando loro l'altezza di gronda (assoluta s.l.m. oppure relativa al suolo) che poi verrà proiettata fino a terra.
Se si salva un simile .KML e lo si importa in Qgis salvandolo come .SHP, il risultato è proprio una shape di classe PolygonZ, composta da N "tetti" di case.
|
|
Il 01/07/2014 10:37, Sieradz ha scritto:
> /
> giohappy wrote
>> Un piccolo video per eseguire l'intera operazione, senza uscire da QGIS
>
> /
Peccato solo che non si possa fare senza uscire da GDAL al momento! ;)
>gdalinfo --version
GDAL 1.11.0, released 2014/04/16
>ogrinfo cortina3d.shp -dialect SQLite -sql "SELECT spatialite_version()"
INFO: Open of `cortina3d.shp'
using driver `ESRI Shapefile' successful.
Layer name: SELECT
Geometry: None
Feature Count: 1
Layer SRS WKT:
(unknown)
spatialite_version(): String (0.0)
OGRFeature(SELECT):0
spatialite_version() (String) = 3.0.0-stable
>ogrinfo cortina3d.shp cortina3d -dialect SQLite -sql "update cortina3d
set z_gronda = ST_MaxZ(geometry)"
INFO: Open of `cortina3d.shp'
using driver `ESRI Shapefile' successful.
layer names ignored in combination with -sql.
ERROR 1: In ExecuteSQL(): sqlite3_prepare(update cortina3d set z_gronda
= ST_Max
Z(geometry)):
no such function: ST_MaxZ
In alternativa si puo' fare anche nella SpatiaLite GUI.
ciao
Antonio
--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il 01/07/2014 11:09, Antonio Falciano ha scritto:
> Il 01/07/2014 10:37, Sieradz ha scritto:
>> /
>> giohappy wrote
>>> Un piccolo video per eseguire l'intera operazione, senza uscire da QGIS
>>
>> /
>
> Peccato solo che non si possa fare senza uscire da GDAL al momento! ;)
>
> >gdalinfo --version
> GDAL 1.11.0, released 2014/04/16
>
> >ogrinfo cortina3d.shp -dialect SQLite -sql "SELECT spatialite_version()"
> INFO: Open of `cortina3d.shp'
> using driver `ESRI Shapefile' successful.
>
> Layer name: SELECT
> Geometry: None
> Feature Count: 1
> Layer SRS WKT:
> (unknown)
> spatialite_version(): String (0.0)
> OGRFeature(SELECT):0
> spatialite_version() (String) = 3.0.0-stable
>
> >ogrinfo cortina3d.shp cortina3d -dialect SQLite -sql "update cortina3d
> set z_gronda = ST_MaxZ(geometry)"
> INFO: Open of `cortina3d.shp'
> using driver `ESRI Shapefile' successful.
> layer names ignored in combination with -sql.
> ERROR 1: In ExecuteSQL(): sqlite3_prepare(update cortina3d set z_gronda
> = ST_Max
> Z(geometry)):
> no such function: ST_MaxZ
Piccola correzione qui (scusate):
>ogrinfo cortina3d.shp -dialect SQLite -sql "update cortina3d set
z_gronda = ST_MaxZ(geometry)"
INFO: Open of `cortina3d.shp'
using driver `ESRI Shapefile' successful.
ERROR 1: In ExecuteSQL(): sqlite3_prepare(update cortina3d set z_gronda
= ST_Max
Z(geometry)):
no such function: ST_MaxZ
> In alternativa si puo' fare anche nella SpatiaLite GUI.
>
> ciao
> Antonio
>
--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il giorno Tue, 01 Jul 2014 11:19:40 +0200
Antonio Falciano < [hidden email]> ha scritto:
ciao a tutti,
chiedo scusa, ma approffittando di questo interessante thread per
imparare qualcosa, mi sono accorto che l'esecuzione della query
proposta fa Giovanni A. mi dà l'errore:
> > no such function: ST_MaxZ
sia in QGIS (2.30. Master) che in Spatialite (1.4.0): è dovuto alle mie
versioni un pò datate o a qualche pezzo mancante?
grazie, ciao,
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il 01 luglio 2014 21:58, giulianc51 < [hidden email]> ha scritto:
> ciao a tutti,
>
> chiedo scusa, ma approffittando di questo interessante thread per
> imparare qualcosa, mi sono accorto che l'esecuzione della query
> proposta fa Giovanni A. mi dà l'errore:
>
>> > no such function: ST_MaxZ
>
> sia in QGIS (2.30. Master) che in Spatialite (1.4.0): è dovuto alle mie
> versioni un pò datate o a qualche pezzo mancante?
>
>
> grazie, ciao,
> giuliano
Ciao Giuliano,
nella finestra Help > About di QGIS, che versione di Spatialite ti da?
Sicuro sia la 1.4.0?
Luca
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il 01 luglio 2014 22:17, [hidden email]
< [hidden email]> ha scritto:
> Il 01 luglio 2014 21:58, giulianc51 < [hidden email]> ha scritto:
>> ciao a tutti,
>>
>> chiedo scusa, ma approffittando di questo interessante thread per
>> imparare qualcosa, mi sono accorto che l'esecuzione della query
>> proposta fa Giovanni A. mi dà l'errore:
>>
>>> > no such function: ST_MaxZ
>>
>> sia in QGIS (2.30. Master) che in Spatialite (1.4.0): è dovuto alle mie
>> versioni un pò datate o a qualche pezzo mancante?
>>
>>
>> grazie, ciao,
>> giuliano
>
> Ciao Giuliano,
> nella finestra Help > About di QGIS, che versione di Spatialite ti da?
> Sicuro sia la 1.4.0?
Ah, se ti riferisci alla 1.4.0 della Spatialite-GUI, anche li puoi
verificare la versione di Spatialite utilizzata.
Ciao
L.
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il giorno Tue, 1 Jul 2014 22:37:05 +0200
" [hidden email]" < [hidden email]> ha scritto:
ciao Luca,
> Il 01 luglio 2014 22:17, [hidden email]
> < [hidden email]> ha scritto:
> > Il 01 luglio 2014 21:58, giulianc51 < [hidden email]> ha
> > scritto:
> >> .....
>
> Ah, se ti riferisci alla 1.4.0 della Spatialite-GUI, anche li puoi
> verificare la versione di Spatialite utilizzata.
sì, intendevo spatialite_gui (sqlite 3.7.3 e spatialite 2.4.0), mentre
la master 2.3.0 usa spatialite 3.0.0-beta;
> Ciao
> L.
grazie, ciao,
giuliano
_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|
Il 01/07/2014 11:19, Antonio Falciano ha scritto:
> Il 01/07/2014 11:09, Antonio Falciano ha scritto:
>> Il 01/07/2014 10:37, Sieradz ha scritto:
>>> /
>>> giohappy wrote
>>>> Un piccolo video per eseguire l'intera operazione, senza uscire da QGIS
>>>
>>> /
>>
>> Peccato solo che non si possa fare senza uscire da GDAL al momento! ;)
>>
>> >gdalinfo --version
>> GDAL 1.11.0, released 2014/04/16
>>
>> >ogrinfo cortina3d.shp -dialect SQLite -sql "SELECT
>> spatialite_version()"
>> INFO: Open of `cortina3d.shp'
>> using driver `ESRI Shapefile' successful.
>>
>> Layer name: SELECT
>> Geometry: None
>> Feature Count: 1
>> Layer SRS WKT:
>> (unknown)
>> spatialite_version(): String (0.0)
>> OGRFeature(SELECT):0
>> spatialite_version() (String) = 3.0.0-stable
>>
>> >ogrinfo cortina3d.shp cortina3d -dialect SQLite -sql "update cortina3d
>> set z_gronda = ST_MaxZ(geometry)"
>> INFO: Open of `cortina3d.shp'
>> using driver `ESRI Shapefile' successful.
>> layer names ignored in combination with -sql.
>> ERROR 1: In ExecuteSQL(): sqlite3_prepare(update cortina3d set z_gronda
>> = ST_Max
>> Z(geometry)):
>> no such function: ST_MaxZ
>
> Piccola correzione qui (scusate):
>
> >ogrinfo cortina3d.shp -dialect SQLite -sql "update cortina3d set
> z_gronda = ST_MaxZ(geometry)"
> INFO: Open of `cortina3d.shp'
> using driver `ESRI Shapefile' successful.
> ERROR 1: In ExecuteSQL(): sqlite3_prepare(update cortina3d set z_gronda
> = ST_Max
> Z(geometry)):
> no such function: ST_MaxZ
>
>> In alternativa si puo' fare anche nella SpatiaLite GUI.
Mi correggo ancora: con GDAL 1.11.0 via OSGeo4W si puo' fare, visto che
qui la versione di SpatiaLite e' la 4.1.1 (dove ST_MaxZ e' supportata):
>ogrinfo cortina3d.shp -dialect SQLite -sql
"SELECT spatialite_version()"
INFO: Open of `cortina3d.shp'
using driver `ESRI Shapefile' successful.
Layer name: SELECT
Geometry: None
Feature Count: 1
Layer SRS WKT:
(unknown)
spatialite_version(): String (0.0)
OGRFeature(SELECT):0
spatialite_version() (String) = 4.1.1
Ieri ci avevo provato con la stessa versione di GDAL "standalone"
(www.gisinternals.com). Evidentemente la copia che ho installato e'
stata compilata con il vecchio SpatiaLite 3.0.
ciao
Antonio
--
Antonio Falciano
http://www.linkedin.com/in/antoniofalciano_______________________________________________
[hidden email]
http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfossQuesta 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+40 iscritti al 5.6.2014
|
|