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…
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.
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:
guck in die Fehlerkonsole, ob da Fehler angezeigt werden.
entferne nacheinander andere Layer, bis Du den Schuldigen erwischst.
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
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>