[OpenLayers-Users] map centers correctly when not in lightbox.
Eric Mckenna
emckenna at phase2technology.com
Fri Jul 17 16:53:28 EDT 2009
Hello All,
I'm displaying the same map details in two different ways. One is on a
simple webpage, this one works flawless.
http://skitch.com/emackn/b2nhq/map-on-simple-page
The issues occurs when I put my map into a jquery tools overlay,
http://flowplayer.org/tools/overlay.html.
When displayed with the overlay lib, my map has the correct center but
the map is "scrolled" in that the center marker is in the upper left
hand corner.
http://skitch.com/emackn/b2nhk/overlay-map
I've checked the projection and doubled checked the zoom value and
center points. They all look good to me.
One odd issue is that when I hit the zoom in or out scale button, the
map corrects itself.
http://skitch.com/emackn/b2nha/after-hitting-zoom-out-button
Any suggestions?
here's my code:
/**
* Render the Hot Spot detail map with the provided configuration
*
* @param id
* The id of the div to use for the map
* @param config
* The array of configuration options for the Hot Spot
*/
function hotspotsRenderDetailMap(id, config) {
var lat = Number(config.latitude);
var lon = Number(config.longitude);
var zoom = Number(config.zoom);
var image = config.marker;
var hotspot = new OpenLayers.LonLat(lon, lat);
OpenLayers.ImgPath = config.imgpath;
var map = new OpenLayers.Map(id, {
controls: [
new OpenLayers.Control.Navigation(),
new OpenLayers.Control.PanZoomBar(),
new OpenLayers.Control.ScaleLine(),
new OpenLayers.Control.LayerSwitcher()
],
});
// In case something needs to get at this later
if (!Drupal.hotspotsMap) {
Drupal.hotspotsMap = [];
}
Drupal.hotspotsMap[id] = map;
var cloudmade = new OpenLayers.Layer.CloudMade("CloudMade", {
key: 'c6ee2dab1ccd513e8ab325db51aa28b7',
styleId: 3818,
});
map.addLayer(cloudmade);
if (!map.getCenter()) {
var epsg4326 = new OpenLayers.Projection("EPSG:4326");
hotspot.transform(epsg4326, map.getProjectionObject());
map.setCenter(hotspot, zoom);
}
var markers = new OpenLayers.Layer.Markers("Markers");
map.addLayer(markers);
var size = new OpenLayers.Size(30,43);
var icon = new OpenLayers.Icon(image, size);
var marker = new OpenLayers.Marker(hotspot, icon);
markers.addMarker(marker);
for ( var i in config.overlays ) {
var kml_features;
kml = new OpenLayers.Layer.GML(config.overlays[i].filename,
config.overlays[i].filepath, {
format: OpenLayers.Format.KML,
formatOptions: {
extractStyles: true,
extractAttributes: true,
maxDepth: 4,
}
});
selectControl = new OpenLayers.Control.SelectFeature(kml,
{onSelect: onFeatureSelect, onUnselect: onFeatureUnselect});
map.addLayer(kml);
map.addControl(selectControl);
selectControl.activate();
}
function onPopupClose(evt) {
selectControl.unselect(selectedFeature);
}
function onFeatureSelect(feature) {
selectedFeature = feature;
//console.dir(feature.attributes);
var bubbletxt = "<div><em>"+feature.attributes.name+"<em>";
if ( typeof feature.attributes.description != "undefined" ) {
bubbletxt += "<p>"+ feature.attributes.description +"</p>";
}
bubbletxt += "</div>";
popup = new OpenLayers.Popup.FramedCloud("ab-feature",
feature.geometry.getBounds().getCenterLonLat(),
new OpenLayers.Size(200,50),
bubbletxt,
null, true, onPopupClose);
feature.popup = popup;
map.addPopup(popup);
}
function onFeatureUnselect(feature) {
map.removePopup(feature.popup);
feature.popup.destroy();
feature.popup = null;
}
// Move the marker layer to the top (for Firefox bug)
map.setLayerIndex(markers, 100);
}
More information about the Users
mailing list