Alcuni server WMS supportano le query tramite la richieste di tipo GetFeatureinfo.
La query viene eseguita rispetto al punto (X, Y), che sono le coordinate in pixel della mappa nelle dimensioni e bounding box specificate. La query viene fatta nel dintorno del punto, con la tolleranza indicata nel mapfile.
Il risultato può essere composto in formato testo, http oppure GML. Noi proveremo con quest'ultimo.
Con MapServer è necessario configurare alcuni parametri nel mapfile. Nel nostro caso aggiungiamo la complicazione dovuta al fatto che il layer è in un sistema di riferimento (EPSG:3003) diverso da quello che useremo nella query (EPSG:4326).
LAYER NAME "entita_lineari" DATA "275040el" STATUS ON TYPE LINE TEMPLATE "void" TOLERANCEUNITS pixels TOLERANCE 10 DUMP TRUE PROJECTION "+init=epsg:3003 +towgs84=-104.1,-49.1,-9.9,0.971,-2.917,0.714,-11.68" END METADATA "wms_title" "Entità lineari" "wms_srs" "EPSG:4326" "gml_include_items" "all" #"wms_include_items" "all" END END
Se il client effettua richieste in formato text/plain (non GML), pare che per ottenere risposta sia necessario il parametro wms_include_items
.
La richiesta WMS assume la seguente forma:
http://localhost/cgi-bin/mapserv?map=/var/www/wms_query.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetFeatureinfo&SRS=EPSG:4326&BBOX=11.16398206,43.74906364,11.33432601,43.79898334&LAYERS=entita_lineari&QUERY_LAYERS=entita_lineari&FEATURE_COUNT=100&X=150&Y=100&WIDTH=1024&HEIGHT=480&INFO_FORMAT=gml
Questi i parametri utilizzati:
SERVICE=WMS VERSION=1.1.1 REQUEST=GetFeatureinfo SRS=EPSG:4326 BBOX=11.16398206,43.74906364,11.33432601,43.79898334 LAYERS=entita_lineari QUERY_LAYERS=entita_lineari FEATURE_COUNT=100 X=150 Y=100 WIDTH=1024 HEIGHT=480 INFO_FORMAT=gml
Attenzione: il numero di feature (oggetti) ritornati dipende dalla dimensione del dintorno del punto (la TOLERANCE
del mapfile) e dal parametro FEATURE_COUNT
(numero massimo di feature ritornati) della query.
Il risultato è qualcosa del tipo:
<?xml version="1.0" encoding="UTF-8"?> <msGMLOutput xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <entita_lineari_layer> <entita_lineari_feature> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>11.173595,43.788665 11.197719,43.790197</gml:coordinates> </gml:Box> </gml:boundedBy> <FOGLIO>275030</FOGLIO> <CODICE>0301</CODICE> <RECORD>150872</RECORD> <IDENTIF></IDENTIF> </entita_lineari_feature> <entita_lineari_feature> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>11.180460,43.788754 11.189372,43.789513</gml:coordinates> </gml:Box> </gml:boundedBy> <FOGLIO>275030</FOGLIO> <CODICE>0102</CODICE> <RECORD>151559</RECORD> <IDENTIF></IDENTIF> </entita_lineari_feature> </entita_lineari_layer> </msGMLOutput>
In modo analogo si possono effettuare query su layer raster, questo un esempio di risultato:
<?xml version="1.0" encoding="ISO-8859-1"?> <msGMLOutput xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ctr25k_layer> <ctr25k_feature> <gml:boundedBy> <gml:Box srsName="EPSG:3003"> <gml:coordinates>1681609.346909,4707664.375214 1681609.346909,4707664.375214</gml:coordinates> </gml:Box> </gml:boundedBy> <x>1681609.3</x> <y>4707664.4</y> <value_0>0</value_0> <value_list>0</value_list> <red>255</red> <green>255</green> <blue>255</blue> </ctr25k_feature> </ctr25k_layer> </msGMLOutput>
Questo il risultato di una query su un layer TIFF di tipo Int16, il colore (red, green, blue) deriva da una classificazione:
<?xml version="1.0" encoding="ISO-8859-1"?> <msGMLOutput xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <rainfall_layer> <rainfall_feature> <gml:boundedBy> <gml:Box srsName="EPSG:4326"> <gml:coordinates>-1.000000,-1.000000 -1.000000,-1.000000</gml:coordinates> </gml:Box> </gml:boundedBy> <x>0.2503605</x> <y>44.916937</y> <value_0>902</value_0> <value_list>902</value_list> <class>5</class> <red>247</red> <green>6</green> <blue>123</blue> </rainfall_feature> </rainfall_layer> </msGMLOutput>