Loading geojson markers into mapbox setting custom icon image

后端 未结 2 546
再見小時候
再見小時候 2021-01-24 14:57

I\'m new to mapbox/leaflet and I think it\'s a pretty basic problem I\'m fighting the last two days and though I\'ve tried several ways I can\'t wrap my head around it.

相关标签:
2条回答
  • 2021-01-24 15:53

    I guess it's a typical beginners mistake and maybe it's just me but I found it pretty confusing in which context to use the several options of setIcon. In the end I made it work using .on(layeradd) and marker.setIcon(pathToYourIcon).

    ma_3.on('layeradd', function(layer) {
                this.eachLayer(function(marker) {
            if (marker.toGeoJSON().properties.title === 'Verpflegung') {
                marker.setIcon(icon_live);
            } 
    
            marker.bindPopup(marker.toGeoJSON().properties.id + ', ' +
                marker.toGeoJSON().properties.title);
        });
    });
    
    0 讨论(0)
  • 2021-01-24 16:01

    Have you seen this example yet?

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset=utf-8 />
    <title>Custom marker icons</title>
    <meta name='viewport' content='initial-scale=1,maximum-scale=1,user-scalable=no' />
    <script src='https://api.mapbox.com/mapbox.js/v2.2.2/mapbox.js'></script>
    <link href='https://api.mapbox.com/mapbox.js/v2.2.2/mapbox.css' rel='stylesheet' />
    <style>
      body { margin:0; padding:0; }
      #map { position:absolute; top:0; bottom:0; width:100%; }
    </style>
    </head>
    <body>
    <div id='map'></div>
    <script>
    L.mapbox.accessToken = '<your access token here>';
    var map = L.mapbox.map('map', 'mapbox.streets')
        .setView([40, -74.50], 8);
    
    var myLayer = L.mapbox.featureLayer().addTo(map);
    
    var geoJson = [{
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [-75.00, 40]
        },
        "properties": {
            "title": "Small astronaut",
            "icon": {
                "iconUrl": "/mapbox.js/assets/images/astronaut1.png",
                "iconSize": [50, 50], // size of the icon
                "iconAnchor": [25, 25], // point of the icon which will correspond to marker's location
                "popupAnchor": [0, -25], // point from which the popup should open relative to the iconAnchor
                "className": "dot"
            }
        }
    }, {
        "type": "Feature",
        "geometry": {
            "type": "Point",
            "coordinates": [-74.00, 40]
        },
        "properties": {
            "title": "Big astronaut",
            "icon": {
                "iconUrl": "/mapbox.js/assets/images/astronaut2.png",
                "iconSize": [100, 100],
                "iconAnchor": [50, 50],
                "popupAnchor": [0, -55],
                "className": "dot"
            }
        }
    }];
    
    // Set a custom icon on each marker based on feature properties.
    myLayer.on('layeradd', function(e) {
        var marker = e.layer,
            feature = marker.feature;
    
        marker.setIcon(L.icon(feature.properties.icon));
    });
    
    // Add features to the map.
    myLayer.setGeoJSON(geoJson);
    </script>
    </body>
    </html>
    

    *Source: https://www.mapbox.com/mapbox.js/example/v1.0.0/custom-marker/

    0 讨论(0)
提交回复
热议问题