[Gfoss] Salve a tutti e domanda su WFS

Salve a tutti,

mi sono iscritto su consiglio di un mio amico a GFOSS per porvi una questione.
E' possibile effettuare una richiesta WFS per ottenere attributi su un punto di 2 layer in contemporanea?
Prima facevo due richieste WFS, uno per ogni layer, ma penso che sia meglio "unirli" in una sola richiesta.

Luca Manganelli ha scritto:

Salve a tutti,

mi sono iscritto su consiglio di un mio amico a GFOSS per porvi una questione.
E' possibile effettuare una richiesta WFS per ottenere attributi su un punto di 2 layer in contemporanea?
Prima facevo due richieste WFS, uno per ogni layer, ma penso che sia meglio "unirli" in una sola richiesta.

Si, l'elenco dei tipi è una lista separata da virgola, se stai usando
la forma GET, altrimenti puoi scrivere più Query element nella versione
POST di GetFeature.

Questo è uno degli esempi di Geoserver, oltre all'elenco layer
ha anche un filtro OGC (specificato in XML quindi, anche se
da poco tempo supportimao una forma più leggibile, il CQL).

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states,tiger:tiger_roads&outputFormat=GML2&FILTER=(<Filter><FeatureId%20fid="states.3"/></Filter>)(<Filter><FeatureId%20fid="tiger_roads.3"/></Filter>)

Ciao
Andrea

Andrea Aime wrote:

Si, l'elenco dei tipi è una lista separata da virgola, se stai usando
la forma GET, altrimenti puoi scrivere più Query element nella versione
POST di GetFeature.

Questo è uno degli esempi di Geoserver, oltre all'elenco layer
ha anche un filtro OGC (specificato in XML quindi, anche se
da poco tempo supportimao una forma più leggibile, il CQL).

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states,tiger:tiger_roads&outputFormat=GML2&FILTER=(<Filter><FeatureId%20fid="states.3"/></Filter>)(<Filter><FeatureId%20fid="tiger_roads.3"/></Filter>)

Ciao
Andrea
  

Ho un qualche problemino con la query WFS.

Divido l'url in più parti:

1. http://mioserver:8080/cgi-bin/mapserv.exe?MAP=/ms4w/apps/comune-tn/prg.map&request=getfeature&service=wfs&version=1.0.0&typename=
2. zone,frs <------- i 2 layers
3. &filter=<ogc:Filter><ogc:BBOX><ogc:PropertyName>zone</ogc:PropertyName><gml:Box srsName=\"http://www.opengis.net/gml/srs/epsg.xml\\&quot;&gt;&lt;gml:coordinates&gt;&quot;\+X\+&quot;,&quot;\+Y\+&quot; "+X+","+Y+"</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>

in pratica l'url risultante sono le stringhe 1+2+3 (nella 3a stringa ci metto le coordiante X e Y, che sono due coppie identiche perché è un punto).
C'è quel <ogc:PropertyName>zone</ogc:PropertyName> che però fa riferimento ad un attributo esistente solo nel layer zone, come faccio per l'altro layer frs?

Luca Manganelli ha scritto:

Andrea Aime wrote:

Si, l'elenco dei tipi è una lista separata da virgola, se stai usando
la forma GET, altrimenti puoi scrivere più Query element nella versione
POST di GetFeature.

Questo è uno degli esempi di Geoserver, oltre all'elenco layer
ha anche un filtro OGC (specificato in XML quindi, anche se
da poco tempo supportimao una forma più leggibile, il CQL).

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states,tiger:tiger_roads&outputFormat=GML2&FILTER=(<Filter><FeatureId%20fid="states.3"/></Filter>)(<Filter><FeatureId%20fid="tiger_roads.3"/></Filter>)

Ciao
Andrea
  

Ho un qualche problemino con la query WFS.

Divido l'url in più parti:

1. http://mioserver:8080/cgi-bin/mapserv.exe?MAP=/ms4w/apps/comune-tn/prg.map&request=getfeature&service=wfs&version=1.0.0&typename=
2. zone,frs <------- i 2 layers
3. &filter=<ogc:Filter><ogc:BBOX><ogc:PropertyName>zone</ogc:PropertyName><gml:Box srsName=\"http://www.opengis.net/gml/srs/epsg.xml\\&quot;&gt;&lt;gml:coordinates&gt;&quot;\+X\+&quot;,&quot;\+Y\+&quot; "+X+","+Y+"</gml:coordinates></gml:Box></ogc:BBOX></ogc:Filter>

in pratica l'url risultante sono le stringhe 1+2+3 (nella 3a stringa ci metto le coordiante X e Y, che sono due coppie identiche perché è un punto).
C'è quel <ogc:PropertyName>zone</ogc:PropertyName> che però fa riferimento ad un attributo esistente solo nel layer zone, come faccio per l'altro layer frs?

Eh, se vuoi usare la versione GET della richiesta, puoi risolvere questo caso in particolare usando BBOX invece che FILTER. Con un filtro OGC,
dovresti mettere in or due <ogc:bbox>, in modo da filtrare su due attributi distinti. A seconda del layer, fallisce un filtro ma non l'altro.

In ogni caso, ecco un esempio di uso del parametro BBOX dai sample di Geoserver:

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states&propertyName=STATE_NAME,PERSONS&BBOX=-75.102613,40.212597,-72.361859,41.512517

Ciao
Andrea

Andrea Aime wrote:

Eh, se vuoi usare la versione GET della richiesta, puoi risolvere questo caso in particolare usando BBOX invece che FILTER. Con un filtro OGC,
dovresti mettere in or due <ogc:bbox>, in modo da filtrare su due attributi distinti. A seconda del layer, fallisce un filtro ma non l'altro.

In ogni caso, ecco un esempio di uso del parametro BBOX dai sample di Geoserver:

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states&propertyName=STATE_NAME,PERSONS&BBOX=-75.102613,40.212597,-72.361859,41.512517
  

Grazie, funziona! :slight_smile:

Andrea Aime wrote:

Eh, se vuoi usare la versione GET della richiesta, puoi risolvere questo caso in particolare usando BBOX invece che FILTER. Con un filtro OGC,
dovresti mettere in or due <ogc:bbox>, in modo da filtrare su due attributi distinti. A seconda del layer, fallisce un filtro ma non l'altro.

In ogni caso, ecco un esempio di uso del parametro BBOX dai sample di Geoserver:

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states&propertyName=STATE_NAME,PERSONS&BBOX=-75.102613,40.212597,-72.361859,41.512517
  

Avrei un'altra domanda da farti: ho visto che nelle specifiche WFS è possibile indicare il tipo dell'output della risposta WFS (XML, testo, etc), anche se non ho capito come. Tu lo sai?

Grazie

Luca Manganelli ha scritto:

Andrea Aime wrote:

Eh, se vuoi usare la versione GET della richiesta, puoi risolvere questo caso in particolare usando BBOX invece che FILTER. Con un filtro OGC,
dovresti mettere in or due <ogc:bbox>, in modo da filtrare su due attributi distinti. A seconda del layer, fallisce un filtro ma non l'altro.

In ogni caso, ecco un esempio di uso del parametro BBOX dai sample di Geoserver:

http://localhost:8080/geoserver/wfs?request=GetFeature&typeName=topp:states&propertyName=STATE_NAME,PERSONS&BBOX=-75.102613,40.212597,-72.361859,41.512517
  

Avrei un'altra domanda da farti: ho visto che nelle specifiche WFS è possibile indicare il tipo dell'output della risposta WFS (XML, testo, etc), anche se non ho capito come. Tu lo sai?

OutputFormat=xxx, dove xxx è uno dei formati supportati dal server, che
puoi trovare nelle WFS Capabilities del server. Ad esempio, in Geoserver
supportiamo GML2, GML2-ZIP e SHAPE-ZIP (ovvero, uno zip con i file che compongono lo shape dentro). Siamo anche in procinto di aggiungere GeoRSS e GeoJSON. MapServer ha OGR dentro, non so se li supporta veramente, ma in teoria potrebbero usare OGR per fargli supportare un mare di output formats.

Ciao
Andrea