ich beschäftige mich seit kurzem mit “openstreetmap” und bin jetzt dabei, eine Karte für meine Homepage zusammenzubasteln. Da mit das standard Layout nicht gefällt, habe ich mir die Seite
angeschau. Ich habe dann die Datei “my_panzoombar.js” auf meinen Server in das Unterverzeichnis “openlayers” kopiert. Das ganze funktioniert auch soweit. Aber es gibt zwei Probleme:
Das neue Styling wird quasi über das original Styling rübergelegt d.h. müßte das original Styling gelöscht werden. Ich weiß aber nicht, wie.
Die Zoomleiste wird nicht dargestellt. Wenn ich jedoch die Zeile
entferne, wird eine Zoomleiste dargestellt. Diese ist jedoch dann viel länger als das original. Ich benötige aber die original Größe der Zoomleiste.
Nicht nur “quasi”, sondern Du hast mehrere Controls übereinandergelegt:
map = new OpenLayers.Map("map",
{
maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
numZoomLevels: 19,
maxResolution: 156543.0399,
units: "m",
projection: new OpenLayers.Projection("EPSG:900913"),
displayProjection: new OpenLayers.Projection("EPSG:4326"),
controls: [] <–––––––––––––––––––––––––––––––––––––––––––––––––––––––
});
Bitte füge die markierte Zeile ein. Rufst Du “new OpenLayers.Map()” auf ohne einen Parameter “controls:”, dann werden automatisch folgende vier Controls angelegt:
Möglich ist es. Die korrekte Lösung ist aber, den eingeschränkten Zoombereich an die Layer zu binden. Das Map-Objekt wertet die aus, und der Zoom-Slider übernimmt den Wert aus dem Map-Objekt. Auf diesem Weg ist die Zoomtiefe wirklich beschränkt.
Die Minzoom-Funktion klemmt nur den Slider am Ende der Skala fest. Per Scrollrad oder direktem Aufruf von OL-Funktionen kommt man weiterhin raus.
danke für den link. Habe mal das Beispiel ausprobiert. Das vergrößern der Karte geht hier nur bis zu einem bestimmten Bereich. Was aber gesucht wird ist eine Begrenzung beim verkleinern der Karte. Momentan ist es ja, das sich die Markierung der Zoomleiste bei jedem Klick auf das “-” Zeichen nach unten bewegt. Wenn die Markierung jedoch am Ende der Zoomleiste angekommen ist, kann trotzdem noch weiter verkleinert werden. Und das soll verhindert werden.
Richtig. Der Zoombereich reicht immer von 0 bis zu einer Obergrenze, die vom gerade ausgewählten “Baselayer” bestimmt wird. Die Werte sind im Parameter “numZoomLevels” des jeweiligen Kartenlayers bestimmt.
Die ZoomPanBar passt sich automatisch an das numZoomLevels des aktuellen Baselayers an, insbesondere kann sie beim Wechsel zwischen Kartenlayern die Länge ändern.
Richtig. Das Zoomen an sich ist unverändert.
Die modifizierte PanZoomBar schneidet lediglich am unteren Ende der Skala Stufen ab und klemmt den Slider entsprechend fest: mit dem Slider kann man nicht weiter aus der Karte herauszoomen (einfach weil die Skala vorher endet); mit anderen Controls dagegen schon.
Der Wunsch ist verständlich.
Jedoch ist in der Architektur von OpenLayers ein unteres Limit für den Zoomwert nicht implementiert und auch nicht eingeplant.
Die fehlende Implementierung kann man mit einem kleinen Patch nachholen.
Aber Vorsicht: weil ein unteres Limit für den Zoomwert in der Architektur von OpenLayers nicht eingeplant ist, kommen möglicherweise Komponenten von OL mit dem veränderten Zoomverhalten nicht zurecht. Nur dass mir keine Klagen kommen!
Das originale PanZoomBar auf der Karte mit eingeschränktem Zoombereich passt die Skalenlänge an den konfigurierten maxZoom der Karte an. Der minZoom bleibt unberücksichtigt (weil OL kein minZoom eingeplant hat). Der Slider lässt sich nach unten ziehen, springt aber wieder nach oben.
Ist zwar nicht schön, aber mit zoomOffset + resolutions kann der Zoombereich in beide Richtungen begrenzt werden, siehe Beiträge #8 und #4 aus einer anderen Diskussion.
Damit bei einer Zoomverstellung der Punkt unter der Maus nicht verschoben wird, wird der Mittelpunkt der Karte entsprechend verschoben.
Wenn nach dem Verschieben der Karte der Zoom aber nicht ausgeführt wird…