I am using the GeoExt example and used the same code in my application. This is my code
The problem I am facing is that the Popup box in my application on http://128.196.142.94/geo/test/test.html
is stationary. Where ever you may click, the popup simply does not move. Not sure where I am going wrong?
Answer
anchored: false
should be anchored: true
:
if (!popup) {
popup = new GeoExt.Popup({
title: "Popup",
width: 200,
maximizable: true,
collapsible: true,
map: mapPanel.map,
anchored: true,
listeners: {
close: function() {
// closing a popup destroys it, but our reference is truthy
popup = null;
}
}
});
}
And remove location: loc.xy
from popup definition.
loc.xy
is undefined and if you have a look into GeoExt Popup.js source you can find that in this case anchored
property automatically sets to false
.
UPDATE:
It looks like you are using old version of geoext library. I've adapted your example for working with this version:
var mapPanel, popup;
Ext.onReady(function() {
function addToPopup(loc) {
if (!popup) {
popup = new GeoExt.Popup({
title: "Popup",
width: 200,
maximizable: true,
collapsible: true,
map: mapPanel.map,
/* Fix #1
loc - object of OpenLayers.Pixel class
*/
location: loc,
anchored: true,
listeners: {
close: function() {
popup = null;
}
}
});
}
popup.add({
xtype: "box",
autoEl: {
/* Fix #2
Convert pixel coordinates to LonLat
*/
html: "You clicked on (" + mapPanel.map.getLonLatFromViewPortPx(loc).lon.toFixed(2) + ", " + mapPanel.map.getLonLatFromViewPortPx(loc).lat.toFixed(2) + ")"
}
});
/* Fix #3
It is not necessary because location was defined within constructor
*/
//popup.location = loc;
popup.doLayout();
popup.show();
}
var mapPanel = new GeoExt.MapPanel({
title: "Map",
renderTo: "container",
width: 650, height: 356,
layers: [
new OpenLayers.Layer.WMS(
"Global Imagery",
"http://maps.opengeo.org/geowebcache/service/wms",
{layers: "bluemarble"}
)
],
center: [0, 0],
zoom: 2
});
var control = new OpenLayers.Control.Click({
trigger: function(evt) {
/* Fix #4
Get pixel coordinates from click and send to popup constructor
*/
var loc = evt.xy;
if (popup) popup.close();
addToPopup(loc);
}
});
mapPanel.map.addControl(control);
control.activate();
});
No comments:
Post a Comment