javascript - Multiple info boxes showing up when I click on map (GeoServer layers) -


i have created map using layers added in geoserver.

i created getfeatureinfourl function attribute table when clicking on layer. when click on map, info boxes of layers show up. if layer (which on top of layer) turned off, attribute information comes up.

how can make 1 info box shows @ time? (so if 2 layers on top of each other , user click on map, attribute information of layer on top of other show up.)

one user online explained me how did not provide code. offered following explanation:

  • loop on layers list
  • call get("visible") on each layer visibility status set layer switcher
  • for each visible layer, append name list of visible layer names
  • join list of visible layer names single string containing comma-separated layer names
  • pass string of comma-separated visible layer names additional parameter query_layers in map in last argument of testsource.getgetfeatureinfourl"

how can create code?

html:

<!doctype html> <html>   <head>         <title>map</title>         <link rel="stylesheet" href="http://openlayers.org/en/v3.12.1/css/ol.css">         <link rel="stylesheet" href="ol3-layerswitcher.css">         <script src="http://openlayers.org/en/v3.12.1/build/ol.js"></script>         <script src="ol3-layerswitcher.js"></script>    </head>   <body>     <div id="map" style="width:100%;"></div>     <script src="javascript4.js"></script>     <div id="info2"></div>     <div id="info3"></div>   </body> </html> 

javascript:

var testsource2 = new ol.source.tilewms({ url: 'http://localhost:8080/geoserver/wms', params: {'layers': 'marine:great_britain', 'tiled': true},     servertype: 'geoserver' });  var testsource3 = new ol.source.tilewms({ url: 'http://localhost:8080/geoserver/wms', params: {'layers': 'marine:bedrock_geology', 'tiled': true},     servertype: 'geoserver' });  var layers = [     new ol.layer.tile({       source: new ol.source.mapquest({layer: 'osm'})     }),          new ol.layer.group({             title: 'layers',             layers: [                  //implementing layers                  new ol.layer.tile({                     title: 'great britain',                     source: testsource2                 }),                  new ol.layer.tile({                     title: 'geology - bedrock',                     source: testsource3                 }),             ]         })   ];    var map = new ol.map({     layers: layers,     target: 'map',     view: new ol.view({       center: [51480.6, 7216744.2], //uk       zoom: 5     })   });    //function features layer map.on('singleclick', function(evt) {     document.getelementbyid('info2').innerhtml = '';     viewresolution = map.getview().getresolution();     var url = testsource2.getgetfeatureinfourl(         evt.coordinate, viewresolution, 'epsg:3857',         {'info_format': 'text/html'});     if (url) {       document.getelementbyid('info2').innerhtml =           '<iframe seamless src="' + url + '"></iframe>';     } });  //function features layer map.on('singleclick', function(evt) {     document.getelementbyid('info3').innerhtml = '';     viewresolution = map.getview().getresolution();     var url = testsource3.getgetfeatureinfourl(         evt.coordinate, viewresolution, 'epsg:3857',         {'info_format': 'text/html'});     if (url) {       document.getelementbyid('info3').innerhtml =           '<iframe seamless src="' + url + '"></iframe>';     } });     //layer switcher turn layers on , off    var layerswitcher = new ol.control.layerswitcher({    tiplabel: 'legend' }); map.addcontrol(layerswitcher); 

i believe issue lies not check in map.on('singleclick') layer being clicked on. create single map.on('singleclick') handler, since code in both listeners same.

map.foreachfeatureatpixel(e.pixel, function (feature, layer) {     var source = layer.getsource();            ... }); 

now source layer have clicked on , able use mentioned code.


Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -