[Talk-de] Vector layer mit strategie/protocol.

Florian Lohoff f at zz.de
Mi Sep 22 20:08:19 UTC 2010


On Wed, Sep 22, 2010 at 12:28:43PM -0700, Walter Nordmann wrote:
> hi florian,
> genau an dieser stelle hänge ich fest: 
> 
> Florian Lohoff-2 wrote:
> > 
> > ... Die URL wirft bei strategie/protocol.http natuerlich die default
> > projection des layers mit
> > raus und keinen zoom level. D.h. anstatt
> > /cgi-bin/getdata2?b=51.82844228767418&t=51.84265608515574&l=8.314342412719814&r=8.363180074460946&zoom=15&data=maxspeed
> > 
> > kriege ich ein:
> > /cgi-bin/getdata2?bbox=923809.42114287,6769035.8748913,929246.00477867,6771596.5153383
> > 
> ich hab bei strategie/protocol genau den bbox-url, den ich brauche aber auch
> ohne zoom.
> wenn ich bei
> protocol: new OpenLayers.Protocol.HTTP({
>                                url:          "db/cgi-bin/get_halts.cgi",
>                                format:       new OpenLayers.Format.KML({ 
> ...  }),
>                               params: {
> 				       zoom: map.getZoom()               
> 			       }
>                             }),
> 
> angebe, wird zoom im url ausgegeben aber immer konstant. derzeit 0.

Weil es eben zur initialisierungszeit des Protocol.HTTP evaluiert wird - da ist
map.getZoom = 0 - Danach wird das ja nicht geupdated ...

> "zoom=0&bbox=7.6066452026563,50.01015535104,8.2932907104413,50.274190839642"
> 
> wenn ich map.getZoom() in einem div-feld ausgebe, wird es schön auf dem
> schirm aktualisiert. nur halt nicht beim zugriff auf den server.

Weil es in der URL nicht geupdated wird. Ich habe keinen anderen weg gefunden
als mir eine eigene Strategie zu basteln - Ich meine ich haette die Simple oder BBOX
strategie genommen und einfach den request teil geaendert:

        refresh: function(options) {
                if (this.response) {
                        this.layer.protocol.abort(this.response);
                        this.layer.events.triggerEvent("loadend");
                }
                this.layer.events.triggerEvent("loadstart");
                this.response = this.layer.protocol.read({
                        filter: this.createFilter(),
                        callback: this.update,
                        scope: this,
                        params: { zoom: this.layer.map.getZoom() }
                });
        },

D.h. der evaluiert das bei jedem request und damit ist immer der aktuelle zoom
drin. Ausserdem wollte ich nicht das der code irgendwas cached sondern immer
brav neu requested - weil ich ja potentiell die daten die ich zurueckliefere
aendere ...

Flo
-- 
Florian Lohoff                                                 f at zz.de
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : signature.asc
Dateityp    : application/pgp-signature
Dateigröße  : 827 bytes
Beschreibung: Digital signature
URL         : <http://lists.openstreetmap.org/pipermail/talk-de/attachments/20100922/d95176a8/attachment.sig>


Mehr Informationen über die Mailingliste Talk-de