<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div><div class="h5"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Hi again,<br><br>I think i&#39;ve spoken to early. Matt, after digging a little bit more, your code suggestions are givinig me the same results as my initial approach. The strange thing is that, using your code and firbug, i see that the Center coordinates and bounding box for maxExtent are being correctly reprojected. Nevertheless, the map is going to a different place on earth (see attached images: mercator is ok but etrs is completely out). </blockquote>
</div></div></div></blockquote><div><br><a href="http://dl.dropbox.com/u/10817385/mercator.png">http://dl.dropbox.com/u/10817385/mercator.png</a><br><a href="http://dl.dropbox.com/u/10817385/etrs.png">http://dl.dropbox.com/u/10817385/etrs.png</a><br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><div><div class="h5"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
No errors are shown in firebug and i&#39;m a little bit lost. I have defined the etrs layer like the following:<br>

<br>var ortos = new OpenLayers.Layer.TileCache(<br>        &#39;Ortofotomapas ARH&#39;,<br>        &#39;<a href="http://localhost/tilecache" target="_blank">http://localhost/tilecache</a>&#39;,<br>        &#39;Ortos&#39;,<br>

        {<br>
            isBaseLayer: true,<br>            maxExtent: bBoxEtrs,<br>            serverResolutions: mapResolutionsEtrs,<br>            visibility: false,<br>            transparent: true,<br>            scales: [800000, 500000, 250000, 100000, 50000, 25000, 10000, 5000, 2500, 1000],<br>


            maxResolution:282.2220733500804,<br>            minResolution: 0.35277758727788067,<br>            units: &#39;m&#39;,<br>            projection: etrs,<br>            restrictedExtent: bBoxEtrs<br>        }<br>


    );<br><br>I&#39;m sure that this tilecache layer is working properly because i&#39;ve tested it on a simple openlayers app configured with the same options.<br><br>Any hints on what might be happening??? Unfortunately, i can&#39;t see what is going wrong and have no more alternative ideas.<br>


Cheers,<br><font color="#888888"><br>Hugo</font><div><div></div><div><br><br><br><div class="gmail_quote">On Tue, Jun 21, 2011 at 2:42 PM, Hugo <span dir="ltr">&lt;<a href="mailto:hfpmartins@gmail.com" target="_blank">hfpmartins@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Matt,<br><br>That works like a charm ;)<br>Really, thanks a lot for this suggestion and code!<br><br>Cheers,<br><font color="#888888"><br>Hugo</font><div><div></div><div><br><br><br><div class="gmail_quote">
On Mon, Jun 20, 2011 at 8:29 PM, Matt Priour <span dir="ltr">&lt;<a href="mailto:mpriour@kestrelcomputer.com" target="_blank">mpriour@kestrelcomputer.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><u></u>



<div style="padding-right:10px;padding-left:10px;padding-top:15px" name="Compose message area">
<div><font face="Arial" size="2">I&#39;ve had similar problems and I&#39;ve solved it by 
adding an event listener to the map&#39;s baselayerchange event.</font></div>
<div>you would put mapOptionsEtrs properties on the Etrs base layer rather than 
on the map. Map options are most ignored and overwritten by base layer 
options.</div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">here is my baselayerchange event handler, which is 
called with the map as scope.</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">function onBaseLayerChange(evtObj){<br>   
var mapProj, baseProj, map, newBase, reproject;<br>   map = 
this;<br>   newBase = evtObj.layer;<br>   mapProj = 
(map.projection &amp;&amp; map.projection instanceof OpenLayers.Projection) ? 
map.projection : new OpenLayers.Projection(map.projection);<br>   
baseProj = newBase.projection;<br>   reproject = 
!(baseProj.equals(mapProj));<br>   if (reproject) 
{<br>      var center, 
maxExt;<br>      //calc proper reporojected 
center<br>      center = 
map.getCenter().transform(mapProj, baseProj);<br>      
//calc correct reprojected extents<br>      maxExt = 
newBase.maxExtent;<br>      //set map projection, 
extent, &amp; center of map to proper values<br>      
map.projection = baseProj;<br>      map.maxExtent = 
maxExt;<br>      map.setCenter(center);<br>   
}<br>}</font></div>
<div><font face="Arial" size="2"></font> </div>
<div><font face="Arial" size="2">Matt Priour</font></div>
<div><font face="Arial" size="2">Kestrel Computer Consulting</font></div>
<div style="font:10pt Tahoma">
<div><br></div>
<div style="background:#f5f5f5">
<div><b>From:</b> <a title="hfpmartins@gmail.com" href="mailto:hfpmartins@gmail.com" target="_blank">Hugo</a> </div>
<div><b>Sent:</b> Monday, June 20, 2011 12:45 PM</div>
<div><b>To:</b> <a title="users@geoext.org" href="mailto:users@geoext.org" target="_blank">users@geoext.org</a> </div>
<div><b>Subject:</b> [Users] Programmatically changing the base map 
projection</div></div></div><div><div></div><div>
<div><br></div>Dear Geoext users,<br><br>I&#39;m trying to develop a functionality 
that will allow the user to change the base map projection. The initial map is 
using the spherical mercator projection so that OSM and Google/Yahoo/Bing layers 
can be displayed. Because the users will need to edit features at specific 
scales (1:25.000; 1:10.000) i need to develop a function that will change the 
projection from spherical mercator to ETRS PTM06 (EPSG:3763). I think i&#39;m almost 
there but somehow, after reprojection the base map i get my map full extent much 
higher in latitude (so, more to the north) and much smaller in longitude (more 
to the west).<br><br>My steps are:<br>1. Remove all OSM/Google/Yahoo/Bing layers 
from the map.<br>2. Add new options to the map<br>3. Merge new options 
(projection) to a blank layer and set it as basellayer<br>4. Loop the remaining 
layers and add new options.<br><br>The relevant part of the code is 
below:<br><br>//Map options<br>var mapOptions = {<br>    
maxExtent: bBox,<br>    maxResolution: 
305.74811309814453,<br>    minResolution: 
0.29858214169740677,<br>    resolutions: 
mapResolutions,<br>    units: &#39;m&#39;,<br>    
projection: baseMercator,<br>    displayProjection: 
wgs,<br>    restrictedExtent: bBox,<br>    
panMethod: OpenLayers.Easing.Quad.easeOut,<br>    numZoomLevels: 
20,<br>    controls: []<br>};<br><br>var mapOptionsEtrs = 
{<br>    maxExtent: bBoxEtrs,<br>    
maxResolution: 282.2220698223045,<br>    minResolution: 
0.35277758727788067,<br>    resolutions: 
mapResolutionsEtrs,<br>    units: &#39;m&#39;,<br>    
projection: etrs,<br>    displayProjection: 
etrs,<br>    restrictedExtent: bBoxEtrs,<br>    
panMethod: OpenLayers.Easing.Quad.easeOut,<br>    numZoomLevels: 
10,<br>};<br><br><br>//Reprojection logic<br>var radioValue = 
Ext.getCmp(&#39;srsradiogroup&#39;).getValue().getGroupValue();<br>var mapProj = 
map.getProjection();<br>var baseCart = 
treePanel.getNodeById(&#39;basecartography&#39;);<br>if (radioValue != mapProj 
&amp;&amp; radioValue == &#39;EPSG:3763&#39;) {<br>    
baseCart.cascade(function () {<br>        var 
childNodes = this.childNodes;<br>        for 
(i = 0; i &lt; childNodes.length; i++) 
{<br>            switch 
(childNodes[i].text) 
{<br>            case 
&#39;OpenStreetMap&#39;:<br>                
childNodes[i].disable();<br>                
map.removeLayer(osm);<br>                
break;<br>            
case &#39;Google 
Streets&#39;:<br>                
childNodes[i].disable();<br>                
map.removeLayer(gstreets);<br>                
break;<br>                
// and so 
on...<br>            
}<br>        }<br>    
});<br><br>    
map.setOptions(mapOptionsEtrs);<br>    
map.layerContainerOrigin.transform(baseMercator, 
etrs);<br><br>    
blankLayer.addOptions({<br>        
projection: etrs<br>    });<br>    
map.setBaseLayer(blankLayer);<br><br>    for (i = 0; i &lt; 
mapPanel.map.layers.length; i++) {<br>        
var className = 
mapPanel.map.layers[i].CLASS_NAME;<br>        
if (className == &#39;OpenLayers.Layer.WMS&#39;) 
{<br>            
mapPanel.map.layers[i].addOptions({<br>                
srs: etrs<br>            
});<br>        } else if (className == 
&#39;OpenLayers.Layer.Vector&#39;) 
{<br>            
mapPanel.map.layers[i].projection = 
etrs;<br>        } else 
{<br>            //here i 
will control other types of layers like 
tilecache<br>        }<br>    
}<br>}<br><br>Checking the map and layers projection through firebug, it seems 
everything is correct.<br>I&#39;ve also tried to get the initial extent of the map, 
reproject it and zoom to it after the reprojection but the it still goes to the 
same place.<br><br>What might be the issues here?? Am i doing something 
completely wrong?<br>Cheers,<br><br>Hugo<br>    
               <br><br>
</div></div></div></blockquote></div></div></div></blockquote></div></div></div></blockquote></div></div></div></blockquote></div><br><br clear="all"><br>-- <br>Hugo Martins<br>LabNT - ISEGI UNL<br>Campus de Campolide<br>
1070-312 Lisboa<br>N 38°43&#39;56.84&quot;, W 9°9&#39;35.74&quot;<br>