[OpenLayers-Users] Zooming with multiple kamap layers

Mike Leahy mgleahy at alumni.uwaterloo.ca
Tue Jul 29 10:48:37 EDT 2008


Alexandre,

Thanks for the tip - I think I might have tried setting isBaseLayer, but 
placed the parameter in the wrong argument.  Newbie mistake I guess.

Regards,
Mike


Alexandre Dube wrote:
> Hi Mike,
> 
> Both your layers are base layers. Only one base layer can be displayed 
> at a time. It is wrong to set the visibility to true to an other base 
> layer.
> 
> Just add isBaseLayer: false to your second layer and it will become an 
> overlay. Or add the layerSwitcher control to switch the base layer.
> 
> Here's your modified code. I use the "get some info" button to help me 
> keep track of some important infos about my layers. Hope this helps.
> 
> Alexandre Dube
> Mapgears
> adube at mapgears.com
> 
> ------------------------------------------------------------------
> 
> <html>
> <head>
> <title>OpenLayers Example</title>
> <script src="http://www.openlayers.org/api/OpenLayers.js"></script>
> <script type="text/javascript">
> 
> var map;
> 
> function init(){
> var options = {
> controls: [],
> maxExtent: new OpenLayers.Bounds(-180,-90,180,90),
> scales:
> [100000000,50000000,25000000,10000000,5000000,2500000,1000000],
> numZoomLevels: 8,
> tileSize: new OpenLayers.Size(200,200),
> projection: "EPSG:4326",
> units: "dd"
> };
> 
> map = new OpenLayers.Map('map',options);
> 
> var ly1 = new OpenLayers.Layer.KaMap(
> "World Map",
> "http://clima.ominiverdi.org/ka-map/htdocs/tile.php",
> {
> i:"JPEG",
> map:"cvs",
> g:"World Map",
> version:"6"
> }
> );
> 
> var ly2 = new OpenLayers.Layer.KaMap(
> "Places",
> "http://clima.ominiverdi.org/ka-map/htdocs/tile.php",
> {
> i:"PNG",
> map:"cvs",
> g:"Places",
> version:"6"
> },
> {
> isBaseLayer: false
> }
> );
> 
> map.addLayers([ly1,ly2]);
> map.zoomToExtent(new OpenLayers.Bounds(-180,-90,180,90));
> 
> map.addControl(new OpenLayers.Control.Navigation());
> map.addControl(new OpenLayers.Control.LayerSwitcher());
> map.addControl(new OpenLayers.Control.PanZoomBar());
> map.addControl(new OpenLayers.Control.MousePosition());
> 
> //ly2.setVisibility(true);
> }
> // Bouton get some info
> function disp_alert()
> {
> var i;
> var sToAlert = "";
> 
> if (map.layers){
> for (i=0;i<map.layers.length;i++) {
> sToAlert += i + " : ";
> if (map.layers[i].params != null) {
> sToAlert += map.layers[i].params.layers + "\n";
> }
> else if (map.layers[i].isVector) {
> sToAlert += "Layer de type Vector" + "\n";
> }
> sToAlert += " isBaseLayer : " + map.layers[i].isBaseLayer;
> sToAlert += " inRange : " + map.layers[i].inRange;
> sToAlert += " Visibility : " + map.layers[i].getVisibility();
> sToAlert += " Projection : " + map.layers[i].projection;
> sToAlert += "\n";
> }
> }
> 
> alert(
> "Left : " + map.getExtent().left + "\n" +
> "Bottom : " + map.getExtent().bottom + "\n" +
> "Right : " + map.getExtent().right + "\n" +
> "Top : " + map.getExtent().top + "\n" +
> "Scale : " + map.getScale() + "\n" +
> "Projection : " + map.getProjection() + "\n" +
> "Nb de layers direct : " + map.layers.length + "\n" +
> "Map center : " + map.getCenter() + "\n" +
> "\n" + sToAlert
> );
> }
> 
> 
> </script>
> </head>
> 
> <body onload="init()">
> <div style="width:50%; height:50%" id="map"></div>
> <input type="button" id="disp_alert" onclick="disp_alert()"
> value="get some info" />
> </body>
> </html>
> 
> Mike Leahy wrote:
>> Ok - here's a better demonstration of this problem.  Copy this into an 
>> html file...open it in a browser, then zoom in.  You'll see what I'm 
>> talking about.  This is using the World Map and Places layers from one 
>> of the ka-map demos hosted by omniverdi.org.  Is it something I'm 
>> doing wrong with the OL code, or maybe a bug in OL's kamap layer object?
>>
>> Regards,
>> Mike
>>
>> =======================================================================
>>
>> <html>
>> <head>
>>   <title>OpenLayers Example</title>
>>    <script
>>    src="http://www.openlayers.org/api/OpenLayers.js"></script>
>>    </head>
>>    <body>
>>     <div style="width:100%; height:100%" id="map"></div>
>>     <script defer="defer" type="text/javascript">
>>      var options = {
>>       maxExtent: new OpenLayers.Bounds(-180,-90,180,90),
>>       scales: 
>> [100000000,50000000,25000000,10000000,5000000,2500000,1000000],
>>       numZoomLevels: 8,
>>       tileSize: new OpenLayers.Size(200,200),
>>        projection:  "EPSG:4326",
>>            units:  "dd"
>>          };
>>          var  map  =  new  OpenLayers.Map('map',options);
>>
>>          var  ly1  =  new  OpenLayers.Layer.KaMap("World  Map",
>>            "http://clima.ominiverdi.org/ka-map/htdocs/tile.php",
>>            {i:"JPEG",map:"cvs",g:"World  Map",version:"6"}
>>          );
>>          var  ly2  =  new  OpenLayers.Layer.KaMap("Places",
>>            "http://clima.ominiverdi.org/ka-map/htdocs/tile.php",
>>            {i:"PNG",map:"cvs",g:"Places",version:"6"}
>>          );
>>
>>          map.addLayers([ly1,ly2]);
>>          map.zoomToExtent(new  OpenLayers.Bounds(-180,-90,180,90));
>>          ly2.setVisibility(true);
>>        </script>
>> </body>
>> </html>
>>
>>
>>
>>
>> Mike  Leahy  wrote:
>>  
>>>  Hello  list,
>>>  
>>>  I've  been  working  on  an  application  that  uses  Ka-Map,  but  
>>> I  think  I   might  consider  adopting  OpenLayers  for  the  
>>> client-side  part.    I  have   been  able  to  setup  a  map  that  
>>> loads  two  layers  (see  sample  HTML  below).       When  the  map  
>>> initially  starts,  I  call  roads.setVisibility(true);,  and   I  
>>> see  the  roads  layer  overlaid  on  top  of  the  aerial  
>>> photography  layer.   It  looks  fine  at  that  point...panning  
>>> works  fine.    Once  I  zoom  in  or   out,  however,  the  base  
>>> layer  (the  photography)  does  what  is  expected,   but  the  
>>> roads  layer  just  defaults  to  its  original  extent,  and  
>>> remains  at   the  initial  zoom  level.    Is  there  something  I  
>>> need  to  do  to  tie  the   roads  layer  to  the  zoom  event?
>>>  
>>>  If  this  is  a  known  issue,  or  if  I'm  just  missing  
>>> something,  maybe   someone  can  point  me  in  the  right  
>>> direction.    I'm  using  OpenLayers  2.6   (should  I  try  
>>> SVN?).    The  tile.php  script  is  something  that  I  have  
>>>  integrated  into  my  application  on  the  server  -  it's  
>>> generally  based  on   the  one  from  kamap  (checked  out  of  svn  
>>> about  a  month  ago),  but  I  don't   think  it's  the  source  of  
>>> this  issue  (i.e.,  if  I  make  the  roads  layer  the   base  
>>> layer  on  its  own,  it  works  fine).
>>>  
>>>  Thanks  in  advance  for  any  help,
>>>  Mike
>>>  
>>>  ======================================================================
>>>  
>>>  <html>
>>>  <head>
>>>      <title>OpenLayers    Example</title>
>>>          <script
>>>          
>>> src="https://localhost/application/js/lib/OpenLayers.js"></script>
>>>          </head>
>>>          <body>
>>>              <div    style="width:100%;    height:100%"    
>>> id="map"></div>
>>>              <script    defer="defer"    type="text/javascript">
>>>                  var    options    =    {
>>>                      maxExtent:    new  
>>>  OpenLayers.Bounds(1327479,4883397,1415461,5034462),
>>>                      scales:    
>>> [200000,150000,100000,75000,50000,25000,10000,5000],
>>>                      numZoomLevels:    8,
>>>                      tileSize:    new    OpenLayers.Size(400,300),
>>>                      projection:    "EPSG:4326",
>>>                      units:    "m"
>>>                  };
>>>                  var    map    =    new    
>>> OpenLayers.Map('map',options);
>>>                  var    aerials    =    new    
>>> OpenLayers.Layer.KaMap("mymap",
>>>                      "https://localhost/application/tile.php",
>>>                      {layers:"0",i:"AGG_JPEG",map:"mymap",g:"Aerial  
>>>  Photography",sid:"somesessionid"}
>>>                  );
>>>                  var    roads    =    new    
>>> OpenLayers.Layer.KaMap("mymap",
>>>                      "https://localhost/application/tile.php",
>>>  
>>>  {layers:"160",i:"alpha",map:"mymap",g:"Roads",sid:"somesessionid"},
>>>                      {numZoomLevels:8,scales:  
>>>  [200000,150000,100000,75000,50000,25000,10000,5000]}
>>>                  );
>>>                  map.addLayers([aerials,roads]);
>>>                  map.zoomToExtent(new  
>>>  OpenLayers.Bounds(1373558,4988812,1404038,5011460));
>>>                  roads.setVisibility(true);
>>>              </script>
>>>  </body>
>>>  </html>
>>>  
>>>     
>> _______________________________________________
>> Users mailing list
>> Users at openlayers.org
>> http://openlayers.org/mailman/listinfo/users
>>   
> 
> 



More information about the Users mailing list