[OpenLayers-Users] Synchronizing OL map with MapServer legend

David Fawcett david.fawcett at gmail.com
Thu Sep 4 17:57:42 EDT 2008


I have whipped up a demo where I am using OL to serve up a simple,
single-tile MapServer layer.  My goal is to display a legend in an
adjacent div using a mode=legend call to MapServer.  I almost have it
working, but the synchronization is a little off.  My test is that I
have a scale-dependent layer in my map file and I am watching when the
this layer gets added to the legend.  I am wondering if I am listening
for the wrong event.

I am listening for the 'moveend' event, grabbing the bounds and using
it to construct the legend call.  Here is my (admitedly verbose) code.

map.events.register("moveend", map, function(e) {
            var bounds = map.getExtent();
            var boundsArr = bounds.toArray();
            var currentExtent =
boundsArr[0]+'+'+boundsArr[1]+'+'+boundsArr[2]+'+'+boundsArr[3];
            document.getElementById('legend_box').getElementsByTagName('img')[0].src="http://localhost/cgi-bin/mapserv?mode=legend&map=/Users/david/backendmaps/roads/roads_ol.map&mapext="
+ currentExtent;

The legend is updating, but when the new layer appears on the map, it
doesn't often show up in the legend until the next zoom.

I see that the bbox value returned by getExtent is not the same as the
bbox values that OL plugs into the map request to MapServer.  I assume
that this is because getExtent() is giving the value for the visible
map, not the whole image being requested.

This leads me to two questions:

1.  If I am zooming in/out on a map is 'moveend' the correct  event to
listen for if I want to grab the extent of the image being requested?

2.   If so, is getExtent() the right call to get the extent of the new
image being requested?

Thanks,

David.



More information about the Users mailing list