[OpenLayers-Users] Map reprojection issue

Hugo hfpmartins at gmail.com
Thu Aug 18 06:14:59 EDT 2011


Hi Jean,

Thanks a lot for your input. I'll be looking into this and try to fix my
zoom problem since all the rest is working properly.

Cheers,

Hugo

On Fri, Aug 12, 2011 at 4:06 PM, Jean-François Gigand <jf at geonef.fr> wrote:

> Hi Hugo,
>
> I can't answer your question straightforwardly, but can give some hints.
>
> - map.projection is only used as the default for new added layers
>  The reference is map.getProjectionObject() which returns cloned
> baseLayer's.
>
> - same for maxResolution and minResolution: they matter for the layers,
>  not for the map. The baseLayer is the master.
>
> - the 'changebaselayer' event is triggered after the change was made
> effective,
>  so the map.getCenter() in your function would return the new center
>  (within the projection of the new baseLayer's projection)
>
> - the OpenLayers.Map's setBaseLayer() function does not seem,
>  indeed, to take care of reprojecting the map center.
>  As a workaround, you may either :
>     - reproject the current center *before* calling setBaseLayer()
>       and affect it to map.center
>     - make your own Map class extending OpenLayers.Map
>       and overload setBaseLayer to handle the reprojection
>       (either replacing the implementation, or just reproject this.center
>       before calling OpenLayers.Map.prototype.setBaseLayer)
>
> I recommend your to dive into OpenLayers' source code, which is the
> best way to really understand how it behaves, for complex problems
> like this one.
>
> Best regards,
>
> Jean-François Gigand - Geonef
> Paris, France - http://geonef.fr/
>
>
>
>
> 2011/8/12 Hugo <hfpmartins at gmail.com>:
> > Hello all,
> > I'm trying to reproject openlayers map according to the selected base
> layer.
> > So, when the app is loaded my map has the EPSG:900913 projection (so that
> i
> > can use OSM, google, etc). I have other base layers that are in the EPSG:
> > 3763 projection and, when the user activate this layers the map will
> > automatically reproject itself to this new definition. I was able to
> > accomplish this however i have a small bug that i've not been able to
> > correct until the moment. After reprojecting i can't pan and if i make a
> > zoom it will go to a strange location (i think the zoom is still assuming
> > the old coordinates). After making the zoom i'm able to pan and zoom
> > normally.
> > The code i'm using:
> > function onBaseLayerChange(evtObj){
> >    var mapProj, baseProj, map, newBase, reproject;
> >    map = this;
> >    newBase = evtObj.layer;
> >    mapProj = (map.projection && map.projection instanceof
> > OpenLayers.Projection) ? map.projection : new
> > OpenLayers.Projection(map.projection);
> >    baseProj = newBase.projection;
> >    reproject = !(baseProj.equals(mapProj));
> >    if (reproject) {
> >       var center, maxExt;
> >       center = map.getCenter().transform(mapProj, baseProj);
> >       maxExt = newBase.maxExtent;
> >       map.projection = baseProj;
> >       map.resolutions = newBase.resolutions;
> >       map.maxResolution = newBase.maxResolution;
> >       map.minResolution = newBase.minResolution;
> >       map.maxExtent = maxExt;
> >       map.restrictedExtent = newBase.restrictedExtent;
> >       map.setCenter(center);
> >    }
> > }
> > I suppose i'm not setting some property... but which one?
> > Thanks in advance.
> > Cheers,
> > Hugo
> >
> > --
> > Hugo Martins
> > LabNT - ISEGI UNL
> > Campus de Campolide
> > 1070-312 Lisboa
> > N 38°43'56.84", W 9°9'35.74"
> >
> > _______________________________________________
> > Users mailing list
> > Users at lists.osgeo.org
> > http://lists.osgeo.org/mailman/listinfo/openlayers-users
> >
> >
>



-- 
Hugo Martins
LabNT - ISEGI UNL
Campus de Campolide
1070-312 Lisboa
N 38°43'56.84", W 9°9'35.74"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20110818/f67dc861/attachment-0001.html


More information about the Users mailing list