[OpenLayers-Users] how to synchronize 2 maps ?
Stephen Woodbridge
woodbri at swoodbridge.com
Mon Aug 13 09:11:35 EDT 2007
Gilles Bassière wrote:
> Hi list,
>
> I have 2 OL maps in the same page and I would like them to be
> synchronized, say when an event occurred in any of the two maps, it
> should be handled by the two maps, so that both maps always show the
> same area. For example, I use map2's controls to zoom in and both maps
> zoom in.
>
> I've been told that it should be possible with OL but I can't find any
> such thing in this list archives...
>
> So far, my maps are initialized like this:
>
> // Map options
> --------------------------------------------------------------
> var url1 = ... ;
> var url2 = ... ;
> var optionsSet = {
> maxExtent: new OpenLayers.Bounds(590100, 2420300, 596600, 2428500),
> maxResolution: 12,
> numZoomLevels: 10,
> units: "m",
> tileSize: new OpenLayers.Size(256, 256),
> projection: "EPSG:27572",
> theme: "./compare/customOL.css",
> controls: []
> }
>
> // Map definition
> -----------------------------------------------------------
> var map1 = new OpenLayers.Map($("map1"), optionsSet);
> var map2 = new OpenLayers.Map($("map2"), optionsSet);
>
> var background1 = new OpenLayers.Layer.WMS("Background", url1, {layers:
> "Background", format: "image/png"}, {isBaseLayer: true, reproject: false});
> var background2 = new OpenLayers.Layer.WMS("Background", url2, {layers:
> "Background", format: "image/png"}, {isBaseLayer: true, reproject: false});
>
> map1.addLayer(background1);
> map2.addLayer(background2);
>
> map1.addControl( new OpenLayers.Control.MousePosition() );
> map1.addControl( new OpenLayers.Control.MouseDefaults() );
> map1.addControl( new OpenLayers.Control.PanZoomBar() );
>
> map2.addControl( new OpenLayers.Control.MousePosition() );
> map2.addControl( new OpenLayers.Control.MouseDefaults() );
> map2.addControl( new OpenLayers.Control.PanZoomBar() );
>
>
>
> I tried to assign the same control objects to both maps:
>
> myPanZoomBarControl = new OpenLayers.Control.PanZoomBar() ;
> map1.addControl( myPanZoomBarControl );
> map2.addControl( myPanZoomBarControl );
>
> The previous doesn't work. The control appear only on the 1st map and
> control the 2nd map...
> I also tried with the fallThrough property set to true but it doesn't
> have much effect.
>
> Has someone already got 2 maps synchronized ? Does someone know whether
> it's possible ?
>
I did something similar. To simplify things, I created a master and
slave map so all the Controls are on the Master and then I added Event
handlers to catch Move and Zoom events and to apply the action to the
slave map. this worked very nicely.
You might be able to criss/cross the event handlers but you would have
to take some precautions to that update events did not trigger a new set
up update events and so on form an endless loop.
-Steve
More information about the Users
mailing list