[Gfoss] wfs OpenLayers - Damiano Natali

Ciao a tutti,

sapete dove posso trovare qualche esempio della sintassi necessaria per aggiungere un layer wfs ad una mappa creata con OpenLayers (direi OpenLayers.Layer.WFS)?
dalla sezione “esempi” del sito di OpenLayers non sono riuscito ad accedere agli scripts sorgenti…

grazie mille,
Damiano Natali

Damiano Natali
mail damiano.natali@gmail.com
skype damiano.natali

dalla sezione "esempi" del sito di OpenLayers non sono riuscito ad accedere
agli scripts sorgenti...

http://openlayers.org/dev/examples/wfs-protocol-transactions.html
in generale scegli gli esempi della versione di sviluppo, nella
searchbox a sinistra scrivi wfs per filtrare gli esempi che ti
interessano, scegline uno e con il tasto destro "view frame source".
questo con chrome, con firefox dovrebbe essere simile, con ie....
chissenefrega di ie :slight_smile:

Ciao a tutti!

Innanzitutto grazie a Stefano e Guido per le rapide risposte.

Sono riuscito a visualizzare il codice sorgente degli esempi di OpenLayers, tuttavia il mio livello vettoriale non si vede ancora (sebbene nel layertree compaia, che è già qualcosa!). In particolare faccio riferimento all’esempio di Stefano, che mi è sembrato il più calzante: questo è il mio codice

var stazioni_rdn = new OpenLayers.Layer.Vector(“stazioni_rdn”, {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.WFS({
url: “http://localhost:8080/geoserver/wfs/”,
featureType: “stazioni_rdn”,
featureNS: “http://www.openplans.org/topp/
})
});

map.addLayer(stazioni_rdn);

la cui mappa è definita come

var map = new OpenLayers.Map(‘map’, {controls:[
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.LayerSwitcher({‘ascending’:false}),
new OpenLayers.Control.ScaleLine({bottomOutUnits:‘’,bottomInUnits:‘’,maxWidth:300}),
new OpenLayers.Control.OverviewMap({
autoPan:true,
size: new OpenLayers.Size(250, 120),
maxRatio:40,
minRatio:15,
minRectSize:17}),
new OpenLayers.Control.KeyboardDefaults()],
projection: new OpenLayers.Projection(“EPSG:900913”),
displayProjection: new OpenLayers.Projection(“EPSG:4326”),
maxExtent:bounds,
maxResolution:10,
minResolution:1,
numZoomLevels:6
});

ma nonostante ciò non si vede nulla…sapete mica darmi qualche indicazione? in particolare sapete dirmi dove trovare indicazioni su cosa definiscano i parametri del constructor OpenLayers.Layer.Vector

  • strategies
  • protocol (compreso featureNS)?

perchè sulla documentazioe di OpenLayers non sono riuscito a trovare molto!

grazie ancora,
Damiano

Damiano Natali
mail damiano.natali@gmail.com
skype damiano.natali

Sono riuscito a visualizzare il codice sorgente degli esempi di OpenLayers,
tuttavia il mio livello vettoriale non si vede ancora (sebbene nel layertree
compaia, che è già qualcosa!).

a naso direi che è un problema di proxy:
http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost

le richieste WFS, come tutte le richieste dati, non possono essere
crossdomain, ovvero per farla breve se chiedi i dati a geoserver
all'indirizzo "localhost:8080", necessariamene la tua pagina deve
essere pubblicata da quel dominio e porta.
prova a far pubblicare la pagina da geoserver (magari piazzala dentro
webapps\geoserver\sample) e vedi se funziona.
in ogni caso se l'errore è questo, la console di firebug ti
mostrerebbe l'errore...

le richieste WFS, come tutte le richieste dati, non possono essere
crossdomain, ovvero per farla breve se chiedi i dati a geoserver
all'indirizzo "localhost:8080", necessariamene la tua pagina deve
essere pubblicata da quel dominio e porta.
prova a far pubblicare la pagina da geoserver (magari piazzala dentro
webapps\geoserver\sample) e vedi se funziona.
in ogni caso se l'errore è questo, la console di firebug ti
mostrerebbe l'errore...

questo purtroppo non è vero, quasi tutti i browser si limitano ad
ignorare la richiesta (o comunque firebug a me non mostrava niente).
Comunque copio e incollo dalle FAQ di OL:

Q: Why isn't WFS working on my local checkout of OpenLayers?

A: This is probably because you do not have a proxy host set up. See
FrequentlyAskedQuestions#ProxyHost

Q: I'm trying to use WFS, why won't my vector data show up?

A: Try not setting the featureClass property when declaring your WFS layer.

Q: Why do I need a ProxyHost?

A: Due to security restrictions in Javascript, it is not possible to
retrieve information from remote domains via an XMLHttpRequest.
Classes like WFS and GeoRSS use XMLHTTPRequest to get their data. If
they are querying a remote server (anything other than the machine
hosting your page), you must install a proxy script somewhere web
accessible on that machine. See below for how to set up your own
ProxyHost.
If the OpenLayers.ProxyHost variable is not set to a valid proxy host,
requests are sent directly to the remote servers. In most cases, the
result will be a security exception, although this exception often
occurs silently.

Q: How do I set up a ProxyHost?

An example proxy host script is available here:
trunk/openlayers/examples/proxy.cgi
For the standard Apache configuration, you would place proxy.cgi into
your /usr/lib/cgi-bin/ directory.
Once a proxy host script has been installed, you must then edit the
OpenLayers.ProxyHost variable to match that URL.
Given the above standard Apache configuration:

    OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";

If you have done something like this, you should be able to visit:

     http://YourDomain.example.com/cgi-bin/proxy.cgi

The resulting content at that page should be the openlayers.org website.

If you get a 404 error instead, either the proxy script is not in the
right location, or your webserver is not configured correctly.

Ciao a tutti,

grazie nuovamente a Guido per l’aiuto, purtroppo ancora niente:(…

Dunque quello che ho fatto è stato:

  • installare lo script “proxy.cgi” nella cartella dei cgi-bin: se poi mi collego a http://localhost/cgi-bin/proxy.cgi vedo la home page di OpenLayers, anche se sformattata e non vedo alcune cose come la mappa del mondo (potrebbe essere un problema?)

  • copiare la mia pagina all’interno di geoserver (/home/damiano/sito/geoserver/webapps/geoserver/samples/rdn)

ma ancora niente, quando vado alla pagina http://localhost:8080/geoserver/samples/rdn/mappa.php ottengo tutti gli altri layer meno il vettoriale che mi interessa, definito così:

var stazioni_rdn = new OpenLayers.Layer.Vector(“stazioni_rdn”, {
strategies: [new OpenLayers.Strategy.BBOX()],
protocol: new OpenLayers.Protocol.WFS({
url: “http://localhost:8080/geoserver/wfs/”,
featureType: “stazioni_rdn”,
featureNS: “http://www.openplans.org/topp/
})
});

Se può aiutare, per prova sono andato alla pagina http://localhost:8080/geoserver/wfs/ e quello che ho ottenuto è stato il seguente messaggio:

<ows:ExceptionReport version=“1.0.0” xsi:schemaLocation=“http://www.opengis.net/ows http://localhost:8080/geoserver/schemas/ows/1.0.0/owsExceptionReport.xsd”>

<ows:Exception exceptionCode=“MissingParameterValue” locator=“request”>

ows:ExceptionText
Could not determine geoserver request from http request GET /geoserver/wfs/ HTTP/1.1
Host: localhost:8080

User-Agent: Mozilla/5.0 (X11; U; Linux i686; it; rv:1.9.2.13) Gecko/20101206 Ubuntu/10.04 (lucid) Firefox/3.6.13

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3

Accept-Encoding: gzip,deflate

Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 115

Connection: keep-alive

Cookie: JSESSIONID=um4sfkhm4swh

</ows:ExceptionText>
</ows:Exception>
</ows:ExceptionReport>

Mentre collegandomi alla pagina

http://localhost:8080/geoserver/wms?service=WMS&version=1.1.0&request=GetMap&layers=cite:stazioni_rdn&styles=&bbox=770394.328,4234504.102,2604289.431,6300983.125&width=454&height=512&srs=EPSG:900913&format=application/openlayers

posso vedere ed interrogare correttamente la mappa.

Qualcuno saprebbe mica darmi un consiglio sul da farsi?

grazie ancora,
Damiano

Il giorno 18 febbraio 2011 18:27, Diego Guidi <diegoguidi@gmail.com> ha scritto:

Sono riuscito a visualizzare il codice sorgente degli esempi di OpenLayers,
tuttavia il mio livello vettoriale non si vede ancora (sebbene nel layertree
compaia, che è già qualcosa!).

a naso direi che è un problema di proxy:
http://trac.osgeo.org/openlayers/wiki/FrequentlyAskedQuestions#ProxyHost

le richieste WFS, come tutte le richieste dati, non possono essere
crossdomain, ovvero per farla breve se chiedi i dati a geoserver
all’indirizzo “localhost:8080”, necessariamene la tua pagina deve
essere pubblicata da quel dominio e porta.
prova a far pubblicare la pagina da geoserver (magari piazzala dentro
webapps\geoserver\sample) e vedi se funziona.
in ogni caso se l’errore è questo, la console di firebug ti
mostrerebbe l’errore…

Damiano Natali
mail damiano.natali@gmail.com
skype damiano.natali

Se può aiutare, per prova sono andato alla pagina
http://localhost:8080/geoserver/wfs/ e quello che ho ottenuto è stato il
seguente messaggio:

prova ad andare nella home del tuo openlayers, nella sezione
layers/preview dovresti vedere i tuoi layers, compreso quello che vuoi
pubblicare come WFS. Di fianco c'è una label che ti permette di fare
richieste sia di tipo WMS che WFS, in modo da poter essere sicuro che
il layer in WFS funzioni (e che magari non ci sia un errore di dati o
di altri tipo).