openlayers: positionierung von popups

hi,
ich hab ne kleine frage zu ol, da ich wieder am basteln, ähh programmieren bin :wink:

ich möchte ein popup haben, unabhängig von irgend einem objekt der karte (kein marker, kein feature, garnix)
und dieses so positionieren, dass es mitten im map steht.

wenn ich mit getCenter() arbeite, bekomme ich das ja schon auf den schirm nur ist eben nur die ecke des poups in der mitte, nicht das popup selber.
mit getExtend() und viel herumgerechne wird das schon gehen aber kennt/hat jemand ein beispiel?

mfg
walter

Also bei Icons welche man auf der Karte plazierst gibt es einen Offset. Dies kannst du sicher auch mit deinem Popup so realisieren. Du musst nur vorher wissen wie groß das ganze ist und ziehst dann einfach die Hälfte davon ab.

Würde mich ebenfalls interessieren. Wie stellst du das mit dem Berechnen an? Was passiert wenn du (man) unterschiedliche Birdschirmgrößen / -Auflösungen hat?
Georg

garnicht - ich suche doch genau dafür ne einfache lösung.
dynamischer schirm - popup in der mitte - einfach so ohne bezug zum karteninhalt und ohne icon, dessen dimensionen ich “missbrauchen” könnte.

gruss
walter

Nahmd,

Soll das auf dem Viewport fixiert sein oder beim Pan mit verschoben werden?

Gruß Wolf

moin moin, wolf

fest ohne pan.

soweit bin ich schon:
w = map.getSize().w;
h = map.getSize().h;
pos = map.getLonLatFromPixel(new OpenLayers.Pixel(w0.75,h0.15));

  popup = new OpenLayers.Popup.FramedCloud
     "searchPopup",						        
     pos, 								
 null,					       			  
     searchRequest.responseText,				
 null,								
 true						
  );

jetzt “nur noch” auf Anchored oder Framed, da ja dieses Häkchen hier Blödsin ist, umstellen und das sollte es gewesen sein.
die berechnung von pos kann natürlich noch verbessert werden aber prinzipiell klappt es schon.

mfg
walter

so, ich habs raus:

 w = map.getSize().w;
  h = map.getSize().h;             
  pos = map.getLonLatFromPixel(new OpenLayers.Pixel(w*0.8,h*0.15));         
  popup = new OpenLayers.Popup.Anchored(
     "searchPopup",						     
     pos,                                                                                        							
 null,					       			 
     searchRequest.responseText,					
 null,								
 true							
  );

   popup.minSize = new OpenLayers.Size(  250,  300);
   popup.maxSize = new OpenLayers.Size(w*0.8,h*0.8);        
   popup.autoSize = true;
   ...
   map.addPopup(popup);

an den parametern (80%, 15% und 80%) kann man noch ein wenig drehen aber prinzipiell funtoniert es. er holt sich die größe des fensters und berechnet die anderen werte - so in etwa haut das hin.

demnächst zu besichtigen in der noch nicht freigeschalteten version 0.9 vom plz-tool.

Also meine Theorie war einfach du kennst die Größe des Popups in Pixeln und du kennst die Mitte der Karte. Jetzt wirst du es also 1/2 Popupbreite weiter links und eine 1/2 Popuphöhe weiter oben anordnen. Quasie ein Offset wie bei Symbolen, nur das du es selber rechnen musst.

gaaaaaaaaaaaaaaaaanz so einfach war das nicht.

ich kenne eben NICHT die Größe des Popups, sondern nur so in etwa, weil das, was da ausgegeben werden soll, Ergebnis einer SQL-Abfrage ist.
Das Teil kann breit und flach aber auch schmal und hoch sein - eben so wie es kommt.
Und dazu sollte die vorhandene Fläche halt auch möglichst benutzt werden.

und mit meinem jetzigen Zwischenergebnis bin ich schon ganz happy.

mfg
walter