Table of contents
Avertissement : ce plugin ne fonctionne que sur les sites qui utilisent une base de données MySQL en version 4.1 minimum, car la gestion des données spatiales est uniquement disponible depuis cette version. La compatibilité avec les bases SQLite sera peut-être ajoutée par la suite.
Présentation et installation
GIS Geometries est une extension du plugin GIS, il est donc nécessaire d’installer celui-ci auparavant.
Le plugin utilise les librairies Leaflet Draw et geoPHP. Cette dernière sera téléchargée automatiquement lors de l’activation du plugin GIS Gemoetries.
Fonctionnalités :
- possibilité de dessiner des formes géométriques à la main
- possibilité de définir le style des formes géométriques (si l’option correspondante est activée dans la page de configuration de GIS)
- import/export les données aux formats GPX et KML.
Fonctionnement
Dans l’espace privé
Lors de la création d’un nouvel objet géolocalisé, le plugin ajoute trois boutons visibles sous les boutons de zoom dans la capture d’écran suivante. Ces boutons permettent de choisir le type de forme à dessiner : un point, un polygone ou une ligne.

Après avoir cliqué sur le type de forme souhaité, vous pouvez commencer à tracer la forme en cliquant sur la carte.
Le plugin ajoute aussi un champ “Importer” dans le formulaire afin de créer une forme géométrique à partir d’un fichier GPX ou KML. Il devient ainsi possible d’importer des formes complexes comme les contours d’un département par exemple (récupérés depuis le site karamelise.fr par exemple).

Une fois importés ou dessinés, les objets géolocalisés du site peuvent être exportés au format GPX ou KML depuis leur page de “vue”.
Lors de la modification d’un objet géolocalisé il est possible de :
- déplacer un point de l’objet en le faisant glisser,
- supprimer un point de l’objet en cliquant sur celui-ci,
- ajouter un nouveau point intermédiaire en cliquant sur celui-ci.

Dans l’espace public
Vous n’avez rien à faire de spécial :) Les squelettes JSON fournis par GIS prennent automatiquement l’affichage des nouveaux types d’objets dans les cartes de votre site.
Si vous utilisez des anciens squelettes JSON personnalisés, vous pouvez les adapter à GIS Geometries en remplaçant :
"geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
par :
["geometry": (#GEOMETRY|wkt_to_json),]
Ainsi vos squelette persos prendront en charge les lignes et les polygones en plus des points.
Remarques
Si vous désactivez GIS Geometries les lignes et les polygones de vos cartes seront affichés sous forme de points correspondants au centre de la forme géométrique.
Malgré cela, il est recommandé de désinstaller le plugin si vous n’en avez plus besoin, afin d’être certain d’effacer le champ geo
(de type GEOMETRY) de la table gis
, sans quoi vous rencontrerez une erreur SQL lors de la création d’un nouveau point avec GIS.
Si votre carte affiche des lignes ou des polygones, l’activation du clustering fonctionnera uniquement sur les points (cf paramètre cluster
du modèle de GIS), et les autres formes ne seront pas affichées.
Discussions par date d’activité
21 discussions
Bonjour b_b,
Sur un point qui contient une kml importée : si on supprime ce tracé + enregistrer, on ne dispose plus de l’input pour importer un nouveau kml. Il ne reste plus que le choix d’ajouter un marker, trait, polygone.
... où bien ai-je oublié quelque chose ?
françois
Oui c’est voulu, car une fois un objet créé son type de forme est gravé dans le marbre, et comme l’import d’un kml peut faire varier ce type, on ne le propose qu’à la création (désolé pour le délai de réponse).
OK, je comprends le principe.
Merci pour ta réponse;-)
Reply to this message
Bonjour,
Bravo et merci beaucoup, pour vos réalisations, qui disposent de nombreuses fonctionnalités.
Je suis un peu “Monsieur +”, en effet pour pouvoir réaliser des polygones plus précis (ou des lignes, des traces), serait-il possible de choisir le mode “plein écran” qui existe du côté public, mais pas privé?
Bonne journée.
Michel
http://laccreteil.fr
Reply to this message
cluster=oui est-il incompatible avec Géométrie ?
J’ai cette erreur dans la console (avec Opera Chromium) :
VM4084:8 Uncaught TypeError: Cannot read property ’lat’ of null
Le code d’appel :
Si j’enlève le “cluster=oui,”, je n’ai plus d’erreur et ma carte s’affiche.
Ah, c’était dans la doc juste au-dessus : « Si votre carte affiche des lignes ou des polygones, veillez bien à ne pas activer le clustering. »
Mais, ceci lu, est-ce qu’il ne serait pas pertinent :
ainsi, on pourrait mettre dans toutes les boucles de GIS type ? sans que ça plante le compilo si GISGEOM n’est pas installé
Bug de images/marker_default.png résolu par http://zone.spip.org/trac/spip-zone/changeset/96411
Merci
Le bug du cluster est “corrigé” et la doc est à jour sur ce point, cf :
Reply to this message
b_b,
Peut-on passer des paramètres pour interagir avec la couleur/transparence d’un polygone, du style :
au lieu de modifier en dur les paramètres dans leaflet-src.js, ligne 8768 et suivantes ?
Merci,
françois
Oups : surement un bonne piste ici, comme indiqué dans la doc de GIS :
http://leafletjs.com/reference.html#path-options
Hmmmm,
ne semble pas faire son effet... vert ;)
http://leafletjs.com/reference.html#path-color attend un code couleur plutôt qu’un nom ;)
J’ai essayé plusieurs méthodes couleurs :
ne fonctionne pas non plus.
Pourtant dans le fichier leaflet-src.js :
prend bien du bleu et un trait de 1px de large :(
Ha mais oui, pas certain que ça passe en l’utilisant depuis le modèle, voilà comment je l’utilise depuis un appel dans un squelette :
Bonjour,
Ne serait-il pas possible de permettre un choix de coloris pour les lignes et les polygones (ligne et remplissage - si possible choix différents pour ces deux éléments), comme cela se fait pour le choix du logo (Qui disparait lorsque l’on utilise ces deux choix et non un point)?
Merci beaucoup, pour la richesse des fonctions et des variables!
Michel
Reply to this message
Merci pour ce plugin qui est un précieux complément au plugin GIS.
Serait-il possible d’envisager une amélioration permettant de dessiner plusieurs polygones pour un même point.
Ce serait utile pour certaines cartes. Par exemple, le golfe du Morbihan, composé de plus d’une centaine d’îles. Ou plus simplement, la France et la Corse ensemble... etc.
Pierrick
Salut, non l’interface ne permet pas de dessiner plusieurs formes par objet. Par contre, c’est possible en important un kml ou un gpx.
Déterrage : on peut néanmoins ajouter plusieurs points sur un article et appeler la combinaison des différents points dans cet article ou dans un autre, ou dans une rubrique ou une brève :
Reply to this message
Bonsoir b_b,
Avec SPIP 3.1.0-beta et GIS4 + GIS Géométries à jours ;), voici ce que je reproduis :
- ajout d’un nouveau point : import d’un KML
- enregistrer : le KML est importé et visible, mais le titre n’est pas enregistré (input vide) il faut ressaisir et recliquer sur enregistrer
- retour sur le point, modification du point : les 3 outils de tracé ne sont plus disponibles, mais on peut déplacer les points du KML (peut-être normal ?)
- on ne peut pas importer une nouvelle KML (peut-être normal aussi ?)
Le SPIP 3.1.0 n’est pas neuf ;) mais j’ai désactivé les autres plugins.
Bon, je viens d’installer une SPIP 3.1.0-beta neuve et je reproduis la même erreur avec le log suivant :
2015-10-08 06:48:09 ::1 (pid 713) :Pri:ERREUR : Erreur mysql 1416
2015-10-08 06:48:09 ::1 (pid 713) :Pri:ERREUR : Erreur mysql 1416
2015-10-08 06:48:09 ::1 (pid 713) :Pri:ERREUR : Erreur 1416 de mysql : Cannot get geometry object from data you send to the GEOMETRY field
in /Applications/MAMP/SITES/_spip31gis/plugins/auto/gis/v4.31.4/action/editer_gis.php L38 [sql_insertq(),gis_inserer(),action_editer_gis_dist(),formulaires_editer_objet_traiter(),formulaires_editer_gis_traiter_dist(),call_user_func_array(),traiter_formulaires_dynamiques()]
INSERT INTO spip_gis () VALUES ()
Aucun autre plugin installé. Si ça te parles b_b ;)
Salut Graphie,
Oui c’est normal, un gis (point, ligne, etc) peut être modifié uniquement
Normal aussi, un gis contient une unique forme géométrique, donc pas moyen d’importer deux kml sur le même gis.
Pour l’erreur sql, j’ai trouvé l’origine du problème. Cela se produit uniquement avec les tables en InnoDB. J’ai un patch pour fixer le bug, mais je vais peut-être plutôt forcer le passage de la table spip_gis en MyISAM.
Voilà qui devrait fixer le bug en attendant mieux :
http://zone.spip.org/trac/spip-zone/changeset/92222
++
Parfait ;) Cool.
Merci b_b
Reply to this message
Salut,
J’ai installé Gis Géométrie et dès lors je ne peux plus ajouter de points sur les cartes. J’ai vidé le cache, mis à jour GIS, rien de rein. Quand j’ajoute un point, petite croix rouge, Niet Nada keutchi le formulaire tousse. Jamais vu le moindre polygone sur la carte, ni de champs suplémentaire pour ajouter un kml, rien de rien en interne.
Suis sur open street map + surcouche France.
De quoi ça vient c’t’affaire?
Ton “rapport de bug” manque un peu d’info, pas moyen de t’en dire plus pour l’instant...
Erreur javascript ? Champs ajoutés par le plugin bien présent dans la base (champ geo sur la table spip_gis) ?
Reply to this message
Icône perso
Bonjour,
Sur un GIS géo, je souhaite que les points seuls aient un marqueur avec une image png. Je change donc le json, avec après la description :
Cela marche très bien sous GIS (le json est valide) mais pas avec Gis Géo. Une idée . Pour voir c’est ici : http://moduloo.net/spip.php?rubrique45&var_mode=recalcul
Merci (encore) de l’aide apportée.
PS : la ligne “geometry”: (#GEOMETRY est modifiée (sans la personnalisation des marqueurs, tout marche bien)
Julien
Je rajoute que si je positionne un fichier png dans /squelettes/images, là aussi, plus rien ne s’affiche... (nom du fichier marker_defaut.png)
Et si b_b répond, j’en profite pour une deuxième question : je ne trouve pas dans quel fichier il faut intervenir pour changer l’événement de l’infobulle de onclick en onmouseover ?
merci, merci.
Salut, je ne vois pas de marker_defaut.png dans ton dossier squelettes, cf :
http://moduloo.net/squelettes/images/
Pour l’événement de déclenchement de la popup, il faut utiliser l’API js du plugin et jouer avec Leaflet, cf :
http://contrib.spip.net/Astuces-GIS#api_js
http://leafletjs.com/reference.html#marker-mouseout
http://gis.stackexchange.com/questions/31951/how-to-show-a-popup-on-mouse-over-not-on-click
Reply to this message
Bonjour,
Petit souci que je n’arrive pas à résoudre avec GIS géométries..
L’enregistrement des points, lignes et polygones fonctionne très bien depuis l’espace public, avec la saisie “carte”.
Par contre depuis l’espace privé, quand on essaye de modifier un point existant, et qu’on clique “enregistrer”, on a l’erreur suivante :
dans spip.log, j’ai ca :
J’ai cherché du coté de gis dans action/editer_gis.php, ainsi que dans gis_geometries, le fichier de pipeline qui semble gérer les pre et post insertions liées à ce champ.. Mais je ne comprends pas comment corriger ce bug, ou déjà trouver son origine.. !
Je comprends bien que Mysql attend un format binaire différent de la chaine que je lui envoie, mais je ne vois pas ce que j’aurais pu modifier pour que ca ne fonctionne plus
Si vous avez une idée ou suggestion.. Je suis preneur !
Merci d’avance !
C’est comme si le pipeline pre_insertion ne s’executait pas quand on passe par l’interface privée.. étrange !
J’ai refait quelques tests...
Tout a l’air d’être fait dans la fonction “gisgeom_pre_insertion”.. J’ai rajouté un envoi de mail dans cette fonction pour savoir quand elle était appelée.
Le souci c’est que cette fonction qui est appelée quand on passe par les formulaires de l’espace public n’est PAS appelée quand on passe par l’interface privée.. !
Par l’interface publique, je recois bien le résultat attendu :
Mais dans l’interface privée, la fonction n’est jamais appelée.. Pourquoi ? Comment faire pour qu’elle soit invoquée avant l’insertion du point GIS ?
Ah non, le pipeline s’execute correctement lors d’une nouvelle insertion (lier un nouveau point).. C’est vraiment juste quand on veut modifier un point existant, Edition => points geolocalisés => “modifier le point”.. (/ecrire/?exec=gis_edit&id_gis=xx)
Bon j’ai trouvé la solution alors je la donne ici, au cas ou d’autres aient le meme bug..
Le pipeline “pre_insertion” n’est appelé QUE lors de la création d’un nouvel objet. Il faut avoir la meme fonction pipeline appelée en “pre_edition”.. Ce que j’ai trouvé de plus simple pour résoudre cela, c’est en créant un nouveau plugin très simple
Paquet.xml :
et fichier gisgeom_pipelines.php, modifié :
Et maintenant, l’édition des points fonctionne.
Salut Levince et désolé pour le délai de réponse :\
Rencontres-tu toujours le problème avec la dernière version de GIS et GIS geometries ?
Pour info, lors de la modification d’un objet c’est le pipeline gisgeom_post_edition qui est appelé. Tu as peut-être un plugin qui bloquait l’utilisation d’un des pipelines utilisés par GIS geometries (ça peut arriver quand un plugin ne renvoie pas le flux correctement pour laisser la main aux autre plugins qui souhaiteraient agir dessus).
++
Reply to this message
Tout fonctionne bien dans l’interface admin, mais petit problème dans l’espace public : aucun point ne s’affiche (ni point ni polygone), et quand on dé-zoom ou bouge la carte, on obtient le point... mais pas le polygone. Ceci avec deux marqueurs sur un auteur visiteur, un point et un polygone.
Voici une page test : il faut simplement faire RECHERCHER :
http://reneta.fr/spip.php?rubrique19
Le json est le suivant :
Si je garde la ligne geometry du json de GIS :
"geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
j’obtiens tout de suite les deux marqueurs, mais sous la forme de points (ce qui est normal vu la doc je pense).
Une idée ?
Héhé, il semblerait que ta carte utilise le système de clustering, qui n’est valide que pour les points. Essaye en désactivant cette option pour voir.
Comme d’habitude, réponse rapide et pertinente !
Merci.
PS : la non compatibilité avec le clustering, c’est une impossibilité technique ou bien par manque de temps de développement ?
De rien,
Pour l’instant, c’est une impossibilité technique de la librairie qu’on utilise pour le clustering cf :
https://github.com/Leaflet/Leaflet.markercluster
Et merci pour le signalement, je vais compléter l’article pour avertir de cette incompatibilité.
Reply to this message
Ajouter un commentaire
Follow the comments:
|
