[OpenLayers-Users] FW: Toggling layers without LayerSwitcher
Pierre GIRAUD
bluecarto at gmail.com
Tue Oct 7 15:38:53 EDT 2008
I think you'd better try to call setBaseLayer instead of setVisibility
on your layers.
Regards,
Pierre
On Tue, Oct 7, 2008 at 4:00 PM, Kimball, David (DCR)
<David.Kimball at state.ma.us> wrote:
>
> Hi everyone, I looked into this a bit more and I have a little more info
> on what's happening (although I still haven't solved the problem).
>
> If I create my map with both the layerswitcher control and my HTML
> radiobuttons:
>
> http://maps.massgis.state.ma.us/dcr/forestry11.html
>
> it becomes clear that the HTML radiobuttons are making layers
> visible/invisible, but the layerswitcher control is not updating to
> match the chosen layer.
>
> If I look at the requests being sent to the server using FireBug, it
> becomes clear that clicking an HTML radiobutton other than the
> default/top choice causes the correct request to be sent (i.e. the
> correct Layer with the correct STYLES is requested and the appropriate
> image is returned and displayed). Then, when a pan or zoom operation is
> performed on the map, an incorrect request is sent, with the
> top/original layer (with STYLE of DCR.TOWNS_POLYM_FORESTRY::SUSTCOM_SC
> for the main layer) being requested (probably because this is still the
> selected layer in the layerswitcher control?). An image is returned
> from the server showing the top/original layer instead of the user's
> selected layer, and the map does not get refreshed (probably because the
> top layer, in the returned image, is set to invisible).
>
> A few clarifications:
>
> 1) I want to have radiobuttons that are outside the map so that the user
> can't miss seeing them. I've had trouble getting the layerswitcher to
> appear where and how I want it when placing it outside the map, and I
> think the standard layerswitcher tool inside the map is too "hidden" for
> the likely users of this map.
>
> 2) Clicking a radiobutton needs to change the style that the towns layer
> uses to symbolize itself, update the legend graphic, and add a title
> above the legend. I'm not sure if the layerswitcher can trigger the
> latter two.
>
> 3) The way I've implemented this is to have one Layer in the map for
> each radiobutton. Clicking on a radiobutton makes all layers but that
> one invisible. I'm open to different approaches if anyone can think of
> one.
>
> 4) What's going wrong is that the radiobuttons don't properly change the
> layer. Clicking on them works at first, but then if you pan or zoom
> there is no redraw, because subsequent server requests are asking for
> the top/original layer, not the user-selected layer.
>
> I would greatly appreciate any reply!
>
> Thanks!
>
> --David
>
>
> -----Original Message-----
> Subject: Toggling layers without LayerSwitcher
>
>
> Hi everyone,
>
> I'm working on my first OpenLayers map and I'm having a problem with
> toggling layer visibility. I want to use an HTML form with radiobuttons
> to toggle the layers instead of the LayerSwitcher control. When I
> choose a layer other than the first layer in the list, it draws fine
> once but if you do any zooming or panning it will not redraw. If you
> choose the first layer, it works fine. Here's the map:
>
> http://maps.massgis.state.ma.us/dcr/forestry09.html
>
> The function that chooses the new layer is called changeSymbolization
> (it's called by the radiobuttons' change event). It loops through the
> layers and makes all but one invisible.
>
>
> function changeSymbolization(byField){
> var byFieldSplit = byField.toString().split(',');
> lz = map.layers;
> for (n=0; n < lz.length; n++) {
> lz[n].setVisibility(lz[n].name ==
> byFieldSplit[0]);
> }
> document.getElementById("theLegendTitle").innerHTML =
> byFieldSplit[1];
> document.getElementById("theLegend").src =
> "http://giswebservices.massgis.state.ma.us/geoserver/wms?VERSION=1.1.0&R
> EQUEST=GetLegendGraphic&LAYER=massgis:DCR.TOWNS_POLYM_FORESTRY&STYLE=DCR
> .TOWNS_POLYM_FORESTRY::" + byFieldSplit[0] +
> "&WIDTH=16&HEIGHT=16&FORMAT=image/png";
>
> }
>
>
> [this function is called by radiobuttons, for example]:
>
>
> <input type="radio" name="chosenSymbology"
> onclick="changeSymbolization(this.value)" value="FSCARS_SC,Towns
> symbolized by<br/>National Forest Service<br/>CARS Score:" /> Federal
> CARS score<br />
>
>
> After trying a few approaches, I set it up so there are 17 different
> layers added to the map, each of which contains all the background
> layers plus the foreground layer (which is symbolized by a different
> attribute in each layer). This is done in the init() function. I'm not
> sure this is the best way to do it, but when I tried having the
> background and foreground layers in separate layers, the foreground
> layer would block the background layers by drawing a white background on
> the whole map before drawing the foreground layer.
>
> [Here is what each layer looks like (there are 17 of these, each with a
> different name and different Style for one of the layers)]:
>
>
> IMPERV_PCT_Layer = new OpenLayers.Layer.WMS(
> "IMPERV_PCT",
> "http://giswebservices.massgis.state.ma.us/geoserver/wms",
> {
> width: '600',
> srs: 'EPSG:26986',
> layers:
> 'massgis:DCR.TOWNS_POLYM_FORESTRY,massgis:GISDATA.OCEANMASK_POLY,massgis
> :GISDATA.NEMASK_POLY,massgis:DCR.TOWNS_POLYM_FORESTRY,massgis:GISDATA.TO
> WNS_POLY',
> height: '358',
> styles:
> ',,GISDATA.NEMASK_POLY::Light_Yellow,DCR.TOWNS_POLYM_FORESTRY::IMPERV_PC
> T,GISDATA.TOWNS_POLY::Labels_Med',
> format: 'image/png'
> },
> {singleTile: true, ratio: 1}
> );
> IMPERV_PCT_Layer.setVisibility(0);
>
>
> [Here is how they're added to the map]:
>
>
> map.addLayers([SUSTCOM_SC_Layer,FSCARS_SC_Layer,ST_ASST_YN_Layer,MGTPLAN
> _YN_Layer,ADV_GRP_YN_Layer,LOC_ORD_YN_Layer,PROSTAF_YN_Layer,TREEINV_YN_
> Layer,TREECITYYN_Layer,OSPLAN_YN_Layer,PDENSQMI00_Layer,BUDGET_P_C_Layer
> ,UFORE_YN_Layer,STRATUM_YN_Layer,UCF_INDEX_Layer,CANOPY_COV_Layer,IMPERV
> _PCT_Layer]);
>
>
> I tried to find a similar example somewhere, but they seem to use the
> layerswitcher control and be really simple (Examples) or be so complex
> that I couldn't make heads of tails of them (Gallery).
>
> Does anyone have a suggestion for how to fix the redrawing problem, or a
> better approach to dealing with the layer switching that would solve the
> problem? Thank you for your help!
>
> --David
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>
More information about the Users
mailing list