Viac

Openlayers 3 nefunguje legenda

Openlayers 3 nefunguje legenda


Preto sa pokúšam zobraziť príslušnú legendu pre moju prvú mapu. Toto je môj javascript pre moju first_map.

funkcia firstmap () {var first_map = new ol.Map ({target: 'FirstMap', vrstvy: [new ol.layer.Tile ({title: 'OSM', source: new ol.source.OSM ()}), new ol.layer.Group ({title: 'Overlays', vrstvy: [new ol.layer.Tile ({title: '- NDVI', source: new ol.source.TileWMS ({url: 'http: // mygeonodeserver) .org/geoserver/wms ', parametre: {vrstvy:' geonode: xyz ', formát:' image/png '}, serverType:' geoserver '}), showLegend: true})]}})], zobrazenie: nový ol .Zobrazenie ({projekcia: 'EPSG: 900913', stred: [3930427, 359171], priblíženie: 6})}); first_map.addControl (new ol3_legend ({map: first_map, class: 'ol_legend'})); }

Skript get java, ktorý som dostal online, je uvedený nižšie

Vyššie uvedený skript nefunguje, pretože moje vrstvy sú zoskupené, tj. Nová skupina ol.layer


Dobre, váš problém vidím v úplných podrobnostiach. Nový kód musíte upraviť v dvoch bodoch.

  • Pozrite sa nashowLegendnehnuteľnosť.

Vaša prvá vrstva má príponuOSMzdroj, ktorý nemá príponugetUrlani agetUrlsfunkciu.

  • Vo vnorených slučkách nepoužívajte rovnaký názov premennej indexu.

Povedzme, že sa vám v prvej vrstve nezobrazí chyba. Druhá slučka sa nastavíina 0, prvá slučka príde znova a znova vyhľadá prvú vrstvu. Nekonečná slučka.

pre (var i = 0; i 

Tu je možné vidieť sofistikovanejšiu, rekurzívnu metódu.


Myslím, že stačí prejsť zoznam vrstiev vašej skupiny vrstiev (pozri api doc)

var vrstvy = options.map.getLayers (). getArray (); pre (var i = 0; i 

S trochou rekurzivity by to mohlo byť krajšie.


pomocou @oterrai som upravil svoj kód tak, aby mohol byť rekurzívny. riešenie pre tých, ktorí používajú ol3-layerwitcher

funkcia ol3_legend (e) {var options = e || {}; var wmsVersion = options.wmsVersion || „1.1.1“; var format = options.format || 'image/png'; var legendP = document.createElement ('p'); legendP.innerHTML = 'Legenda:'; var legendDiv = document.createElement ('div'); legendDiv.className = options.class + 'ol-unselectable'; legendDiv.appendChild (legendP); var vrstvy = options.map.getLayers (). getArray (); pre (var i = 0; i 

Pozri si video: #шляхвIT - Lead JavaScript Developer Випуск 10