Ik heb uren zitten te prutsen en alle oplossingen bekeken, maar ik ben helemaal op en mijn hoofd zit even vast (hoofdpijn dus) en daarom ga ik even hulp vragen voor mijn probleem.
Ik ben bezig met een map website voor Black Desert Online.
Leaflet script is gebruikt. Werkt prima. Map zoom en alles doet het.
De volgende stap zijn de iconen toevoegen als nodes.
Dit werkt met:
Het is rommeltje, maar wel een example. Het gaat via ajax aanroep van een php bestand die dit aanmaakt.
Het verschijnt keurig op het map. Dat is wel met deze:
Het is via function, maar het werkt goed.
Dan heb je ook een layer controle. Ik wil even losse checkbox maken, niet via standaard weg.
Niks bijzonders zou je denken.
Maak ik een functie hiervoor:
Je zou verwachten dat layer switch zou werken. Niet dus. Firefox smijt met een foutmelding:
TypeError: t.onAdd is not a function
(server)/script/leaflet.js
Hetzelfde voor remove, met t.onRemove fout.
Het leek erop dat de function boven opeens "eigen" veld heeft en dus niet meer map kan zien.
Waarom het niet werkt, dat is mij de vraag.
Kan iemand me even uitleg geven over mijn probleem en me in goede richting wijzen hoe het wel moet zodat map.addLayer en map.removeLayer weer gewoon werken zoals het hoort.
Dit is grote struikelblok waarom het niet werkt en moet dus opgelost worden zodat ik rest kan afmaken. Er komen nog paar layers bij met controle en daar wil ik niet weer in problemen komen.
Ik weet wel dat als ik removeLayer in de HTML script plaats, dat wil het wel. Net even "buitenom" met de function aanroep gaat het niet. Er is ergens kleine aanpassing nodig om alsnog te kunnen werken zonder foutmelding. De probleem is nagetrokken, maar er is geen goed passend uitleg.
Alternatief is een event listener gebruiken op hele pagina, verandering checkbox registeren en doorgeven, maar dat is ook met function (). Daar wacht ik even op, om te kijken of jullie een oplossing hebben voor mij.
Alvast dank!
*gaat even zijn hoofd afkoelen*
Ik ben bezig met een map website voor Black Desert Online.
Leaflet script is gebruikt. Werkt prima. Map zoom en alles doet het.
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| <script> var map = L.map('right').setView([-39.3683,-67.5], 3); mapLink = '<a href="http://www.blackdeserttome.com/map/">Black Desert Tome Map</a>'; L.tileLayer( 'images/map/{z}/{x}/{y}.png', { attribution: 'Map data © ' + mapLink, tms: true, continuousWorld: true, maxZoom: 7, minZoom: 2 } ).addTo(map); map.on('click', onMapClick); L.control.coordinates().addTo(map); // load layers loadnode_layer(); </script> |
De volgende stap zijn de iconen toevoegen als nodes.
Dit werkt met:
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| /* icons */ var nodeicon_8 = new LeafIcon({iconUrl: 'data/alchemy.png'}); var nodeicon_5 = new LeafIcon({iconUrl: 'data/camp.png'}); var nodeicon_6 = new LeafIcon({iconUrl: 'data/capital.png'}); var nodeicon_3 = new LeafIcon({iconUrl: 'data/connect.png'}); var nodeicon_10 = new LeafIcon({iconUrl: 'data/hazardous.png'}); var nodeicon_4 = new LeafIcon({iconUrl: 'data/plant.png'}); var nodeicon_11 = new LeafIcon({iconUrl: 'data/tree.png'}); var nodeicon_9 = new LeafIcon({iconUrl: 'data/gateway.png'}); var nodeicon_7 = new LeafIcon({iconUrl: 'data/trade.png'}); var nodeicon_2 = new LeafIcon({iconUrl: 'data/city.png'}); /* map */ var NodeMarkersObject = {}; NodeMarkersObject['node1'] = L.marker([-39.14710270770074,-117.18017578125], {icon: nodeicon_2}).bindPopup('Olvia'); NodeMarkersObject['node2'] = L.marker([-42.78733853171998,-99.68994140625], {icon: nodeicon_6}).bindPopup('Velia'); NodeMarkersObject['node3'] = L.marker([-42.90816007196054,-105.391845703125], {icon: nodeicon_6}).bindPopup('Test'); NodeMarkersObject['node4'] = L.marker([-42.82763863624229,-107.11669921875], {icon: nodeicon_6}).bindPopup('Great'); NodeMarkersObject['node5'] = L.marker([-43.87413818147472,-105.71044921875], {icon: nodeicon_6}).bindPopup('Super'); NodeMarkersObject['node6'] = L.marker([-44.07180046751155,-107.786865234375], {icon: nodeicon_6}).bindPopup('Leeg'); NodeMarkersObject['node7'] = L.marker([-43.45291889355465,-107.40234375], {icon: nodeicon_6}).bindPopup('fffff'); NodeMarkersObject['node8'] = L.marker([-44.26093725039922,-105.22705078125], {icon: nodeicon_6}).bindPopup('tttt'); NodeMarkersObject['node9'] = L.marker([-44.05601169578525,-110.91796875], {icon: nodeicon_8}).bindPopup('boem'); NodeMarkersObject['node10'] = L.marker([-38.75408327579141,-99.580078125], {icon: nodeicon_10}).bindPopup('Castle'); NodeMarkersObject['node11'] = L.marker([-57.13623931917743,-112.8515625], {icon: nodeicon_11}).bindPopup('555555'); NodeMarkersObject['node12'] = L.marker([-59.5343180010956,-123.04687499999999], {icon: nodeicon_3}).bindPopup('fhj'); NodeMarkersObject['node13'] = L.marker([-56.36525013685607,-137.109375], {icon: nodeicon_3}).bindPopup('ygygf'); NodeMarkersObject['node14'] = L.marker([-51.39920565355377,-104.765625], {icon: nodeicon_9}).bindPopup('Gddddd'); NodeMarkersObject['node15'] = L.marker([-57.51582286553883,-106.5234375], {icon: nodeicon_6}).bindPopup('ghj'); NodeMarkersObject['node16'] = L.marker([-59.7120971733229,-83.3203125], {icon: nodeicon_3}).bindPopup('jaap'); NodeMarkersObject['node17'] = L.marker([-47.63578359086485,-125.41992187499999], {icon: nodeicon_5}).bindPopup('dddddd'); var nodelayer = L.layerGroup([NodeMarkersObject['node1'],NodeMarkersObject['node2'],NodeMarkersObject['node3'],NodeMarkersObject['node4'],NodeMarkersObject['node5'],NodeMarkersObject['node6'],NodeMarkersObject['node7'],NodeMarkersObject['node8'],NodeMarkersObject['node9'],NodeMarkersObject['node10'],NodeMarkersObject['node11'],NodeMarkersObject['node12'],NodeMarkersObject['node13'],NodeMarkersObject['node14'],NodeMarkersObject['node15'],NodeMarkersObject['node16'],NodeMarkersObject['node17']]); if (map.hasLayer(nodelayer)) { map.removeLayer(nodelayer); } map.addLayer(nodelayer); var checkboxid=document.getElementById('nodelayer'); checkboxid.checked=true; /* end node icons */ |
Het is rommeltje, maar wel een example. Het gaat via ajax aanroep van een php bestand die dit aanmaakt.
Het verschijnt keurig op het map. Dat is wel met deze:
JavaScript:
1
2
3
| function loadnode_layer() { getxmlhttp('node_icons.php','','mode=map','code'); } |
Het is via function, maar het werkt goed.
Dan heb je ook een layer controle. Ik wil even losse checkbox maken, niet via standaard weg.
HTML:
1
2
| <div id="headmenu"> <input type="checkbox" value="1" name="nodelayer" id="nodelayer" onclick="switch_nodelayer()" /> Show Nodes</div> |
Niks bijzonders zou je denken.
Maak ik een functie hiervoor:
PHP:
1
2
3
4
5
6
7
| function switch_nodelayer() { var checkboxid=document.getElementById('nodelayer'); if (checkboxid.checked==true) { map.addLayer(nodelayer); } else { map.removeLayer(nodelayer); } } |
Je zou verwachten dat layer switch zou werken. Niet dus. Firefox smijt met een foutmelding:
TypeError: t.onAdd is not a function
(server)/script/leaflet.js
Hetzelfde voor remove, met t.onRemove fout.
Het leek erop dat de function boven opeens "eigen" veld heeft en dus niet meer map kan zien.
Waarom het niet werkt, dat is mij de vraag.
Kan iemand me even uitleg geven over mijn probleem en me in goede richting wijzen hoe het wel moet zodat map.addLayer en map.removeLayer weer gewoon werken zoals het hoort.
Dit is grote struikelblok waarom het niet werkt en moet dus opgelost worden zodat ik rest kan afmaken. Er komen nog paar layers bij met controle en daar wil ik niet weer in problemen komen.

Ik weet wel dat als ik removeLayer in de HTML script plaats, dat wil het wel. Net even "buitenom" met de function aanroep gaat het niet. Er is ergens kleine aanpassing nodig om alsnog te kunnen werken zonder foutmelding. De probleem is nagetrokken, maar er is geen goed passend uitleg.
Alternatief is een event listener gebruiken op hele pagina, verandering checkbox registeren en doorgeven, maar dat is ook met function (). Daar wacht ik even op, om te kijken of jullie een oplossing hebben voor mij.
Alvast dank!
*gaat even zijn hoofd afkoelen*
[ Voor 4% gewijzigd door MrDummy op 08-03-2016 19:05 ]