Dépliant: comment utiliser un marqueur personnalisé sur une couche geojson?

9

J'essaie de mettre sur une carte Leaflet un geojson et tout fonctionne bien jusqu'à ce que j'utilise le marqueur bleu par défaut.

Maintenant, j'aimerais utiliser un marqueur personnalisé (une petite icône .png) et j'ai changé mon code dans la suite

 var my_json;
 $.getJSON('../Dati/my-geojson.geojson', function(data) {
           my_json = L.geoJson(data, {
            pointToLayer: function(feature, latlng) {
                var smallIcon = L.Icon({
                    options: {
                        iconSize: [27, 27],
                        iconAnchor: [13, 27],
                        popupAnchor:  [1, -24],
                        iconUrl: 'icone/chapel-2.png'
                    }
                });
                return L.marker(latlng, {icon: smallIcon});
            },
           onEachFeature: function (feature, layer) {
                   layer.bindPopup(feature.properties.ATT1 + '<br />'
                                                 + feature.properties.ATT2);
           }
         });
 my_json.addTo(markers.addTo(map));
 TOC.addOverlay(my_json, "My layer name in TOC");
 map.removeLayer(my_json); 
 });

l'erreur que je peux voir dans Firebug est

TypeError: this.options.icon is undefined
var anchor = L.point(this.options.icon.options.popupAnchor || [0, 0]);

quelque chose ne va pas mais je ne sais pas comment y remédier.

Cesare
la source

Réponses:

8

Changez juste

 var smallIcon = L.Icon({
   options: {
     iconSize: [27, 27],
     iconAnchor: [13, 27],
     popupAnchor:  [1, -24],
     iconUrl: 'icone/chapel-2.png'
   }
 });

à

 var smallIcon = new L.Icon({
     iconSize: [27, 27],
     iconAnchor: [13, 27],
     popupAnchor:  [1, -24],
     iconUrl: 'icone/chapel-2.png'
 });

Voir la documentation officielle des icônes et ce tutoriel .

Vous ne l'utilisez pas newpour L.Icon (C'est supposé ne pas être obligatoire mais sans lui, nous avons rencontré un problème ...)

Voir une démo réutilisant votre échantillon.

Votre syntaxe devrait fonctionner lors de l'extension de la L.Iconclasse.

ThomasG77
la source
Merci ThomasG77 pour la réponse. J'ai essayé votre suggestion, mais quelque chose ne fonctionne toujours pas. Firebug me dit encore ... "TypeError: this.options.icon n'est pas défini var anchor = L.point (this.options.icon.options.popupAnchor || [0, 0]);".
Cesare
L.Icondevrait êtrenew L.Icon
ThomasG77
Ni le document ni le didacticiel n'utilisent "nouveau". Je pense que c'est facultatif.
Ed Staub
Vous avez raison en théorie, mais copiez mon exemple de code de démonstration et supprimez-le newsans ... Je n'ai pas d'explication ici :(
ThomasG77
3

Pardonnez-moi si je me trompe car je suis un peu nouveau, mais j'ai remarqué que vous l'avez orthographié comme L.Icon avec un I majuscule . Peut-être que la version est plus récente ou quelque chose comme ça, mais ça ne marche pas quand je l'écris de cette façon. L.icon avec un petit je fonctionne bien pour moi.

Vous avez également utilisé le petit nom de cas dans l'instruction de retour.

Zeyar Khin Htun
la source