[Gfoss] Il WFS del GPN genera GML errati?

Salve a tutti,
avendo necessità di scaricare alcuni dati dal GPN ho sviluppato un processo
in Python apposito usando OWSLib e GeoPandas.

L'url da cui voglio scaricare i dati è questa: '
http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/wfs/Alluvioni_Estensione.map
che corrisponde a questo dato: *Alluvioni - Estensione dell'area allagabile
(PGRA 2021)*.

import geopandas as gpd

from owslib.wfs import WebFeatureService

wfs_service = WebFeatureService(url="

http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/wfs/Alluvioni_Estensione.map",
version="1.1.0")
response = wfs_service.getfeature(typename="ITH2018_Estensione_HPH")
gml = open('wfs_data.gml', 'wb')
gml.write(bytes(response.read()))
gml.close()

Riesco a scaricare un GML senza problemi, ma i primi dubbi li ho aprendo il
file con QGIS perchè i dati risultano ruotati e traslati rispetto a ciò che
vedo consultando direttamente il WFS con QGIS stesso.

Provando ad aprire il file con GeoPandas '*gdf =
gpd.read_file('wfs_data.gml', driver='GML', layer='ITH2018_Estensione_HPH')*'
ottengo il seguente errore:

/home/max/.cache/pypoetry/virtualenvs/drakonotebook-Mbf4coiv-py3.8/lib/python3.8/site-packages/geopandas/io/file.py:238:

in _read_file columns = list(features.schema["properties"])
/home/max/.cache/pypoetry/virtualenvs/drakonotebook-Mbf4coiv-py3.8/lib/python3.8/site-packages/fiona/collection.py:208:
in schema self._schema = self.session.get_schema() fiona/ogrext.pyx:719: in
fiona.ogrext.Session.get_schema ???

??? E fiona.errors.UnsupportedGeometryTypeError: 10

fiona/_geometry.pyx:81: UnsupportedGeometryTypeError

Con il dubbio di aver sbagliato qualcosa ho usato un layer dal mio
Geoserver:

wfs_service = WebFeatureService(url="

https://geoserver.massimilianomoraca.me/geoserver/MassimilianoMoraca/wfs",
version="2.0.0")
response =
wfs_service.getfeature(typename="MassimilianoMoraca:attentionpoints")

Il risultato è che vedo correttamente posizionato il GML aperto con QGIS e
non ho problemi con GeoPandas.

Secondo voi da cosa può dipendere il problema? Mi è sfuggito qualcosa? E'
un problema del GPN?

*ing.Massimiliano Moraca*
*Analisi, progettazione e sviluppo di soluzioni GIS e WebGIS*
*P.IVA*: 08700081212
*CELL*: 333 59 49 583 (*lun - ven 9.00 - 18.00*)
*WEB*: www.massimilianomoraca.it <https://massimilianomoraca.it/&gt;
* Attività svolta ai sensi della Legge 4 del 14 gennaio 2013, art.1*

Devi invertire gli assi: è un problema legato alla versione del protocollo.
Risolvi la questione con shapely
Ad esempio puoi usare questa funzione sulla colonna della geometria
del tuo geodataframe

def swapxy(geometry):
  geometry = shapely.ops.transform(lambda x, y: (y, x),geometry)
  return geometry

Qui trovi dove una spiegazione molto base per gli studenti del mio corso
https://napo.github.io/geospatial_course_unitn/lessons/03-retrieving_data_from_sdi#wfs

--
--
Le informazioni contenute nella presente comunicazione sono di natura
privata e come tali sono da considerarsi riservate ed indirizzate
esclusivamente ai destinatari indicati e per le finalità strettamente
legate al relativo contenuto. Se avete ricevuto questo messaggio per
errore, vi preghiamo di eliminarlo e di inviare una comunicazione
all’indirizzo e-mail del mittente.

--
The information transmitted is
intended only for the person or entity to which it is addressed and may
contain confidential and/or privileged material. If you received this in
error, please contact the sender and delete the material.

Ti ringrazio per la risposta Maurizio,
il problema è che non riesco proprio a leggere con Geopandas quel dato.

wfs_service = WebFeatureService(url="

http://wms.pcn.minambiente.it/ogc?map=/ms_ogc/wfs/Alluvioni_Estensione.map&quot;,
version="1.1.0")
response = wfs_service.getfeature(typename="ITH2018_Estensione_HPH")
gdf = gpd.read_file(response)
print(gpd)

Seguendo le indicazioni al link, dopo aver passato il *response* a
Geopandas usi Shapely per invertire gli assi, ma l'errore(
*UnsupportedGeometryTypeError*) mi compare proprio quando passo il
*response* a Geopandas.

*ing.Massimiliano Moraca*
*Analisi, progettazione e sviluppo di soluzioni GIS e WebGIS*
*P.IVA*: 08700081212
*CELL*: 333 59 49 583 (*lun - ven 9.00 - 18.00*)
*WEB*: www.massimilianomoraca.it <https://massimilianomoraca.it/&gt;
* Attività svolta ai sensi della Legge 4 del 14 gennaio 2013, art.1*

Il giorno mar 1 feb 2022 alle ore 13:59 Maurizio Napolitano <napo@fbk.eu>
ha scritto:

Devi invertire gli assi: è un problema legato alla versione del protocollo.
Risolvi la questione con shapely
Ad esempio puoi usare questa funzione sulla colonna della geometria
del tuo geodataframe

def swapxy(geometry):
  geometry = shapely.ops.transform(lambda x, y: (y, x),geometry)
  return geometry

Qui trovi dove una spiegazione molto base per gli studenti del mio corso

https://napo.github.io/geospatial_course_unitn/lessons/03-retrieving_data_from_sdi#wfs

--
--
Le informazioni contenute nella presente comunicazione sono di natura
privata e come tali sono da considerarsi riservate ed indirizzate
esclusivamente ai destinatari indicati e per le finalità strettamente
legate al relativo contenuto. Se avete ricevuto questo messaggio per
errore, vi preghiamo di eliminarlo e di inviare una comunicazione
all’indirizzo e-mail del mittente.

--
The information transmitted is
intended only for the person or entity to which it is addressed and may
contain confidential and/or privileged material. If you received this in
error, please contact the sender and delete the material.

Ho dato un'occhiata.
Secondo me il problema è in fiona ( = le librerie con cui geopandas
legge i formati di dati).
Salvando la response del wfs su file system si ottiene un GML.
GML che apri con QGIS, ma che non apri con fiona (e di conseguenza con
geopandas).
Lo stesso GML però lo apri via python usando il binding alle GDAL/OGR
Pertanto mi viene da suggerirti di usare i binding python di ogr per
leggere dal WFS, salvare nel formato che vuoi e ricaricare in
geopandas.
Nel frattempo vedere se su fiona hanno risolto il bug.

--
--
Le informazioni contenute nella presente comunicazione sono di natura
privata e come tali sono da considerarsi riservate ed indirizzate
esclusivamente ai destinatari indicati e per le finalità strettamente
legate al relativo contenuto. Se avete ricevuto questo messaggio per
errore, vi preghiamo di eliminarlo e di inviare una comunicazione
all’indirizzo e-mail del mittente.

--
The information transmitted is
intended only for the person or entity to which it is addressed and may
contain confidential and/or privileged material. If you received this in
error, please contact the sender and delete the material.

Mi conforta il fatto che il problema non compare solo a me :slight_smile:
Grazie per le indicazioni, appena posso darò un occhiata a fiona

*ing.Massimiliano Moraca*
*Analisi, progettazione e sviluppo di soluzioni GIS e WebGIS*
*P.IVA*: 08700081212
*CELL*: 333 59 49 583 (*lun - ven 9.00 - 18.00*)
*WEB*: www.massimilianomoraca.it <https://massimilianomoraca.it/&gt;
* Attività svolta ai sensi della Legge 4 del 14 gennaio 2013, art.1*

Il giorno mar 1 feb 2022 alle ore 16:01 Maurizio Napolitano <napo@fbk.eu>
ha scritto:

Ho dato un'occhiata.
Secondo me il problema è in fiona ( = le librerie con cui geopandas
legge i formati di dati).
Salvando la response del wfs su file system si ottiene un GML.
GML che apri con QGIS, ma che non apri con fiona (e di conseguenza con
geopandas).
Lo stesso GML però lo apri via python usando il binding alle GDAL/OGR
Pertanto mi viene da suggerirti di usare i binding python di ogr per
leggere dal WFS, salvare nel formato che vuoi e ricaricare in
geopandas.
Nel frattempo vedere se su fiona hanno risolto il bug.

--
--
Le informazioni contenute nella presente comunicazione sono di natura
privata e come tali sono da considerarsi riservate ed indirizzate
esclusivamente ai destinatari indicati e per le finalità strettamente
legate al relativo contenuto. Se avete ricevuto questo messaggio per
errore, vi preghiamo di eliminarlo e di inviare una comunicazione
all’indirizzo e-mail del mittente.

--
The information transmitted is
intended only for the person or entity to which it is addressed and may
contain confidential and/or privileged material. If you received this in
error, please contact the sender and delete the material.