Nochmal Fragen zum Styling einer Karte

Hi,

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

http://www.netzwolf.info/kartografie/openlayers/panzoombar2.htm

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:

  1. 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.
  2. 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.

Könnt Ihr mir helfen? hier der Quellcode:

<?php $lat=51.20418118214776; $long=7.1737611293792725; ?> .olControlAttribution { bottom: 3px!important; }

Moins,

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:


OpenLayers.Control.Navigation()
OpenLayers.Control.PanZoom()
OpenLayers.Control.ArgParser()
OpenLayers.Control.Attribution()

Und insbesondere den “OpenLayers.Control.PanZoom()” willst Du nicht haben :).


[…]
map.addControl (new OpenLayers.Control.PanZoomBar({minZoom: 19}));

Denn jetzt hast Du zwei Zoomleisten übereinander liegen, eine vom Typ PanZoom, und die andere vom Typ PanZoombar.
Das sieht nicht wirklich gut aus.

Außerdem:


map.addControl (new OpenLayers.Control.PanZoomBar({minZoom: 19}));

“minZoom: 19” macht eine sehr :wink: kurze Zoomleiste. Setzt das zum Start mal auf 10.

Gruß Wolf

Edit: Typo

Jau, danke. Das war die Lösung :-))

Ist es auch möglich, zusätzlich noch nen maxZoom zu integrieren?? :wink:

In etwa so…

map.addControl (new OpenLayers.Control.PanZoomBar({minZoom: 10, maxZoom: 16}));

Gruß Wayne

Nahmd,

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.

Gruß Wolf

Hi Netzwolf,

klingt interessant. Aber mit welcher Befehlskette könnte man das einbauen. Kannst Du evtl. den Code dafür posten ?
:-))

Nahmd,

Keine Befehlskette. Gib den Kartenlayern einfach den Parameter “numZoomLevels” mit auf den Weg.

Gruß Wolf

Hi Netzwolf,

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. :slight_smile:

Nahmd,

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.

Verbindet man die Karte mit eingeschränktem Zoombereich mit dem modifizierten PanZoomBar, so erreicht man das wahrscheinlich von Dir gewünschte Verhalten.

Gruß Wolf

Edit: Typo

Jau,

genau das wurde gesucht.

Super :-))

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.

Gruß,
Norbert

Beispielsweise das Scrollrad:
Wenn man am unteren bzw oberen Limit angekommen ist, bewegt sich plötzlich die ganze Karte… :roll_eyes:

Gruß Wayne

Nahmd,

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…

Ist gefixt.

Gruß Wolf

Perfekt…
Typich Wolf eben. :wink:

Gruß Wayne