OpenLayers: Vector-Markierung wird teilweise abgeschnitten

Hallo!

Ich verwende für ein kleines Projekt OpenLayers und stelle damit bestimmte Punkte auf der Karte mit einem Vector als Markierung dar (eigene Bilddaten, die dann als Markierung angezeigt werden). Dann zoome ich die Karte mit “zoomToExtent”, dieser Funktion übergebe ich ein Bounds-Objekt, mit allen Punkten der Markierung. Jetzt habe ich das Problem, dass in einigen Fällen der exakte Punkt der Markierung zwar innerhalb des sichtbaren Kartenausschnitts liegt, ein Teil der Grafik, die als Markierung angezeigt wird jedoch abgeschnitten wird, weil sie außerhalb des sichtbaren Bereichs liegt.

Siehe hierzu auch folgendes Bild:

Gibt es dafür eine Lösung, weil da ist schon sehr störend und sieht unschön aus. Freue mich über jeden Tipp!

Danke und LG
Daniel

hi daniel,
kann man drüber streiten.

was hast du denn für alternativen?

  • icon weglassen ?
  • icon verschieben ?
  • icon kleiner machen?

alles nicht so gut.

ich würde es so lassen, dann sieht man zumindest, dass da noch was ist.
gruss
walter

Naja, auf dem Beispielscreenshot sieht’s nicht ganz so schlimm aus, es kommt aber auch öfter mal vor, dass man höchstens noch ein paar Pixel des Icons sieht - wenn man nicht weiß, dass da noch was sein soll übersieht man es garantiert. Besonders dann dumm, wenn nicht so viele Icons wie auf dem Bild zu sehen sind, sondern nur das eine einzelne Icon, von dem dann nur die paar Pixel sichtbar sind.

Gibt’s da echt keine Möglichkeit das zu ändern?

Danke und LG
Daniel

Moin,

Der Extent wird aus den Koordinaten Deiner Objekte berechnet, kennt aber die Ausdehnung der an den Koordinaten darzustellenden Objekte nicht.
Da die Grafiken beim Zoomen nicht mitschrumpfen und mitwachsen, kann man auch nicht einfach den Extent um einen fixen Betrag vergrößern.

Aber natürlich gibt es eine Lösung: man modifiziert die Methode der OpenLayers.Map-Klasse, die für Berechnung des Zooms zuständig ist:

    // Sicherheitsabstand zwischen Extent und Kartenrand (in Pixeln)
    map.safetyGap   = 40;

    // überschreibe die "getZoomForExtent"-Methode
    map.getZoomForExtent=function(extent,closest){
            var viewSize=this.getSize();
            var idealResolution=Math.max(
                    extent.getWidth() /Math.max(viewSize.w-2*this.safetyGap,1),
                    extent.getHeight()/Math.max(viewSize.h-2*this.safetyGap,1));
            return this.getZoomForResolution(idealResolution,closest);
    };

Das Ganze natürlich vor dem Aufruf von “map.zoomToExtent()” :wink:

Gruß Wolf

Ist jetzt nur eine wilde Theorie, aber könnte getDataExtent helfen? Eventuell bezieht die Funktion die Größe der Objekte ja mit ein? Jedenfalls hatte ich bisher noch keine Problem mit abgeschnittenen Features.

Ich bin nicht ganz sicher, aber vielleicht hilft dir “gutter: xx” als Parameter weiter.
http://dev.openlayers.org/releases/OpenLayers-2.10/doc/apidocs/files/OpenLayers/Layer-js.html#OpenLayers.Layer.gutter

Wyo