GIS Geometries

Ce plugin ajoute au plugin GIS la possibilité d’afficher et d’éditer des formes géométriques.

Avertissement : ce plugin ne fonctionne que sur les sites qui utilisent une base de données MySQL en version 5.6 minimum. 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.

Notes de développement : https://blog.eliaz.fr/article160.html

Discussion

23 discussions

  • 1

    Bonjour
    Avec Spip 4.0.11, GIS 4.54.3 et GIS Géométrie 1.11.12
    J’utilise depuis quelque temps GIS, et je viens de découvrir GIS Géométrie.

    De ce que je découvre :

    • On ne peut pas, sur le même « point » placer à la fois une ligne et un point ?
    • Pour mes lignes, parfois ce sont des itinéraires qui bouclent (départ = arrivée) ce serait top d’avoir une option pour indiquer un « sens » à la ligne : ajout de quelques petites « flèches » de temps à autre sur la ligne. Le « sens » serait donné par celui adopté au moment du tracé.
      Je ne sais rien de la faisabilité de cela...

    Merci.

    • Salut,

      > On ne peut pas, sur le même « point » placer à la fois une ligne et un point ?

      C’est bien ça.

      > ce serait top d’avoir une option pour indiquer un « sens » à la ligne : ajout de quelques petites « flèches » de temps à autre sur la ligne. Le « sens » serait donné par celui adopté au moment du tracé.

      Ça peut se faire en bidouillant, car les coordonnée d’un tracé sont normalement sotckées dans l’ordre du dessin, mais rien n’est prévu par défaut à ce sujet. Tu peux regarder du côté de ce plugin leaflet https://github.com/slutske22/leaflet-arrowheads

    Répondre à ce message

  • 2

    Bonjour,
    j’ai un ensemble d’article, chacun contenant un gpx. Dans la rubrique mere j’arrive bien a afficher les gpx, par contre je ne trouve pas comment dans chaque article afficher le gpx de l’article en cour, je n’ai qu’un point avec :
    <carte_gis4|objets=articles| id_article=1191|cluster = non|zoom=8>
    Pourriez vous m’aider ?

    • Salut, la question a plus sa place dans le forum de GIS, mais bon ;)

      Avec un <carte_gis4|objets=documents id_document=XXX|zoom=8> ça devrait le faire (où XX vaut l’id du document joint à l’article). Sinon, c’est bien plus simple à faire depuis un squelette, car tu peux boucler sur les docs de l’article qui portent l’extension gpx avant de faire l’appel à a carte.

      PS : cluster = non n’est pas utile puisque c’est la valeur par défaut pour cette option.

    • Ben je l’ai posté ici parce que c’est grâce a géometrie que je peux associer un gpx a la place du point géolocalisé, ou je me trompe ? Mais ok mes prochaines questions irons sur GIS.

      Du coup, document ne fonctionne pas :/

    Répondre à ce message

  • 3

    Bonjour,

    Quand je veux importer une bd qui contient des polygones avec ce plugin actualisé, j’obtiens un

    Invalid GIS data provided to function st_srid.

    Commment faire pour importer le champ geo ?

    Merci
    Rainer

    • Salut, ça ressemble à ce bug de mysql https://stackoverflow.com/questions/34524031/mysql-invalid-gis-data-provided-to-function-st-geometryfromtext

      Tu utilises mysql ou mardiadb ? Dans quelle version ?

      Les polygones de ta base ont bien été créés avec GIS ?

    • Salut,
      la bd est exporté depuis mysql 5.6.41-84.1 et l’essai d’importation faites sur une 5.7.29-0ubuntu0.18.04.1.

      Il n’y a pas de polygones, uniquement des point, de style POINT(2.7908706665039062 50.297818304680014) dans la colonne geo.

      Je vais donc demander il y a effectivement besoin de ce plugin car visiblement il n’avait pas été utilisé.

      Merci
      Rainer

    • Pour info, j’ai eu le même problème avec un import distant -> local sur Mysql 5.7.6 qui générait cette erreur.

      J’ai fourbé en faisant un export CSV de la base distante (avec adminer), que j’ai importé sans problème en local (avec Sequel Pro).

    Répondre à ce message

  • 9

    Est-ce qu’il serait possible de rajouter une zone permettant de choisir la couleur et son niveau de transparence ?

    J’ai essayé par ailleurs d’exporter au format kml, de rajouter :

    	<Style> 
    	  <PolyStyle>  
    	   <color>#a00000ff</color>
    	  <outline>0</outline>
    	  </PolyStyle> 
    	 </Style>	

    Et de réimporter dans GIS géométrie, mais le polygone est resté bleu.

    Doc utilisée : http://dagik.org/kml_intro/E/polygon.html

    • Pour info, nouveauté dans la version 1.8.0 : on peut maintenant définir les options de styles des formes géométriques (couleur, opacité, épaisseur du trait, couleur de remplissage et opacité du remplissage).

      Et hop :)

    • Effectivement cette fonction est très pratique et permet la création de polygones ou de lignes de couleurs différentes ce qui rend ces signalisations plus efficaces.
      Mais comme je suis Monsieur +, serait-il possible que la fonction plein écran de visualisation puisse exister lors de la création des polygones , points et lignes, pour permettre une plus grande précision qu’avec la petite fenêtre lors de leur création ?
      Merci beaucoup ! Bravo pour cet outils très utile et très complet !
      Michel
      http://laccreteil.fr

    • Bonjour,
      Pas eu de retour à la question ci-dessus depuis le 15 avril 2016.
      La question est toujours d’actualité, pour permettre une plus grande précision qu’avec la petite fenêtre (côté privé - création de formes).
      Merci.
      Michel
      http://laccreteil.fr

    • Hop,

      Pas eu de retour à la question ci-dessus depuis le 15 avril 2016.

      Et oui, parfois les gens ne sont pas disponibles pour faire du SAD, désolé :)

      Concernant la demande d’évolution, oui ça pourrait être possible, mais le problème est que si j’ajoute cette option, elle sera présente dans toutes les cartes d’édition dans l’espace privé, pour toutes les installations du plugin. Amha cette fonctionnalité devrait être optionnelle, mais je ne pense qu’il faille surcharger la page de configuration du plugin avec ça. Je propose donc de la rendre disponible par le biais d’un define qui pourrait être personnalisé dans le fichier mes_options.php du site qui souhaite l’activer.

    • Merci, pour ce retour extrêmement rapide !
      -  Il existe un bouton, sur l’affichage public si on paramètre du côté privé son affichage.
      Il semblerait donc intéressant d’en permettre l’affichage lors de la création d’un point, une ligne, trace, polygone, etc. par une case à cocher/décocher sous la carte lors de la création ou de la modification, avec alerte lors de l’enregistrement (si vous le souhaitez - pour sécuriser la manie))
      -  Vous aurez alors un véritable outil d’édition en plein écran ou dans une fenêtre redimensionnable (si c’est possible).
      Imaginez ceux qui doivent faire des formes complexes, mais qui disposent d’écrans de 24« ou 27 », ce serait le pied !

      Michel
      http://laccreteil.fr

    • par une case à cocher/décocher sous la carte lors de la création ou de la modification, avec alerte lors de l’enregistrement

      Justement non, je souhaite aussi éviter de surcharger le formulaire d’édition avec une case à cocher qui en plus demanderait deux clics pour passer en plein écran (cocher la case pour voir le bouton, puis cliquer sur le bouton).

      L’option que je propose permettrait d’afficher le bouton plein écran tout le temps dans les sites qui l’auraient activé, ça me semble bien plus simple et efficace.

    • Pour ma part, j’ai mes outils d’édition, qui me permettent un travail en plein écran.
      C’est pourquoi, en me mettant à la place de ceux qui n’en disposent pas, je vous ai fait cette proposition d’amélioration, car la petite fenêtre du secteur privé est beaucoup plus difficile d’utilisation.
      Sachant que la visualisation en plein écran du côté public peut être utile, mais pas autant que du côté privé lors de créations d’éléments qui peuvent être complexes.
      Pour ma part, je suis OK pour l’option proposée qui permettrait d’afficher le bouton plein écran tout le temps dans les sites qui l’auraient activé, sachant que pour ma part je pourrai l’activer ou la désactiver en modifiant le fichier mes_options.php, ce qui n’est peut-être pas le cas de tout un chacun.
      C’est à eux que je pensais !
      Merci pour tout !
      Michel.
      http://laccreteil.fr

    • Mieux vaut tard que jamais, j’ai intégré ça dans la version 1.11.9 du plugin, le bouton plein écran est toujours affiché dans la saisie :)

      https://git.spip.net/spip-contrib-extensions/gis_geometries/commit/6745a2e6a09679af359978cc97248d1328e42c8e

    • Maintenant nous avons un SUPERBE OUTIL, surtout lorsque l’on dispose d’écrans 4K, affichage sur écrans multiples, ou sur des bureaux interchangeables par glissement (sur Mac).
      Merci beaucoup !
      Maintenant il faut faire passer cette information aux utilisateurs, pour leur simplifier la vie.
      J’ai d’autres idées... si jamais...
      Bien à vous Michel

    Répondre à ce message

  • 5

    Bonsoir,

    Je ne sais pas si c’est dû à SPIP 3.3.0, mais les styles inline des tracés ne semblent pas totalement appliqués aux paths :
    -  l’opacité de la couleur est à 1 par défaut, au lieu de 0.5 annoncé
    -  la couleur de remplissage fill n’est pas appliquée, elle reste à none
    -  l’opacité de remplisssage ne semble pas présente du tout dans le style

    Cordialement,
    françois

    • Tu peux fournir l’adresse d’une page qui expose le problème ?

      PS : quand tu dis « styles inline », tu parles de ceux générés à partir des données que tu as saisi dans l’espace privé pour un tracé ?

    • Rien en ligne, tout en local :-((

      Et oui, je parle bien de ceux générés à partir des données saisies dans l’espace privé pour un tracé. A noter que l’affichage côté privé ne reflète pas non plus les valeurs saisies dans les propriétés du tracé.

    • Je viens de tester sur un SPIP 3.3 up en git avec la dist, aucun problème, les styles définis dans le privé sont bien appliqués dans le public.

    • OK, il doit donc y avoir qqchose dans ma configuration locale.
      Le fill n’est toujours pas appliqué, même si le stroke l’est avec sa couleur, épaisseur et opacité.
      Tous les autres plugins sont désactivés.

    • J’ai trouvé ce qui cloche :
      -  mes points GIS sont issus de KML importés depuis My Maps de Google
      -  les tracés ne sont pas fermés

      Si on veut un tracé fermé, il faut partir d’un polygone et le déformer pour réaliser le tracé souhaité.

    Répondre à ce message

  • 1

    Bonjour !

    Je suis en train de tester ce plugin et ça fonctionne bien.
    J’ai cependant une contrainte et j’aimerais savoir comment la contourner.
    J’ai un gros fichier kml (50Mo) que j’aimerais importer. Sur mon serveur de test, j’ai modifié ces deux variables de php.ini :

    post_max_size = 60M
    upload_max_filesize = 60M

    Quand j’essaie de téléverser mon fichier kml, je suis redirigé vers une page complètement vide et surtout, mon fichier n’a pas été importé.
    Note : si je créé un article et que je joins le fichier, tout se passe bien.
    Une idée pour procéder autrement et arriver à mes fins ?

    • C’est certainement un problème de limite mémoire, le script qui s’occuper de convertir le kml pour l’importer en base doit en consommer trop, bref tu atteins les limites de ton hébergement...

    Répondre à ce message

  • 1
    Francois Sauterey

    Bonjour,

    J’ai un petit problème à vous soumettre :
    J’ai un nouvel objet éditorial qui contient deux champs latitude et longitude.

    Pour simplifier, disons que j’ai id_objet, nom_objet, latitude,longitude (j’ai bien évidement des tas d’autres champs, mais ici, seuls ceux_ci sont utiles).

    je voudrais pouvoir, à partir d’une boucle sur ces objets, créer une carte « à la volée », en plaçant les objets sur la carte via #LATITUDE et #LONGITUDE

    quelqu’un peut-il m’aider ?

    Répondre à ce message

  • 2

    Salut b_b,

    Je soulève un petit soucis qui m’a fait tourner en bourrique pendant quelques heures.
    Il semblerait qu’en désinstallant le plugin GIS Geometries, la colonne geo dans la base ne soit pas supprimée (peut-être c’est volontaire).
    Le champs geo est donc vide sur les nouveaux points GIS (classiques) ajoutés. Ca ne perturbe pas le fonctionnement heureusement mais, effet de bord, lors d’un export MySQL > import MySQL ce champs vide cause une erreur fatale :


    #1416 - Cannot get geometry object from data you send to the GEOMETRY field

    Voilà, conclusion je dois réinstaller le plugin et re-éditer les points…

    • Salut Fa_b, oui c’est un « problème » connu et documenté en plus :)

      Voir cette partie de la doc :

      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.

    • Autant pour moi, j’avais pas vu ce point. Le plugin était sans doute mal désinstallé à la base (peut-être supprimé via FTP). La réinstallation et la suppression du plugin via SVP a corrigé le problème (après vidage de cache car j’avais plein d’erreurs dans l’admin).

      Tout est revenu dans l’ordre merci !

    Répondre à ce message

  • 2
    Tederic Merger

    Bonjour,
    A l’installation du plugin, qui semble bien se dérouler depuis que j’ai installé la librairie geoPHP-1.2, ne se crée dans spip_gis que la zone geo, mais pas les zones color, weight etc., ce qui génère une erreur lors de l’affichage d’un point gis : « Erreur SQL 1054 Unknown column ’gis.color’ in ’field list’ ».
    Pourtant, ça avait marché une fois* : les zones supplémentaires avaient été créées ; mais j’ai désinstallé le plugin pour une autre raison, et depuis, j’ai le problème ci-dessus.
    *Cette fois là, il me semble que j’avais fait l’activation dans une deuxième phase, après un premier échec dû à l’absence de la librairie geoPHP-1.2

    • Salut, tu dois avoir une erreur sql, consulte les logs pour voir. Sinon, si tu n’as pas de données importantes à perdre, désinstalle GIS et GIS Geometries pour les réinstaller.

    • Tederic Merger

      Bonjour et merci.
      Après quelques péripéties, je crois comprendre que la non-création des zones supplémentaires était liée au fait que l’installation de Geometries m’a réinstallé Gis comme plugin auto, alors que je l’avais précédemment installé en manuel. Celui qui était en manuel a été mis en « obsolète ».
      Maintenant, ça semble marcher, bien que j’ai à la page d’accueil de l’espace privé cette ligne d’erreur : « Erreur dans les plugins : /home/gasconha/www/plugins/auto/gis/v4.44.15/base/gis.php »
      En regardant dans ce gis.php, j’ai vu que la ligne relative à la zone geo ne figurait pas.
      Je l’ai rajoutée manuellement :
      ’geo’ => « geometry NOT NULL DEFAULT ’’ »,
      Mais la ligne d’erreur continue à s’afficher. Qu’est-ce ça cache ?
      A suivre...

    Répondre à ce message

  • 4

    Bonjour,

    SPIP 3.1.7 SVN [23765], GIS 4.44.14 et GIS Geometries 1.11.2.

    J’ai des soucis pour enregistrer des modifications de géométries et ça produit des erreurs dans la console :

    Uncaught TypeError : Cannot read property ’className’ of undefined
    at NewClass.addHooks (eval at (a2654911d29374efe96b8af8087cbf44.js ?1518861943:222), :13543:25)
    at eval (eval at (a2654911d29374efe96b8af8087cbf44.js ?1518861943:222), :13475:9)
    at NewClass._eachVertexHandler (eval at (a2654911d29374efe96b8af8087cbf44.js ?1518861943:222), :13469:1)
    at NewClass.addHooks (eval at (a2654911d29374efe96b8af8087cbf44.js ?1518861943:222), :13474:6)
    at NewClass.enable (eval at (a2654911d29374efe96b8af8087cbf44.js ?1518861943:222), :3173:6)
    at ?exec=gis_edit&id_gis=381:858
    at NewClass.eachLayer (eval at (a2654911d29374efe96b8af8087cbf44.js ?1518861943:222), :3772:8)
    at init_map (?exec=gis_edit&id_gis=381:857)
    at Object.success (?exec=gis_edit&id_gis=381:902)
    at fire (a2654911d29374efe96b8af8087cbf44.js ?1518861943:2093)

    Je peux modifier les points mais les modifications ne sont pas enregistrées.

    Est-ce que cela parle à quelqu’un ?

    Merci,
    françois

    Répondre à ce message

  • 1

    Bonjour,
    Je cherche à retrouver où sont stockés mes KML importés sur mon serveur FTP ? Où sont-ils situés ? merci.

    Répondre à ce message

  • 5

    Salut b_b,

    Je suis en train d’écrire un plugin qui importe les communes belges comme point gis.

    Quand j’importe j’obtiens un « Cannot get geometry object from data you send to the GEOMETRY field »

    la fonction d’import et la suivante

    function gis_cb_importer_points() {
    	$json = json_decode(file_get_contents(__DIR__ . '/../data/complete_data.json'), TRUE);
    	$set = array();
    	foreach($json AS $values) {
    		$nom_fr = $values['Name']['fr'];
    		$nom_nl = isset($values['Name']['nl']) ? $values['Name']['nl'] : $nom_fr;
    		$polygon = array('type' => 'Feature','geometry' => $values['POLYGON']);
    		$wkt = json_to_wkt(json_encode($polygon));
    		$set = array(
    			'titre' => '<multi>[fr]' . $nom_fr. '[nl]' . $nom_nl. '</multi>',
    			'lat' => $values['lat'],
    			'lon' => $values['lng'],
    			'geo' => "GeomFromText('$wkt')",
    			'zoom' => 11,
    			'type' => 'Multipolygon',
    			'pays' => '<multi>[fr]Belgique[nl]België</multi>',
    			'code_pays' => 'BE',
    			'ville' => '<multi>[fr]' . $nom_fr. '[nl]' . $nom_nl. '</multi>',
    			'code_postal' => $values['zip'],
    			);
    	}
    	sql_insertq_multi('spip_gis' , $set);
    }

    et la source : https://raw.githubusercontent.com/abelass/spip_gis_communes_belges/master/data/complete_

    je ne comprends pas comme importer correctement le multipolygone dans la bd. Est-ce que tu aurais une idée ?

    Merci
    Rainer

    Répondre à ce message

  • 2

    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 ;-)

    Répondre à ce 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

    Répondre à ce message

  • 3

    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 :

    [(#INCLURE{fond=modeles/carte_gis,id_article,autocenterandzoom=oui,hauteur=#CONFIG{soyezcreateurs_layout/hauteurgisarticles,400px},cluster=oui,maxClusterRadius=40,clusterShowCoverageOnHover=oui,clusterSpiderfyOnMaxZoom=oui,fullscreen=oui})]

    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 :

      • de mettre le champ type dès GIS et pas rajouté par GISGEOM avec comme valeur par défaut : Point
        ainsi, on pourrait mettre dans toutes les boucles de GIS type ? sans que ça plante le compilo si GISGEOM n’est pas installé
      • et faire un layer par type de données(ce qui permettrait d’avoir le clustering quand même sur les points seuls, et des polygon)
      • ça donnerait aussi une voie pour résoudre un autre bug : si on active GISGEOM, il n’est plus possible d’avoir un images/marker_default.png
    • 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 :

      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.

    Répondre à ce message

  • 6

    b_b,

    Peut-on passer des paramètres pour interagir avec la couleur/transparence d’un polygone, du style :

    <carte_gis1|id_article=3|zoom=8|color=green|weight=1|opacity=0.3|fillOpacity=0.2>

    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,

      path_styles=#ARRAY{color,green}

      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 :

      <carte_gis1|id_article=4|path_styles=#ARRAY{color,#000}>

      ne fonctionne pas non plus.

      Pourtant dans le fichier leaflet-src.js :

      	options: {
      		stroke: true,
      		color: 'blue',//fpradignac
      		dashArray: null,
      		lineCap: null,
      		lineJoin: null,
      		weight: 1,//fpradignac
      		opacity: 0.3,//fpradignac
      		fill: false,
      		fillColor: null, //same as color by default
      		fillOpacity: 0.15,
      		clickable: true
      	},

      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 :

      [(#INCLURE{fond=modeles/carte_gis,id_gis,
      	id_map=_album,
      	centrer_auto=oui,
      	path_styles=#ARRAY{color,#00c0f8,weight,3,opacity,1,dashArray,5,}
      })]
    • 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

    Répondre à ce message

  • 2

    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 :

      <carte_gis1|id_article=3|zoom=8|limit=100|scale=oui>

    Répondre à ce message

  • 3

    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,

      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 ?)

      Oui c’est normal, un gis (point, ligne, etc) peut être modifié uniquement

      on ne peut pas importer une nouvelle KML (peut-être normal aussi ?)

      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

    Répondre à ce message

  • 1

    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) ?

    Répondre à ce message

  • 3

    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 :

    « description » :[(#TEXTE|video_responsive|json_encode)],
    « icon » : « \/squelettes\/images\/marker_defaut.png »,
    « icon_size » : [10,10],
    « icon_anchor » : [5,5]

    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|wkt_to_json),] est modifiée (sans la personnalisation des marqueurs, tout marche bien)

    Julien

    Répondre à ce message

  • 5

    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 :

    Une erreur technique a empêché l’enregistrement correct du champ 'zoom','geo'.

    dans spip.log, j’ai ca :

    Jan 16 15:45:05 10.253.11.24 (pid 3403) :Pri:ERREUR: Erreur mysql 1416
    Jan 16 15:45:05 10.253.11.24 (pid 3403) :Pri:ERREUR: Cannot get geometry object from data you send to the GEOMETRY field - 
    UPDATE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c2FtdTI8L2NvZGU+"></span>.spip_gis
    SET zoom=11,geo='POLYGON((2.1694335993379 48.883554726616,2.161880498752 48.828437449862,2.1893463190645 48.826177250492,2.1694335993379 48.883554726616))'
    WHERE id_gis=101
    Jan 16 15:45:05 10.253.11.24 (pid 3403) :Pri:ERREUR: Erreur mysql 1416
    Jan 16 15:45:05 10.253.11.24 (pid 3403) :Pri:ERREUR: Cannot get geometry object from data you send to the GEOMETRY field - query inconnue
    Jan 16 15:45:05 10.253.11.24 (pid 3403) :Pri:ERREUR: Erreur 1416 de mysql: Cannot get geometry object from data you send to the GEOMETRY field
    
    UPDATE <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+c2FtdTI8L2NvZGU+"></span>.spip_gis
    SET zoom=11,geo='POLYGON((2.1694335993379 48.883554726616,2.161880498752 48.828437449862,2.1893463190645 48.826177250492,2.1694335993379 48.883554726616))'
    WHERE id_gis=101
    Jan 16 15:45:05 10.253.11.24 (pid 3403) :Pri:CRITIQUE: Erreur enregistrement en base gis/101 champs :array (
      'zoom' => 
      array (
        'post' => '11',
        'save' => NULL,
      ),
      'geo' => 
      array (
        'post' => 'POLYGON((2.1694335993379 48.883554726616,2.161880498752 48.828437449862,2.1893463190645 48.826177250492,2.1694335993379 48.883554726616))',
        'save' => '' . "\0" . '' . "\0" . '' . "\0" . '' . "\0" . '--' . "\0" . '' . "\0" . '' . "\0" . '-' . "\0" . '' . "\0" . '' . "\0" . '-' . "\0" . '' . "\0" . '' . "\0" . '°ÿ¿' . "\0" . '' . "\0" . '[-@^…?R-qH@-' . "\0" . 'À' . "\0" . 'ˆK-@/ø-=
    jH@-' . "\0" . 'À' . "\0" . 'ȃ-@ûÇ--ÀiH@°ÿ¿' . "\0" . '' . "\0" . '[-@^…?R-qH@',
      ),
    )

    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 :

      Array
      (
          [args] => Array
              (
                  [table] => spip_gis
              )
      
          [data] => Array
              (
                  [geo] =>     --   -   -   = À xñ-@†¾-c\oH@Y À -ð-@/ƒn«IiH@= À xà-@/ƒn«IiH@Ìÿ¿ ˜u-@dWó5@rH@= À xñ-@†¾-c\oH@
              )
      
      )

      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 :

      <paquet
      	prefix="gisgeom_correction"
      	categorie="divers"
      	version="1"
      	etat="stable"
      	compatibilite="[3.0.0;3.0.*]"
      >	
      	<nom>GIS Geometries Corrections</nom>
      	<auteur>Vince</auteur>
      	<pipeline nom="pre_edition" inclure="gisgeom_pipelines.php" ></pipeline>
      </paquet>

      et fichier gisgeom_pipelines.php, modifié :

      <?php
      if (!defined('_ECRIRE_INC_VERSION')) return;
      
      function gisgeom_correction_pre_edition($flux){
      	if($flux['args']['table'] == 'spip_gis') {
      		if(_request('geojson')) {
      			$json = _request('geojson');
      		} else {
      			$point = array('type' => 'Feature','geometry' => array('type'=> 'Point','coordinates' => array(_request('lat')?_request('lat'):0,_request('lon')?_request('lon'):0)));
      			$json = json_encode($point);
      		}
      		include_spip('gisgeom_fonctions');
      		$wkt = json_to_wkt($json);
      		// convertir le WKT en binaire avant l'insertion
      		$binary = sql_getfetsel("GeomFromText('$wkt')");
      		$flux['data']['geo'] = $binary;
      	}
      	return $flux;
      }
      
      ?>

      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).

      ++

    Répondre à ce message

  • 3

    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 :

    		<BOUCLE_auteurs(AUTEURS){gis}{type_compte=eta}{id_mot == ^(#ENV{id_mot}|table_valeur{0}|sinon{.*})$} {id_mot == ^(#ENV{id_mot}|table_valeur{1}|sinon{.*})$}{tout}{par nom}{0, #ENV{limit}}{","}>
    		<?
    		$href="<a HREF='spip.php?auteur#ID_AUTEUR' class=lien_map>" ;
    		?>		
    		{"type": "Feature",
    		["geometry": (#GEOMETRY|wkt_to_json),]
    		"id":"#ID_GIS",
    		"properties": {
    			"title":<?=json_encode($href."[(#LOGO_AUTEUR{left}|image_reduire{60,0}|sansguillemet)] &nbsp;&nbsp;[(#NOM*|sansguillemet)]</A>")?>,
    			"description":
    			<? $description = "&nbsp;&nbsp;[(#BIO|sansguillemet|couper{100})]" ;
    			echo json_encode($description) ;
    			?>[
    			(#LOGO_GIS|gis_icon_properties)]
    		}}</BOUCLE_auteurs>

    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,

      la non compatibilité avec le clustering, c’est une impossibilité technique ou bien par manque de temps de développement ?

      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é.

    Répondre à ce message

  • 1

    Bonjour b_b,
    Tout d’abord merci pour cet excellent plugin.
    J’aurais besoin d’aide, voilà en local l’installation s’est correctement déroulé. j’ai rentré tout mes points sans problème.
    J’ai installé spip 3.0.16 sur mon serveur OVH, j’ai activé tous les plugins dont GIS 4 et j’ai restauré ma base, mais j’obtiens des erreurs de squelette Erreur MySQL HY000 / 1 (voir l’image) .
    Encore merci pour ton aide. Pat

    Ma version de Mysql est 5.6.11 et j’ai restauré la base par le dump Spip

    • Salut,

      Aïe... il y a bien une incompatibilité avec les dumps de SPIP de ce côté :\

      je cite ma réponse publiée sur la page de GIS :

      GIS Geometries utilise l’extension de données spatiales de MySQL, mais les données des dumps de SPIP sont stockés dans une base SQLite. Du coup ça « casse » les dumps car SQLite ne gère pas les données spatiales par défaut...

      En attendant mieux, tu peux transférer ta base avec un dump mysql et cela fonctionnera sans pb.

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom