openlayers bbox problem

Hallo Zusammen… :slight_smile:

ich habe ein kleines Problem mit der bbox methode von openlayers.
Ganz kurz, ich lade marker aus einer eigenen Datenbank, diese werden dann auf der Karte dargestellt.
Soweit so gut. Das ganze funktioniert auch, nur leider immer nur dann wenn man die Karte zoomt.
Beim reinen verschieben der Karte wird der Request überhaupt nicht ausgeführt.

Hier mein Code (Nur der BBOX abschnitt):


 var layer = new OpenLayers.Layer.Vector( "Unternehmen",
                    {projection: new OpenLayers.Projection("EPSG:4326"),
					strategies: [new OpenLayers.Strategy.BBOX({resFactor: 1})],
                      protocol: new OpenLayers.Protocol.HTTP({
                        url: "./getpois.php",
                        format: new OpenLayers.Format.Text()
                      }),
                      projection: map.displayProjection
                    });
					 map.addLayer(layer);
					
					 layer.setVisibility(true);
					  map.zoomToMaxExtent();


Wie gesagt beim Zoomen klappt es, beim Verschieben nicht!

Woran kann es liegen, ich suche schon seit 2 Tage und finde das Problem nicht.
Falls der ganze Code gebraucht wird, poste ich auch den.
Danke für eure Hilfe…

Grüßle Ronny

Ich habe gerade ein deja vu, genau das gleiche Problem hatte ich bei http://osmlabs.square7.de/OSMAddressCorrector/ auch.

Soweit ich mich erinnere, ändere mal

OpenLayers.Strategy.BBOX({resFactor: 1})]

auf resFactor: 0.5

Alles ohne Gewähr;)

nee genau da ist es auch … mit Gewähr :slight_smile:

Ein Blick in die Anleitung hätte genügt für den TE :slight_smile:

http://dev.openlayers.org/docs/files/OpenLayers/Strategy/BBOX-js.html

**If you set a resFactor of 1, data will be requested every time the resolution changes. **

Danke, aber leider ändert sich nichts. Nur beim Zoomen wird der Request ausgeführt… :rage:

Grüßle

kann ich mir gar nicht vorstellen, ich verwende BBOX in vielen Projekten, lass resFactor einfach mal weg

strategies: [new OpenLayers.Strategy.BBOX()]

Wenn ich ResFactor ganz weglasse, gibt es gar keinen Request, nur bei erstmaligen Laden der Seite, ich versteh die Welt nicht mehr :frowning:

Nahmd,

Das ist missverständlich formuliert.

Der default für resFactor ist 2; dieser Wert bewirkt, dass nur bei Auflösungsänderung um den Faktor mindestens 2 (oder 1/2) nachgeladen wird. Das ist sinnvoll für Kartenanwendungen mit stufenloser Vergrößerung.

resFactor=1 führt dazu, das unabhängig von Auflösungs- (aka: zoom-) -Änderungen nachgeladen wird.

Gruß Wolf

Nahmd,

Der Code ist in Ordnung.

In den Optionen zum Vector-Constructor ist der Parameter “projection” zweimal angegeben. Das ist verwirrend und Du solltest das korrigieren, aber es ist nicht der Grund für das Problem.

Möglicherweise geht das “moveend”-Event in einem anderen Layer verloren und erreicht dann nicht mehr diesen Layer. Deshalb:

  1. guck in die Fehlerkonsole, ob da Fehler angezeigt werden.
  2. entferne nacheinander andere Layer, bis Du den Schuldigen erwischst.

Gruß Wolf

Ich habe jetzt mal vieles probiert und das ergebnis gleich null, ich poste jetzt mal dem Code in der Hoffnung das ihr den fehler findet, ich bin wahrscheinlich zu doof :frowning:
In der Fehlerkonsole werden keine Fehler angezeigt!


<script type="text/javascript">

function jumpTo(lon, lat, zoom) {
    var x = Lon2Merc(lon);
    var y = Lat2Merc(lat);
    map.setCenter(new OpenLayers.LonLat(x, y), zoom);
    return false;
}
 
function Lon2Merc(lon) {
    return 20037508.34 * lon / 180;
}
 
function Lat2Merc(lat) {
    var PI = 3.14159265358979323846;
    lat = Math.log(Math.tan( (90 + lat) * PI / 360)) / (PI / 180);
    return 20037508.34 * lat / 180;
}

var map;


function drawmap() {
    OpenLayers.Lang.setCode('de');
    
    map = new OpenLayers.Map('map', {
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326"),
        controls: [
		
		new OpenLayers.Control.MouseDefaults(),
		
		new OpenLayers.Control.Attribution()],
		
	
		
        maxExtent:
            new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34, 20037508.34),
	
        numZoomLevels: 18,
        maxResolution: 156543,
        units: 'meters'
    });


map.addControl(new OpenLayers.Control.ScaleLine());
var layer_overviewmap = new OpenLayers.Layer.OSM.Mapnik("Mapnik");

map.addControl(new OpenLayers.Control.PanZoomBar());




// Position und Zoomstufe der Karte

lon = 9.638823866844177
lat = 51.406629946873174
zoom = 16



layers = new Array();
layer_layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
map.addLayer(layer_layerMapnik)
layers.push(new Array(layer_layerMapnik,'layer_layerMapnik'));
setLayer(0);


  var layer = new OpenLayers.Layer.Vector( "Unternehmen",
                    {projection: new OpenLayers.Projection("EPSG:4326"),
					strategies: [new OpenLayers.Strategy.BBOX({resFactor: 0.5})],
                      protocol: new OpenLayers.Protocol.HTTP({
                        url: "./getpois.php",
                        format: new OpenLayers.Format.Text()
                      }),
                      //projection: map.displayProjection
                    });
					 map.addLayer(layer);
					
					 layer.setVisibility(true);
					  map.zoomToMaxExtent();
	
// Nochmal was..
jumpTo(lon, lat, zoom);


checkUtilVersion(4);

}	

    </script>

Nahmd,

Nimm mal das OpenLayers.Control.Navigation() Control in die controls auf:


controls: 
        new OpenLayers.Control.MouseDefaults(),
        new OpenLayers.Control.Navigation(),
        new OpenLayers.Control.Attribution()
],

Das ist für das Handling der Kartenverschiebe-Events zuständig.

Gruß Wolf

DANKE :smiley:

genau das war der Fehler glücklich guck

Grüßle Ronny