[OpenLayers-Users] Zooming with multiple kamap layers

Alexandre Dube adube at mapgears.com
Tue Jul 29 10:58:03 EDT 2008


Mike,

You're welcome. By the way, did you know that there are some examples 
available on the openlayers web site ?

http://openlayers.org/dev/examples/example-list.html

You can check the code of each example ( view frame source ) to see how 
they work. That's how I began. Also, you can ask the mailing list to 
share some code snippet if you don't want to reinvent the wheel. :)

Good luck with your learning.

Best regards,

Alexandre

Mike Leahy wrote:
> 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
>>>   
>>>       
>>     
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>   


-- 
Alexandre Dubé
Mapgears
www.mapgears.com




More information about the Users mailing list