"Zoomleiste" links, weniger Stufen

Hallöchen,

ich würde gerne der Leiste auf der linken Seite, mittels derer man in die Karte hinein und hinauszoomen kann, verkürzen, da die Karte, die ich darstelle recht klein ist, der “Zoombalken” geht leider über den Kartenrand (Fensterrand) hinaus.

Hat jemand eine Idee?

Im Internet bin ich leider nicht fündig geworden.

Viele Grüße,
Boris

hi,

gehts bitte etwas konkreter? Von welcher Software auf welcher Platform sprichst du?
Das kann eine OpenLayers-Anwendung für Web-Browser sein oder auch irgendwas für nen Handy. und alles dazwischen…

gruss
walter

Ja, kann ich :wink:

Ich rede von der PanZoombar (?) bei Openlayers. Kartendarstellung per Webbrowser.

Dann schau doch beim original ab:
http://openlayers.org/

da ist die PanZoombar gaaanz klein :wink:

gruß,
ajoessen

hier ist eigentlich alle gezeigt: http://www.openlayers.org/dev/examples/controls.html

openlayers.org kennst du? :wink:
gruss
walter

ich hab nicht nachgesen, ob das positionieren hier auch drin ist.
bei mir geht das mit


div.olMap .olControlPanZoomBar {
    margin-top: 3em;
    margin-left: 0
}

Map durch eigenen Namen ersetzen

Hm es geht mir nicht um die Position, wo sich das Objekt befindet sondern um die Anzahl der “Glieder”, die das Ding hat. Oder kann man die gar nicht reduzieren?

die gibst du mit numZoomLevels des Layers oder der map an. Das Problem dabei ist, dass zumindest bei Tiles der kleinste Zoomlevel immer 0 ist. Falls deine kleine Karte also von “Weltkarte” bis “Deutschlandkarte” zoomt, funktioniert das. Falls du von “Stadtplan” bis “Grundriss” zoomen willst, stehst du vor einem Problem, das gelegentlich angefragt wird, aber so weit ich weiss selten gelöst…

ist doch im beispiel genau zu sehen: da sind nur noch ca 5-6 stufen. hat, wie der kollege schon schrieb, was mit dem zoom-level zu tun.
das mit der position hatte ich falsch verstanden, aber das beispiel macht genau das, was du willst.
gruss
walter

p.s. die OL-doku ist wirklich mist aber die examples sind gold wert.

Nahmd,

Die Anzahl der Schritte auf der Slider-Skala hängt von der maximal erlaubten Auflösung ab und wird automatisch gewählt.
Die Rasterweite in Pixeln aber kann man im Parameter “zoomStopHeight” angeben; als Standardwert wird 11 angenommen.

Eine kürzere Skala bekommst Du also so:


new OpenLayers.Control.PanZoomBar( {zoomStopHeight:5})

Der Slider rastet damit in Abständen von 5 Pixeln.

Die sichtbare Skala bleibt dabei unverändert; sie wird innerhalb der OL-Klasse mit “xxx.style.backgroundImage=…” gesetzt und kann auch nicht per CSS ausgetauscht werden. Es geht aber so:

  1. Der PanZoomBar eine Id verpassen:

map.addControl (new OpenLayers.Control.PanZoomBar( {id:'myZoomBar', zoomStopHeight:5}));

  1. nach dem Laden der Karte über die Id das Element finden und ins richtige Unter-DIV ein anderes Background-Image eintragen:

document.getElementById ('myZoomBar').childNodes[5].style.backgroundImage='url(i/zoombar_18x05.png)';

Leider geht es nicht schöner, weil die Grafik kein Parameter, sondern fester Bestandteil des OL-Codes ist.

Und so sieht das Ergebnis aus: http://www.netzwolf.info/kartografie/openlayers/panzoombar.htm

Gruß Wolf

Das ist nicht das ist was (und vermutlich auch Ghostrider82) wünscht. Ich möchte den minZoom begrenzen (z.B. level 6) und damit eine ZoomBar von z.B. 6-18 levels anzeigen. Über OL geht das leider nicht.

Weil die PanZoomBar noch andere Probleme hat, habe ich mir eine eigene ZoomBar.js gebaut. Wenn mir jemand dabei hilft, baue ich da ein minZoom/maxZoom ein. Man könnte ja relativ einfach statt eine Bar einzelne Stufen gemäss der Anzahl Stufen zusammenfügen.

Wyo

Moin,

Du kannst auch, statt die Elemente der ZoomBar zu verkleinern, deren Anzahl verringern. Diese Lösung ist aber nicht mehr minimalinvasiv: es werden zwar nur wenige Zeilen in der Klassendefinition geändert, die aber so verteilt, dass man schlauerweise gleich die ganze Klasse neudefiniert. Heißt: Du musst dafür ein zusätzliches JS einfügen.

So sieht das Ergebnis aus: http://www.netzwolf.info/kartografie/openlayers/panzoombar2.htm

Gruß Wolf

Danke! Habs gesehn und sofort geklaut :wink:

Max