IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Mapbox non détectée dans la définition d'une classe


Sujet :

JavaScript

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 144
    Points : 79
    Points
    79
    Par défaut Mapbox non détectée dans la définition d'une classe
    Bonjour,

    Je débute avec les classes, j'ai déjà quelques notions mais pas suffisamment pour faire ce que je souhaite faire.

    J'ai une appli web carto dans laquelle j'ai des couches qui sont affichées via l'appel à des fonctions qui utilisent Mapbox. Le problème est que le code est particulièrement lourd désormais et ça devient difficile à bouger.

    Une évolution récente de l'application est la présence de modules. Historiquement, l'appli de base était une appli spécifique à une seule thématique, cette appli tend désormais à s'universaliser avec d'autres thématiques. D'où l'apparition de notions de modules, de classes....

    Donc j'aimerais intégrer toutes mes fonctions dans une classe... sauf que les prototypes Mapbox ne sont pas reconnus dans ma classe.

    Quand j'exécute le code suivant, j'ai un retour console : "map.addSource is not a function"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var module_carte = new Module_Carte({
      map:map
    });
    module_carte.add(map);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    class Module_Carte {
      constructor (map){
        this._map = map;
        this._style = 'url/tileset.json';
      }
     
      add(map){
        map.addSource('src', {
          type: 'vector',
          url: this._style
        });
     
        map.addLayer({
          'id': 'layer',
          "type": 'circle',
          'source': 'src',
          'source-layer': 'src_carte',
          'maxzoom': 24,
          'minzoom': 1,
          "paint":{
            "circle-radius": [
              'interpolate',
              ['linear'],
              ['zoom'],
              7, 3,
              14, 6
            ],
            "circle-color" : "#00A3CB",
            "circle-stroke-width": 1,
            "circle-stroke-color": "#00495B"
          }
      });
      }
     
    }
    Que dois-je modifier dans ce code pour que cela fonctionne ?

    Merci pour vos retours,

    Sylvain

  2. #2
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Bonjour,
    une première interrogation, pourquoi dans ta class qui attend une variable en paramètre map, constructor (map) alors que dans la création d'un objet tu passes un objet {map: map}.

    Regarde ce que vaut map dans ta méthode :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      add(map){
        console.log("add :",map);
        map.addSource('src', {
          //  ...
        }

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 144
    Points : 79
    Points
    79
    Par défaut
    map est définie avec tous les paramètres de la carte

    Nom : Capture d’écran du 2023-09-19 20-15-53.png
Affichages : 138
Taille : 285,6 Ko

    Le problème est que "addSource" fait parti des prototypes....

    Nom : Capture d’écran du 2023-09-19 20-18-06.png
Affichages : 134
Taille : 217,3 Ko

    Merci

  4. #4
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 075
    Points : 44 657
    Points
    44 657
    Par défaut
    Le problème est que "addSource" fait parti des prototypes....
    pas pu reproduire ton erreur, l'erreur est donc ailleurs, mais il nous manque quand même le contexte d’exécution.

    Nota : je m'interroge quand même sur l'utilité de créer une classe pour cela !

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2018
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 144
    Points : 79
    Points
    79
    Par défaut
    J'ai abandonné et effectivement il n'était pas forcément utile de passer par une classe...

    Merci pour vos retours

    Sylvain

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Syntaxe dans la définition d'une classe
    Par potozuzu dans le forum Général Python
    Réponses: 2
    Dernier message: 16/06/2018, 07h27
  2. Réponses: 4
    Dernier message: 13/06/2008, 10h09
  3. Réponses: 3
    Dernier message: 27/06/2007, 11h18
  4. Réponses: 2
    Dernier message: 03/05/2007, 17h17
  5. Réponses: 29
    Dernier message: 17/06/2006, 13h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo