Zur Größe des Popups in meinem Beispiel: Ich verwende im Popup ein iframe, und dieses erhält die Größenangaben als Attribute (width=“XY” und height=“XY”) im HTML-Tag (m.W. sieht ein iframe hier diese beiden Angaben zwingend vor, so dass ich diese nicht nochmals via Stylesheet angebe). Du findest den iframe Aufruf in der Javascript-Datei http://www.gpxtour.com/web/jsf/common.js; Die Größenangabe könnte man natürlich auch dynamisch übergeben, ebenso wie ich teile der URL dynamisch übergebe (“feature.attributes.url”).
Lightbox macht nix anderes als ein Overlay über Deine Webseite zu legen, und in diesem wiederum HTML anzuzeigen. Genau das machen die Popups von Openlayer auch. Die Fähnchen inklusive Overlay trägt dieser Teil aus common.js ein:
var oPin = new OpenLayers.Layer.Vector("mypins",{
eventListeners:{
'featureselected':function(evt){
var feature = evt.feature;
var popup = new OpenLayers.Popup.FramedCloud("popup",
OpenLayers.LonLat.fromString(feature.geometry.toShortString()),
null,
"<iframe src=\"strack_info.html?tour=" + feature.attributes.url + "\" width=\"220\" height=\"95\" name=\"" + feature.attributes.url + "\"><img src=\"web/img/loading.gif\" width=\"31\" height=\"31\" alt=\"loading\" style=\"margin:27px 0px 0px 95px;\" /></iframe>",
null,
false
);
feature.popup = popup;
map.addPopup(popup);
},
'featureunselected':function(evt){
var feature = evt.feature;
map.removePopup(feature.popup);
feature.popup.destroy();
feature.popup = null;
}
}
});
for (var sTrack in sResult.split("::")) { oPin.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(sResult.split("::")[sTrack].split(":")[1], sResult.split("::")[sTrack].split(":")[2]).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")), {url:sResult.split("::")[sTrack].split(":")[0]}, {externalGraphic:sBasePath+"web/img/flag.png", graphicHeight:24, graphicWidth:18, graphicYOffset:-22, graphicXOffset:-2, rotation:0, fillOpacity:1})); }
var selector = new OpenLayers.Control.SelectFeature(oPin, {onclick:true, autoActivate:true});
var PinLayer = new OpenLayers.Layer.Vector();
map.addLayers([PinLayer, oPin]);
map.addControl(selector);
Ich zerlege hierbei mit sResult.split(“::”) bzw. sResult.split(“:”) einfach einen String mit Angaben zur Position und der URL zu mehreren Fähnchen - so kann ich aus einem einzigen String beliebig viele Fähnchen mit beliebig vielen Informationen setzen. Vereinfacht das einfügen eines Fähnchens wäre statt der for-Schleife:
oPin.addFeatures(new OpenLayers.Feature.Vector(new OpenLayers.Geometry.Point(LON, LAT), WEITERE_PARAMETER, GRAPHIK));