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

Bibliothèques & Frameworks Discussion :

[Turf] Créer un nouveau layer GeoJson de centroïdes


Sujet :

Bibliothèques & Frameworks

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut [Turf] Créer un nouveau layer GeoJson de centroïdes
    Bonjour à tous,

    Je me débrouille plus ou moins avec Leaflet, et mes cartes sont de plus en plus performantes.
    J'ai découvert hier la bibliothèque Turf (http://turfjs.org/), et celle-ci m'ouvre pas mal de perspectives géomatiques
    Mon objectif du moment est de créer un layer de points, à partir d'un layer de polygones (multipolygones), grâce à la fonction turf.centroid().

    Mon layer de polygones est un GeoJson de type FeatureCollection.

    J'ai écris cette fonction (en m'inspirant de celle de ce JSFiddle) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function ToCentroid(polyList) {
      for (var i = 0; i < polyList.length; ++i)
      return L.geoJson(turf.centroid(polyList[i].toGeoJSON()));
    }
    Fonction que j'appelle ensuite pour charger mon GeoJson ponctuel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var MaillesLayerPoint = ToCentroid(MaillesLayerPoly.getLayers()).addTo(map);
    Mais je dois faire une erreur, car seule une entité de mon GeoJson est convertie en Centroïd.

    Vous pourrez le constater sur ce JSFiddle de tests :
    http://jsfiddle.net/w783dp2c/

    Merci d'avance à ceux qui pourront m'aider à utiliser cette fonction !

    Sylvain M.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    J'avance un peu : je crois que cette fonction est plus proche de l'objectif visé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    function ToCentroid(polyList) {
    	var centroidgroup = L.layerGroup();
      for (var i = 0; i < polyList.length; ++i) {
      var centroidtemp = turf.centroid(polyList[i].toGeoJSON());
      centroidgroup.addLayer(L.geoJson(centroidtemp));
        }
      return centroidgroup;
      }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Voici un JSFiddle qui montre que ça marche mieux : http://jsfiddle.net/b6k1aeho/

    Maintenant, ce n'est pas encore tout à fait bon car je me rends compte que les propriétés du GeoJSON source ne sont pas conservées avec la transformation.
    Quand on interroge les entités ponctuelles sur la carte (via la popup du onEachFeature), les properties sont undefined...

    Verriez-vous comment les conserver dans le L.layerGroup() ?

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Si je lis la description de la fonction Centroid : http://turfjs.org/docs/#centroid
    Je vois que les propriétés sont un argument :
    Argument Type Type
    geojson GeoJSON GeoJSON to be centered
    properties Object an Object that is used as the Feature 's properties

    Mais je ne sais pas comment je dois écrire cela dans la fonction... (désolé, je bidouille vraiment en JS !)
    J'ai tenté var centroidtemp = turf.centroid(polyList[i].toGeoJSON(), polyList[i].properties);Mais ça ne fonctionne pas... (cf. : http://jsfiddle.net/b6k1aeho/4/)

    [Poursuite de me recherche...]
    Je me rends compte qu'il fait écrire polyList[i].feature.properties et non polyList[i].properties. Malgré tout, ça ne fonctionne toujours pas...


    [Poursuite de me recherche...] (bis)
    Au cas où, j'ai posé la question sur le GitHub de Turf : https://github.com/Turfjs/turf/issues/1466
    A suivre...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 132
    Points
    132
    Par défaut
    Je viens de trouver !!!
    C'était bien centroidtemp = turf.centroid(polyList[i].toGeoJSON(), polyList[i].feature.properties)Mais ça ne marchait pas car je n'étais pas sur la bonne dernière version de Turf.js !
    Ça marche avec la version https://unpkg.com/@turf/turf@4.4.0/turf.min.js, comme vous pourrez le constater sur ce JSFiddle : http://jsfiddle.net/jwnzqmxf/

    (c'est un monologue, ce fil, mais ça m'a quand même permis de trouver la solution )

    Si malgré tout, vous trouvez que ce code n'est pas propre , ça ne me vexera pas si vous avez des optimisations !

    Bon weekend !

    Sylvain M.

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

Discussions similaires

  1. Créer un nouveau répertoire
    Par PrinceMaster77 dans le forum ASP
    Réponses: 3
    Dernier message: 30/08/2005, 13h31
  2. Créer un Nouveau User System (SYSDBA)....
    Par silmortes dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 27/06/2005, 12h45
  3. [Conception] Créer un nouveau composant
    Par DamCalle dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 14/06/2005, 11h45
  4. Comment créer un nouveau dossier par programmation ?
    Par annecyrond dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2003, 07h59

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