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 :

Définition de variable depuis un GeoJson (=json) externe


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut Définition de variable depuis un GeoJson (=json) externe
    Bonjour,

    J'ai posé la question sur le forum GeoRezo dédié à la géomatique, mais il me semble que ma question est finalement purement liée au Javascript que je ne maitrise pas encore.
    Comme expliqué, j'utilise pour des cartes interactives des données externes stockées au format GeoJson, qui si j'ai bien compris n'est finalement qu'un fichier Json à composante spatiale.
    Mes fichiers GeoJson sont écrits de cette manière :
    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
    {
      "type": "FeatureCollection",
      "generator": "overpass-turbo",
      "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.",
      "timestamp": "2015-01-01T00:00:00Z",
      "features": [
        {
          "type": "Feature",
          "id": "relation/5000000",
          "properties": {
            "@id": "relation/5000000",
            "tags": "tagsvalue",
            "name": "Name",
            "type": "multipolygon"
          },
    ...etc...
    }
    et enregistrés dans des fichiers nom_fichier.geojson

    Pour pouvoir les utiliser dans des cartes interactive (bibliothèque Leaflet), je dois modifier manuellement mes fichiers pour définir une variable depuis leur contenu :
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var geoJsonData = [ contenu_de_mon_geojson ];
    Ce qui me permet ensuite d'appeler ces données de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var geoJsonLayer = L.geoJson(geoJsonData, { ...
    Il serait bien plus simple pour moi si je pouvais conserver les fichiers GeoJson tels que je les récupère, et définir la variable depuis la page HTML.

    Cela est-il possible ?

    Merci pour vos conseils.

    Sylvain M.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Tiens, en essayant de trouver la solution, je me demande si ce ne serait pas du côté de cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var geoJsonData = JSON.parse(mon_fichier.geojson);
    (je continue de chercher et d'essayer de mettre en service, mais si je fais fausse route, n'hésitez pas à me réorienter ! )

  3. #3
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    je ne sais pas comment tu lis ton fichier mais c'est var geoJsonData = JSON.parse(contenu_de_mon_fichier.geojson); qu'il te faut faire.

    A+JYT

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Tu veux dire que je ne peux pas récupérer le contenu du fichier sans l'ouvrir ? (par un procédé dont je ne maitrise certainement pas encore les rouage: j'ai vu fréquemment le terme "AJAX" dans mes recherches... Dois-je creuser dans ce sens ?)
    (désolé, je n'utilise certainement pas les bons termes...)
    Citation Envoyé par sekaijin
    je ne sais pas comment tu lis ton fichier [...]
    Pour l'instant, mon fichier "modifié" (par ajout manuel de la déclaration de variable) est "lu" (appelé ?) dans l'entête de la page HTML de cette manière : <script src="data/monfichier.geojson"></script>
    J'aimerai rester sur ce type d'appel, mais juste ajouter la définition de la variable de manière dynamique, sans avoir à modifier mon fichier geojson.

    Suis-je claire ? (j'en doute ! )

    Merci !

    Sylvain M.

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 658
    Billets dans le blog
    1
    Par défaut
    Suis-je claire ?
    Je pensais que c'était Sylvain

    En tout cas ce n'est las clair ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    C'est clair que je ne suis ni Claire, ni clair...
    Citation Envoyé par Grenouille de l'espace
    En tout cas ce n'est las clair ...
    Mais je ne suis pas las pour pour autant

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Donc pour tenter d'être plus clair (sans opération chirurgicale), je vais essayer de reformuler, en plus court.

    Question :
    Je souhaite ajouter dynamiquement la déclaration d'une variable basée sur le contenu d'un fichier GeoJson appelé dans l'entête de mon fichier HTML (<script src="data/monfichier.geojson"></script>).
    Est-ce possible en pur javascript ? (et si oui, comment)

    Merci à vous !

    Sylvain M.

  8. #8
    Expert confirmé
    Avatar de sekaijin
    Homme Profil pro
    Urbaniste
    Inscrit en
    Juillet 2004
    Messages
    4 205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Urbaniste
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2004
    Messages : 4 205
    Par défaut
    effectivement il te faut en passer par ajax
    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
    // la fonction qui utilise les données.
    function utiliserLaReponse(json) {
      alert(json.features[0].type)
    }
     
     
    //la lecture du fichier
    var xhttp;
    if (window.XMLHttpRequest) {
        xhttp = new XMLHttpRequest();
        } else {
        // code for IE6, IE5
        xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xhttp.open("GET", "data/monfichier.geojson", true);
    xhttp.onreadystatechange = function() {
      if (xhttp.readyState == 4 && xhttp.status == 200) {
        utiliserLaReponse(JSON.parse(xhttp.responseText));
      }
    }
    xhttp.send();
    A+JYT

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Bon et bien je dois me rendre à l'évidence : je n'ai clairement pas le niveau pour cela...
    Je pense que je vais me contenter d'ajouter manuellement "var mavar = [...];" à mes fichiers geojson : ce sera plus rapide pour moi que d'apprendre ce langage Ajax...
    (mais bon, je le garde sous le coude quand même, pour le jour où je deviendrai développeur !)
    Merci pour votre aide et votre indulgence !

    Sylvain M.

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Merci encore sekaijin pour ce code,
    Bon, vu le temps qu'il va me faire gagner au final, je pense que ça vaut quand même la peine que j'essaie d'adapter ces quelques lignes de codes à mes besoins.
    Du coup, j'aurai quand même besoin d'un peu plus d'explications, si c'est possible pour toi :
    Si je place ce code dans ma page, je vois bien la partie qui fait référence à la source du fichier geojson, mais je ne vois pas celle qui fait référence au nom de la variable créée par le script : peux-tu m'indiquer où cela s'écrit-il ?
    Est-ce que c'est "xhttp" ?
    Merci et désolé pour cette question de "newbie"
    A+

    Sylvain M.

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Finalement, je viens de voir qu'il existe (si je comprends bien) un bibliothèque pour gérer ce cas précis, dans l'environnement de Leaflet :
    https://github.com/calvinmetcalf/leaflet-ajax
    Je vais d'abord creuser dans ce sens, et si je n'y arrive pas je reviendrai ici.
    A+

    Sylvain M.

  12. #12
    Modérateur

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

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 202
    Par défaut
    Bonjour,
    au final tu vas utiliser ce que t'a proposé sekaijin

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    366
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 366
    Par défaut
    Oui, c'est vrai qu'en regardant le code source du plugin, je retrouve pas mal de similarités avec le code de sekaijin
    Pour moi, c'est juste plus facile à intégrer sous forme de plugin, mais je conviens que ce serait certainement plus propre de l'intégrer directement.
    En tout cas, merci de votre indulgence !
    A+

    Sylvain M.

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

Discussions similaires

  1. Appeler depuis php module vbs externe avec variable
    Par Chrysostome dans le forum VBScript
    Réponses: 0
    Dernier message: 25/01/2016, 20h36
  2. Réponses: 6
    Dernier message: 14/03/2007, 22h04
  3. [FLASH MX] Variables depuis un fichier txt
    Par mascagne dans le forum Flash
    Réponses: 4
    Dernier message: 01/03/2006, 17h57
  4. Réponses: 10
    Dernier message: 06/10/2005, 22h25
  5. Réponses: 5
    Dernier message: 08/09/2005, 20h33

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