Plugin GMap : géolocalisation et cartographie paramétrable

À quoi sert ce plugin ?
Compatibilité et installation
Configuration
Géolocalisation
Cartographie
Boucles, balises et modèles
Extensions et personnalisations

À quoi sert ce plugin ?

Dans la partie privée, le plugin GMap permet d’associer aux objets SPIP une à plusieurs positions. La saisie se fait directement sur une carte. Les objets supportés sont les rubriques, les articles, les documents (il faut installer le plugin Médiathèque pour avoir accès à l’interface de géolocalisation), les brèves, les mots-clefs et les auteurs.

Dans la partie publique, il permet d’ajouter des cartes, soit dans les squelettes soit directement dans un texte édité sous SPIP, pour représenter les objets géolocalisés, des fichiers KML ou encore des points spécifiques.

GMap a été conçu pour permettre de le paramétrer à plusieurs niveaux.
Au niveau du site on peut définir précisément l’apparence des cartes dans le paramétrage : choix du fournisseur de cartes, des commandes affichées, du fond de carte, etc. Tous ces paramètres peuvent être redéfinis ponctuellement, à l’exception du fournisseur de carte qui concerne forcément l’ensemble du site.
À un niveau plus fin, il est possible de redéfinir l’apparence des points sur les cartes et le contenu des bulles d’information pour une rubrique, une branche ou sur un objet spécifique.
Il est également possible de personnaliser la recherche des points à afficher en définissant des requêtes spécifiques sous la forme de squelettes.

Le plugin est testé sur le site L’Océanique, sur les parties Galerie de photos et Carnet de voyage.

Une aide plus détaillée est intégrée dans le plugin et peut être consultée sur loceanique.org.

Compatibilité et installation

GMap est prévu pour fonctionner sur une version 2 de SPIP supérieure à 2.0.9. La majeure partie des tests ont été menés sur une version 2.1.10.

En modifiant le fichier plugin.xml, il pourrait probablement fonctionner sur des versions antérieures (le développement ayant débuté sur une version 1.9.2), mais ce n’est pas garanti.

En prérequis, il faut installer SPIP Bonux en version 1.8.1 minimum et, pour la géolocalisation des documents, le plugin Médiathèque.

Le plugin s’installe de façon classique : téléchargement du fichier zip, décompression et copie sur le site, activation par l’interface « Gestion des plugins » de SPIP.

Attention si vous mettez à jout d’une version antérieure à 0.2.0 : les fichiers de définition des requêtes ont changés de noms. Ils se nomment maintenant gmap-kml-** au lieu de gmap-query-**.

Configuration

Après l’installation, une icone « GMap » apparaît dans le menu de configuration :

Pour que le plugin soit fonctionnel il faut au minimum définir les clefs nécessaires
sur la page de configuration.
Actuellement, GMap permet de créer des cartes Google Maps V2 et V3. Le plugin GMapMXN, qui s’ajoute à GMap, utilise la librairie Mapstraction qui donne accès aux cartes d’autres fournisseurs, notamment Open Layers, Bing et Yahoo.
Par défaut le plugin est paramétré pour utiliser Google Maps API V3, aucune clef n’est nécessaire pour utiliser l’API, mais il en faut une pour profiter de l’extension Google Earth.

Le menu de paramétrage se présente sous la forme suivante :

  • Système : Paramétrage de base du plugin (API cartographique, clefs, optimisations).
  • Géolocalisation : Paramètrage des comportements dans la partie privée.
  • Cartographie : Paramétrage de l’apparence des cartes, des marqueurs et des bulles d’information (pour l’essentiel spécifique à l’API cartographique).
  • Outils : Outils d’import export de données.
  • Aide : Aide en ligne du plugin, qui vous permettra d’avoir bien plus d’information que dans cette présentation. Il y a également quelques pages de prise en main du code pour les développeurs qui voudraient se lancer.

Géolocalisation

Le plugin insère dans les pages d’édition des objets SPIP (rubrique, article, document, brève, mot-clef et auteur) une interface qui permet de géolocaliser l’objet. Pour les documents, il faut avoir installé le plugin Médiathèque pour avoir accès à la page de modification d’un document.

L’interface comporte principalement une carte, une zone d’édition des marqueurs et un bouton « Enregistrer » qui permet d’enregistrer les modifications en base de données.

Édition des marqueurs

Il est possible d’associer plusieurs points à chaque objet SPIP (la base de données supporte également l’inverse mais je n’ai pas encore implémenté cette fonctionnalité).

L’interface est constituée d’un tableau des marqueurs défini, dont un seul, surligné en rouge est actif sur la carte :

On peut modifier la position, le facteur de zoom associé et le type de marqueur. On peut également ajouter de nouveau marqueur grâce à la commande « ajouter un marqueur » située en dessous du tableau et supprimer les marqueurs grâce à la petite croix rouge à la fin de chaque ligne.

Normalement le positionnement du marqueur actif se fait en cliquant sur la carte et la modification du zoom est modifiant le zoom de la carte. Il est également possible d’éditer directement les valeurs mais cela ne met pas à jour la position de la carte (on peut considérer que c’est un bug).

Les types de marqueurs peuvent être édités depuis l’interface de paramétrage du plugin :

Recherche par adresse

Cette fonction n’est disponible que si l’implémentation de carte offre la fonctionnalité de geocoding.

Après avoir cliqué sur le bouton « Rechercher », une liste des résultats possibles est affichée, chaque point est également représenté sur la carte. On peut copier les coordonnées sur le point en cours d’édition en cliquant sur le petit signe plus à droite du tableau.

Coordonnées des voisins

Pour les articles et les documents seulement (car ils sont datés), GMap permet de rechercher les cooordonnées des points associés à des objets de même type proches dans le temps et l’espace.

L’interface permet de définir les contraintes de la recherche (temps, position, arborescence) et le nombre de points affichés. Après la recherche, les meilleurs points sont affichés dans le tableau et sur la carte. On peut copier les coordonnées sur le point en cours d’édition en cliquant sur le petit signe plus à droite du tableau.

Cas des documents

Par défaut, seule la page de modification accessible par la médiathèque permet de géolocaliser le document, la popup qui s’ouvre depuis l’édition d’un article n’y donne pas accès (c’est un bug que je n’ai pas pu corriger : l’appel à l’interface se faisant en ajax, je n’arrive pas à initialiser les cartes correctement... Si quelqu’un a une idée...).

Pour palier ce petit désagrément, j’ai ajouté un paramétrage dans le plugin pour désactiver automatiquement l’ouverture du popup : le bouton « modifier » renvoie alors sur la page d’édition d’un document.

Pour activer ce comportement, il faut cocher la case « Désactiver l’édition des documents par boîte modale depuis un article » dans la partie « Accès à l’interface de géolocalisation » de l’onglet « Géolocalisation » du paramétrage du plugin.

Cartographie

Affichage de la carte

Après avoir géolocalisé les objets, il reste à produire des cartes pour les représenter sur le site. GMap offre plusieurs moyen de le faire, présenté ci-dessous. Vous trouverez dans la suite une description plus détaillée des balises, modèles et boucles qui permettent de créer des cartes, ce premier survol est surtout destiné à permettre une prise en main rapide du plugin.

  • Balise #GEOMAP dans un squelette, modèle map dans un texte

GMap propose deux moyens d’intégrer des cartes dans le site public :

  • Introduire dans les squelettes des balises #GEOMAP,
  • Introduire dans les textes des modèles map.

Ajouter une balise #GEOMAP permet d’afficher des cartes sur toutes les pages qui utilisent le squelette. C’est donc un moyen partique de généraliser la représentation cartographique des objets, par exemple si vous envisagez de géolocaliser tous les articles ou tous les documents d’une rubrique.
Par exemple, le code ci-dessous, blacé dans une boucle ARTICLES, permet d’ajouter une carte qui représente tous les documents d’un article :

[<div style="position: relative; display: block; width: 100%; height: 400px;">
(#GEOMAP{id_article, markers=documents})
</div>]

À l’inverse, si la présence de carte reste exceptionnelle sur le site, il est préférable d’utiliser un modèle directement ajouté dans le texte d’un article, d’une rubrique ou de tout autre objet SPIP dont le texte peut contenir des modèles.
Par exemple, le texte ci-dessous permettra de représenter la position d’un unique article géolocalisé, sur une carte de 400 par 200 pixels au zoom 3 :

<map|id_article=36|markers=local|hauteur=400px|largeur=400px|zoom=3>


Ce qui donne :

  • Paramètres d’affichage définis dans la partie privée

L’apparence des cartes peut beaucoup varier, même en conservant la même implémentation (le même fournisseur de service cartographique) : on peut choisir le fond de carte, les commandes présentes (échelle, choix du fond, zoom, etc.).
Pour faciliter la mise au point du site, GMap propose une interface de configuration par laquelle on peut définir l’apparence de la carte et visualiser immédiatement le résultat produit. Ce paramétrage sera valable pour tout le site, à moins qu’il ne soit surcharger localement.

Par exemple, l’ajout du paramètre type dans le texte précédent permet de changer le fond de carte :

<map|id_article=36|markers=local|hauteur=400px|largeur=400px|zoom=3|type=physic>


Ce qui donne :

Tous les paramètres d’affichage peuvent être surchargés, mais le paramétrage global offre un confort que ne permettent pas les paramètres. Reportez-vous à la documentation intégrée au plugin, reproduite sur l’Océanique, pour plus d’informations.

Ajout des points

GMap offre de multiples façons d’ajouter des points sur les cartes. L’éventail des possibilités peut être cerné en lisant la documentation des balises.
Pour commencer, il y a deux techniques :

  • Ajouter les points en même temps que la carte, par l’intermédiaire du paramètre markers de la balise #GEOMAP (ou du modèle map, qui est équivalent), comme dans les exemples ci-dessus ;
  • Ajouter une carte par la balise #GEOMAP, puis ajouter les marqueurs par un ou plusieurs appels à la balise #GEOMARKER (ou modèle ).

Le paramètre markers est utilisable sur la balise #GEOMAP aussi bien que sur la balise #GEOMARKER.
Il a deux modes de fonctionnement :

  • Quand il prend les valeurs local, childs ou recursive, des points sont définis dans la page HTML générée. Ce mode alourdit la page transférée au client web et n’est utilisable que sur un petit nombre de marqueurs.
  • Quand il prend toute autre valeur, la carte est d’abord affichée puis les points sont demandés au serveur par une requête ajax. Ce mode est à la fois plus ergonomique (la page s’affiche immédiatement, les points arrivent après) et plus souple puisque les requêtes ajax peuvent être personnalisées. Les requêtes sont détaillées au chapitre suivant.

L’utilisation de la balise #GEOMARKER offre des possibilités plus inédites comme :

  • Ajouter des points qui ne proviennent pas d’un objet géolocalisé, soit en donnant ses coordonnées, soit en donnant son adresse.
  • Ajouter des marqueurs provenant d’une requête complexe passée dans un squelette : par exemple inclure la balise #GEOMARKER dans une boucle qui sélectionne les articles selon un critère de date.
  • Requêtes sur les objets géolocalisés

Le paramètre markers permet de désigner une requête permettant d’extraire du site une collection de points géographiques. Ces requêtes sont définies sous forme de squelettes qui renvoient des fichiers aux formats KML ou GeoJSON.

  • La requête par défaut est accessible par le paramètre markers=query, elle permet de récupérer les coordonnées des objets associés à un objet de référence. Pour une rubrique, ce sont les sous-rubriques, les articles, les documents, les brèves et les mots-clefs ; pour un article, les documents et les mots-clefs ; pour un mots-clefs, tous les objets qui y sont liés.
  • La requête sur les articles (markers=articles) permettant de récupérer les coordonnées de tous les articles, d’un article particulier ou des articles d’une rubrique, d’un auteur, liés à un mot-clef, etc.
  • La requête sur les documents (markers=documents) permettant de récupérer les coordonnées de tous les documents, d’un document particulier ou des documents liés à un article ou une rubrique.
  • La requête sur les rubriques (markers=rubriques) permettant de récupérer les coordonnées de toutes les rubriques, d’une rubrique particulière ou des rubriques ayant un même parent ou d’un même secteur, ou partagenat un mot-clef.
  • La requête sur les rubriques racines (markers=racine) permettant de récupérer les coordonnées des rubriques à la racine du site.
  • La requête sur les auteurs (markers=auteurs) permettant de récupérer les coordonnées de tous les auteurs, d’un auteur particulier ou des auteurs d’un article.
  • La requête sur les brèves (markers=breves) permettant de récupérer les coordonnées de toutes les brèves, d’une brève particulière ou des brèves d’un secteur liées à un mots-clefs.
  • La requête sur les mots-clefs (markers=mots) qui permet de récupérer les coordonnées de tous les mots, d’un mot particulier ou des mots liées à un objet.
  • La requête de recherche (markers=recherche) qui ajoute les coordonnées des objets répondants à un critère de recherche, cette requête est spécialement destinée à l’ajout d’une carte dans le squelette recherche.html.

Ces requêtes étant formalisées par des squelettes, il est possible de les surcharger. En outre, GMap permet d’appeler par le paramètre markers de nouvelles requêtes conçues pour des besoins qui ne seraient pas couverts par les requêtes déjà prévues (voir le dernier chapitre de cet article sur la personnalisation de GMap).

Exemples

Voici quelques exemples de ce qu’il est possible de cartographier à l’aide de GMap.
Certains exemples sont donnés avec l’écriture utilisant les balises, pour les squelettes, d’autres en utilisant les modèles, pour les textes. Ces deux écritures sont totalement équivalentes, malgré quelques incohérences dans le nommage des paramètres.

  • Afficher une carte avec un seul et unique point

La balise #GEOMARKER permet d’ajouter un point en donnant directement ses coordonnées. Il suffit pour cela de renseigner les paramètres latitude et longitude.

[<div style="position: relative; display: block; width: 100%; height: 400px;">
  (#GEOMAP)
  #GEOMARKER{latitude=38, longitude=-6, titre=un marqueur manuel, icon=gmap-marker-article, texte=toto}
</div>]

Il est également possible d’ajouter un point désigné par une adresse. GMap utilise alors le geocoder pour récupérer dynamiquement les coordonnées du point.
Outre le confort de ne pas avoir à recopier les coordonnées, cette option permet de représenter des objets qui ne sont pas géolocalisé mais comportent une indication d’adresse. Le risque est bien sûr que l’adresse ne soit pas reconnue par le geocoder, auquel cas aucun point n’est affiché.
Par exemple :

<map|hauteur=300px|largeur=400px|zoom=5>
<marker|adresse=Ulan Bator; Mongolie|titre=Ulan Bator|texte=Une balade à Ulan Bator|focus>

Donne :

  • Afficher les articles d’une rubrique, les documents d’un article, etc.

C’est ce que fait la requête par défaut de GMap. Il suffit d’intégrer une carte avec markers=query en paramètre :

<map|id_article=53|markers=query>

Ou dans un squelette :

[<div style="position: relative; display: block; width: 100%; height: 400px;">
  (#GEOMAP{id_article, markers=query})
</div>]
  • Afficher tous les auteurs du site

On utilise la requête sur les auteurs, en ne donnant aucune contrainte :

<map|markers=auteurs>

Ce qui donne :

  • Afficher les articles d’un auteur

On utilise ici la requête sur les articles en lui donnant une contrainte sur l’identifiant d’un auteur :

<map|hauteur=300px|largeur=400px|zoom=2>
<marker|id_auteur=2|markers=articles|focus>

ou (c’est équivalent) :

<map|hauteur=300px|largeur=400px|zoom=2|id_auteur=2|markers=articles|focus>

Ce qui donne :

  • Afficher les résultats d’une recherche

Pour permettre le localisation géographique des résultats d’une recherche, GMap contient une requête spécifique : markers=recherche.
Dans le squelette recherche.html de la distribution SPIP, la carte s’insère en ajoutant :

[<div style="height: 400px">
  (#GEOMAP{markers=recherche, recherche=#RECHERCHE, focus})
</div>]

Ce qui donne :

  • Modifier la requête pour une branche du site

Toutes les requêtes contenues dans GMap peuvent être surchargées : ce sont des squelettes que l’on peut spécialier en fonction d’une rubrique (squelette=XX) ou d’une branche (squelette-XX).
Par exemple, en plaçant un fichier gmap-kml-article-54.html dans le dossier squelettes, on redéfinit la requête par défaut (utilisée quand markers=query pour les articles de la rubrique 54 et des rubriques descendantes.

  • Modifier la représentation des points pour une branche du site

De la même manière, on peut surcharger l’apparence des points sur la carte. Pour surcharger l’apparence de points représentant les articles de la rubrique 11, il suffit de placer un fichier gmap-marker-article-11.gmd dans le dossier squelettes. Il s’agit d’un fichier XML à la syntaxe simple permettant de définir une icone :

<?xml version="1.0" encoding="UTF-8">
<markers>
  <icon type="shadow">
    <image>images/rub11/gmap-shadow.png</image>
    <size x="32" y="32" />
    <anchor x="0" y="32" />
  </icon>
  <icon state="normal" type="simple">
    <image>images/rub11/gmap-marker-article.png</image>
    <size x="32" y="32" />
    <anchor x="0" y="32" />
    <offset x="0" y="32" />
  </icon>
</markers>

Sur les cartes, les points peuvent apparaître avec des icones différentes :

Regroupement des bulles d’information

Quand une carte commence à contenir beaucoup de points, il arrive souvent que les icones se chevauchent.
Pour contourner ce problème, GMap propose une fonction de regroupement des bulles d’information qui permet de naviguer entre les descriptions des différents points affichés. La barre de navigation permet également de zoomer la carte pour différencier les points.

Cette fonction est désactivée par défaut, elle s’active depuis le paramétrage de l’interface.

Cette fonction est spécifique à l’implémentation, elle est implémentée pour Google Maps V2 et V3 mais ne le sera pas obligatoirement sur d’autres implémentations.

Export de fichiers KML

Pour transmettre les points à afficher au navigateur, GMap utilise par défaut le format KML. Il est donc tout à fait possible de télécharger un fichier KML représentant les points, par exemple pour l’afficher dans Google Earth.

On peut par exemple ajouter dans un squelette :

[<a href="(#URL_PAGE{gmap-query-default}|parametre_url{'id_rubrique',#ID_RUBRIQUE}|parametre_url{mime,application/vnd.google-earth.kml+xml})" title="<:bouton_telecharger:>" type="application/vnd.google-earth.kml+xml">(<:bouton_telecharger:>)</a>]

Ce qui produira un lien sur le fichier :
http://mondomaine/spip.php?page=gmap-query-default&id_rubrique=1&mime=application%2Fvnd.google-earth.kml%2Bxml

Boucles, balises et modèles

Balise #GEOMAP

La balise #GEOMAP permet d’afficher une carte et, optionnellement, d’y ajouter des points géographique.
Ces caractéristiques ont déjà été illustrées dans le chapitre Cartographie ci-dessus.

La balise essaye toujours de trouver un point de référence parmi les paramètres qui lui sont fournis et le contexte de l’appel (donc les boucles dans lesquelles se trouve la balise).
L’objet de référence est utilisé de façon différente selon qu’on se place du point de vue de la carte ou du point de vue des points à représenter :

  • Pour la carte, l’objet de référence sert à centrer la carte initialiser le positionnement de la carte : centre et facteur de zoom prennent la valeur définie sur l’objet. Si l’objet de référence n’est pas géolocalisé, GMap remonte sur ses ancêtres, puis utilise en dernier recours le paramétrage par défaut du site. Ce fonctionnement peut-être surchargé par le paramètre viewport, le paramètre focus ou les paramètres latitude, longitude, zoom.
  • Pour la recherche des points à ajouter, l’objet de référence est également utilisé : c’est l’objet à partir duquel on recherchera les fils, descendants, objets liés, etc.

Ce double rôle a ses avantages et ses inconvénients : d’un côté il permet de maitriser depuis l’interface de géolocalisation quelle sera l’étendue de la carte, d’un autre il peut amener des effets de bords étonnants. Dans ce dernier cas, on pourra décomposer l’appel à #GEOMAP en deux : un appel de #GEOMAP sans le paramètre markers suivi d’un appel à #GEOMARKER.

Pour fonctionner correctement, il faut cependant que la balise #GEOMAP soit intégrée dans une div ayant une hauteur explicite (en pixels), la largeur peut être exprimée en pourcentage. Dans le cas contraire la carte ne peut s’afficher correctement. Si la carte est intégrée dans un bloc dimensionnable ou qui peut être caché (par exemple dans des onglets), il sera nécessaire d’envoyer un évènement resize sur le bloc qui contient la carte afin qu’elle se redimensionne correctement.

La balise #GEOMAP accepte de nombreux autres paramètres qui permettent de surcharger toute l’apparence de la carte (et dont beaucoup dépendent de la couche d’implémentation de la carte). Ce serait long de tout détailler ici, référez-vous à la documentation intégrée au plugin.

Balise #GEOMARKER

Cette balise permet d’ajouter manuellement des points sur la carte. Les coordonnées peuvent être fournies explicitement, ou elle peuvent provenir d’un élément géolocalisé dans SPIP.

Si plusieurs balises GEOMAP sont présentes, on peut utiliser le paramètre map=X pour donner un numéro à la carte et lever les ambiguïtés. Sans ce paramètre, le marqueur sera ajouté sur la dernière carte créée au moment où la balise GEOMARKER est interprétée.

Balise #GEOKML

Cette balise permet d’ajouter un fichier KML sur la carte.

#GEOKML{url=http://code.google.com/p/kml-samples/source/browse/trunk/kml/Placemark/placemark.kmz}
#GEOKML{id_document=1962}
  • La première forme ajoute un fichier KML dont l’url est donnée explicitement.
  • La deuxième forme ajoute un fichier KML présent dans SPIP sous la forme d’un document.

Si plusieurs balises GEOMAP sont présentes, on peut utiliser le paramètre map=X pour donner un numéro à la carte et lever les ambiguïtés. Sans ce paramètre, le marqueur sera ajouté sur la dernière carte créée au moment où la balise GEOKML est interprétée.

Modèles map et marker

Ce sont les équivalents des balises #GEOMAP et #GEOMARKER pour l’insertion dans les textes des éléments de SPIP.

L’utilisation et les paramètres sont les mêmes, à une exception notable près : tous les identifiants doivent être accompagnés d’une valeur numérique car le modèle n’accède pas au contexte.

On peut donner un numéro à la carte par le paramètre carte, ceci permet de placer les marqueurs avant ou après la carte elle-même :

<marker|carte=10|id_article=1>
<map|carte=10>
<marker|carte=10|latitude=10|longitude=45|titre=un marqueur|texte=turlututu chapeau pointu>

Note : pour une raison que je saisi mal, un modèle sans paramètre (seulement <map> ne fonctionne pas. On peut s’en sortir en mettant un paramètre quelconque :

<map|toto>

Boucles

Le plugin introduit également une boucle GEOPOINTS qui permet de parcourir les points associés à un objet et une boucle GEOTEST qui permet de tester si un objet ou ses descendants sont géolocalisés.

Extensions et personnalisations

GMap a été conçu pour être personnalisable, il offre donc de nombreuses possibilités pour redéfinir les cartes.

La personnalisation est basée sur un mécanisme très proche de celui qu’utilise SPIP au niveau des squelettes : les requêtes sur les points, les icones et le contenu des info-bulles sont définis par des squelettes que l’on peut surcharger pour l’ensemble du site, pour une rubrique ou pour une branche. De plus, les icones et le contenu des info-bulles peuvent être définis selon le type d’objet et le type de point qu’ils représentent.

Requêtes sur les points

La combinaison des paramètres markers et query des balises #GEOMAP et #GEOMARKER permet de récupérer les points à afficher en exécutant une requête sur le serveur. Cette requête est définie dans un squelette qui renvoie un fichier au formats KML ou GeoJSON. Il est assez facile de redéfinir des fichiers de requête et de les intégrer dans le fonctionnement de GMap.

Ces fichiers sont traités comme des squelettes qui renvoient un fichier XML, ils peuvent donc contenir des boucles.
GMap contient plusieurs fichiers de requête qui peuvent servir d’exemple : gmap-kml-default.html, gmap-kml-articles.html, gmap-kml-documents.html, etc.

Une description plus détaillée des la surcharge des requête est disponible dans l’aide en ligne du plugin et reproduite sur loceanique.org.

Apparence des points

GMap permet également de définir des icones spécifiques pour chaque type d’objet, chaque type de point et par rubrique ou branche.
Il ne permet par contre pas, dans la version actuelle, de choisir une représentation spécifique depuis la partie privée du site, il faut forcément ajouter des fichiers sur le serveur.

Les icones utilisées sur les cartes ne sont pas de simples images :

  • Comme elle représentent un point géographique précis, elles doivent être dotée d’un point d’ancrage qui permet de les positionner au pixel près (c’est d’ailleurs pour cela que le terme « icone » est adapté).
  • Selon les fournisseurs l’image peut être séparée de l’ombrage, ce qui clarifie les cas où plusieurs marqueurs se chevauches et permet de jolis effets sur le déplacement (dans Google Maps l’ombre s’écarte comme si on soulevait le marqueur).
  • Selon les fournisseurs aussi, on peut définir un point d’ancrage des info-bulles.
  • GMap introduit la possibilité de sélectionner les marqueurs, il faut donc définir des images pour l’état sélectionné.

Pour cette raison, il ne suffit pas de fournir une image pour changer l’apparence des marqueurs. GMap utilise donc un fichier XML de définition des icones qui porte l’extension .gmd.

Comme les fichiers de requêtes (voir ci-dessus), les fichiers de définition des icones peuvent être surchargés selon les objets, les types de points ou les rubriques auxquelles appartiennent les objets représentés.

Contenu des bulles d’information

Selon le même principe, le contenu des bulles d’information est défini dans des fichiers squelettes dans lesquels on peut utiliser des boucles SPIP.

Le stylage des info-bulles est contenu dans un fichier style/gmap-balloon.css, il permet de redéfinir le look des bulles sans toucher à leur contenu.

Attention : en redéfinissant les fichiers gmap-info-*.html, on pourrait penser s’affranchir de gmap-balloon.css, mais ce n’est vrai que pour les fichiers KML lus dans Google Earth. En effet, en interne, seul le contenu de la balise <body></body> est conservé et le style des info-bulle se fait en intégrant gmap-balloon.css dans la page HTML qui contient la carte.

Lorsque la fonction de regroupement des info-bulles est activée, l’apparence de la barre de navigation est figée, on ne peut la modifier qu’en redéfinissant le fichier style/gmap-balloon.css.

Discussion

15 discussions

  • 5
    Hélène

    Bonjour,
    Depuis la dernière mise à jour de gmap, le bouton déplier de la partie privée ne fonctionne plus. Un regard sur la console me dit :
    TypeError : jQuery(this).gmap_depliant is not a function

    Il semble que le header gmap n’inclut pas toutes les css :

    <!-- Header GMAP -->
    <link rel='stylesheet' media='screen' href='../local/cache-
    _ css/4a4031fcee4a9f6f833e019fb863d45d.css' type='text/css' />
    
    
    
    
    <script type="text/javascript" src="http://maps.google.com/maps/api/
    js?sensor=false& v=3&language=fr"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi?key=ABQIAAAAMCZKaxs0YACHLVrwv_VdDxT7MTj6PSM3CZ
    8CsbvUTgZnwxx9MBTcBquRiNnXjY_8A1-2qlRpRDNWfQ"></script>
    <script type="text/javascript">
    //<![CDATA[
    google.load("earth", "1");
    //]]>
    </script>
    
    
    
    
    <script type="text/javascript">
    //<![CDATA[
    	SiteInfo.pluginRoot = "../plugins/auto/gmap/";
    	SiteInfo.iconDef = {
    		urlIconFile: "../plugins/auto/gmap/themes/gmap/images/marker.png",
    		widthIcon: 24,
    		heightIcon: 32,
    		anchorX: 11,
    		anchorY: 31,
    		urlShadowFile: "../plugins/auto/gmap/themes/gmap/images/shadow.png",
    		widthShadow: 32,
    		heightShadow: 32,
    		anchorShadowX: 11,
    		anchorShadowY: 31,
    		urlCompleteFile: "../plugins/auto/gmap/themes/gmap/images/marker-full.png",
    		widthComplete: 32,
    		heightComplete: 32,
    		anchorCompleteX: 11,
    		anchorCompleteY: 31,
    		popupOffsetX: 12,
    		popupOffsetY: 15
    	};
    // Il y a une erreur "undefined" sous IE, pour GoogleMaps et Yahoo, faire un appel pr�coce � document.namespaces semble r�gler le probl�me...
    var IE8NamespaceHack = document.namespaces;
    //]]>
    </script>
    
    <!-- Fin header GMAP -->

    Dernière mise à jour Géolocalisation et cartographie (v0.2.1) Rév. 62491 13/06/12

    j’ai désactivé tous les plugins non indispensable pour gmap et mon site qui est sous SPIP 2.1.17 [19782].

    Je pense revenir à la version antérieur mais comment faire ?

    D’avance merci,
    Hélène

    • Bonjour,
      Le script manquant est gmap_private.js, comme la compression des scripts est activée sur la partie privée, il doit se trouver en haut de la page. Et ça doit ressembler à ça :

      <script type='text/javascript' src='../local/cache-js/5ba0243b098f2fa0590c1e853d905375.js'></script>

      Dans ce javascript, on doit retrouver :

      /* compact [
      	../prive/javascript/jquery.js
      	../prive/javascript/jquery.form.js
      	../prive/javascript/ajaxCallback.js
      	...
      	../plugins/gmap/javascript/gmap_js_utils.js
      	../plugins/gmap/mapimpl/gma3/javascript/gmap_impl_public.js
      	../plugins/gmap/javascript/gmap_public.js
      	../plugins/gmap/javascript/gmap_private.js
      ] 65.5% */

      Je ne vois pas bien pourquoi une partie du header pourrait être manquante, surtout un truc de base comme ça. Mais comme la fonction gmap_sous_depliant est une extension de jQuery (plutôt une mauvaise idée d’ailleurs, mais c’est une autre question), il peut y avoir un problème de ce côté là.

      Je n’ai pas de site en 2.1.17, il faut donc que je teste sur un site en local pour voir où ça coince.

      En attendant vous pouvez tenter de supprimer le contenu de local/cache-js pour voir ce que ça donne.

    • Bonjour,

      D’abord merci pour ta réponse rapide.

      J’ai repris le problème ces derniers jours. Après avoir rechargé le plugin, j’ai vérifié dans le source et constaté que la compression des js est correcte, tous les scripts figurent dans le fichier.

      Mais cela ne fonctionne toujours pas.

      Le bug est apparu après la révision 62491 (depuis le couteau suisse).

      Serait-il possible d’avoir la version du plugin avant cette révision.

      D’avance merci

    • Bonjour,

      Les deux dernières versions de GMap 0.x ne sont que la création de la branche v0 depuis que j’ai commencé la version 1.x pour SPIP 3. La dernière évolution du code « date » de la révision 59891. Je ne pense pas que le problème vienne d’une évolution de GMap.

      Si la fonction jQuery.gmap_depliant() n’est pas connue, et que tous les scripts sont présents, la seule possibilité est qu’il y ait une erreur en amont qui bloque l’exécution des scripts inclus dans l’entête de la page. La console affiche-t-elle une autre erreur ?

      Fabrice

    • Bonjour Fabrice,

      et bonne année ;).

      J’ai repris l’analyse du bug. Après rechargement d’un spip tout neuf (2.1.23) et des plugins gmap et spip_bonux, sur une base vierge, le bug est présent pour googleearth.
      Résolution : tout semble fonctionner si le javascript de googleearth est placé en dernier, ce qui donne dans la compil :"
      ../plugins/auto/gmap/javascript/gmap_js_utils.js
      ../plugins/auto/gmap/javascript/gmap_private.js
      ../plugins/auto/gmap/javascript/gmap_public.js
      ../plugins/auto/gmap/mapimpl/gma3/javascript/gmap_impl_public.js
      ../plugins/auto/gmap/mapimpl/gma3/javascript/googleearth.js
      "
      Du coup, pour changer l’ordre d’apparition dans la compil, il faut modifier gmap_pipeline.php, inc/gmap_script_init.php, et le script_init.php de gmap3/public.

      Mais le choix googleearth n’apparaît pas dans le menu déroulant de la carte en partie privé pour rubrique et article. J’ai du rater quelque chose.

      Cela ne semble pas perturber le fonctionnement, mais bon... il vaut mieux voir avec LE spécialiste. Cela peut-il faire l’objet d’une révision où dois-je rester avec mes modif perso ?

      D’avance merci

    • Bonjour,
      Le script googleearth.js doit être inclus avant gmap_impl_public.js parce que ce dernier l’utilise, donc s’il n’est pas avant il risque d’y avoir un objet non défini.
      Ceci dit, je ne vois pas bien le rapport entre le problème que tu décrivais au début (sur les blocs dépliants) et un problème sur le plugin Google Earth.
      Quel est le problème exactement ? Que dit la console ? C’est toujours « TypeError : jQuery(this).gmap_depliant is not a function » ?

    Répondre à ce message

  • Bonjour,

    J’ai longtemps hésité en GIS et GMAP pour pouvoir géolocaliser tous mes articles, et après divers essais, j’ai choisi GMAP qui me paraissait plus simple, plus souple d’utilisation, et mieux documenté...

    Au final, et après quelques heures de boulot, je suis très content du résultat, et je souhaitais vous en remercier vivement ici :)

    Vous pouvez découvrir le résultat via ce lien : visa-photos, et je vous encourage vivement à me faire des remarques si besoin ;)

    Encore merci !

    Répondre à ce message

  • 3

    Bonjour et merci pour ce plugin qui m’a bien aidé jusqu’ici, mais aujourd’hui je viens de passer une journée entière à tourner en rond.

    L’objectif : afficher sur une carte les inscrits à un événement, je vais chercher l’adresse de chaque inscrit dans le champ correspondant (en fait trois champs : rue, code postal, ville que je concatène) des résultats du plugin FORMidable. Je n’ai donc pas de longitude, latitude mais une adresse que je transmets à Googlemaps par le biais du Geocoder, qu’il a la politesse de traduire en point sur ma carte.

    Sur GMAP, tout fonctionnait bien, jusqu’à ce que je me rende compte que passés les dix inscrits, les suivants n’apparaissaient pas, pour une raison qui m’échappe complétement le maximum de points simultanés que j’ai réussi à atteindre est de 11, mais la plupart de temps pendant mes tests j’aboutissais à 8 points. Sans que je sache s’il y a une restriction du côté de google ou un bug dans le plugin ou autre chose, en tous cas le problème ne semble pas venir des données saisies dans la base.

    Une idée ? Besoin d’autres infos pour mieux cerner le problème ? C’est un spip 2.1.12 et GMAP dans sa dernière version stable.

    Merci d’avance !

    • Et pendant que j’y suis, voilà le code de mes geomarkers, ça peut peut-être aider...

      <BOUCLE_article(ARTICLES){id_article}>
      <div style="position: relative; display: block; width: 634px; height: 400px;">
      [(#GEOMAP{id_article,zoom=8,fond=physic})]
      </div>
      </BOUCLE_article>
      
      #SET{espace,' '}
      <BOUCLE_reponses_selection(spip_formulaires_reponses){statut=publie}{id_formulaire=1}{par id_formulaires_reponse}>
      <BOUCLE_rue(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_9}>
      #SET{rue,(#VALEUR|stripslashes)}
      </BOUCLE_rue>
      <BOUCLE_cp(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_10}>
      #SET{cp,(#VALEUR|stripslashes)}
      </BOUCLE_cp>
      <BOUCLE_ville(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_11}>
      #SET{ville,(#VALEUR|stripslashes)}
      </BOUCLE_ville>
      <BOUCLE_prenom(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_2}>
      #SET{prenom,(#VALEUR|stripslashes)}
      </BOUCLE_prenom>
      <BOUCLE_nom(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_1}>
      #SET{nom,(#VALEUR|stripslashes)}
      </BOUCLE_nom>
      <BOUCLE_societe(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_3}>
      #SET{societe,(#VALEUR|stripslashes)}
      </BOUCLE_societe>
      <BOUCLE_boulot(spip_formulaires_reponses_champs){id_formulaires_reponse}{nom=input_4}>
      #SET{boulot,(#VALEUR|stripslashes)}
      </BOUCLE_boulot>
                [(#GEOMARKER{adresse=#GET{rue};#GET{cp};#GET{ville}, titre=#GET{prenom}#GET{espace}#GET{nom}, texte=#GET{boulot}&nbsp;&#40;#GET{societe}&#41;<br />#GET{ville}})]
      </BOUCLE_reponses_selection>
    • Bonjour,

      Il n’y a pas de limitation du nombre de points ajoutés sur la carte, pas voulue en tout cas. Les problèmes que j’ai rencontrés concernent le temps de calcul des squelettes quand il y a plus de 500 points, je travaille à améliorer les boucles pour la version 1 de GMap avec spip 3.

      La première chose à faire est de regarder dans la page générée le nombre d’appels à map.setMarker(). S’il en manque, le problème se situe côté serveur, dans les boucles qui entourent #GEOMARKER. S’il y en a autant qu’il devrait y en avoir, c’est que le problème se présente côté client, sur le navigateur qui interprète la page.

      Je crains que ce soit la deuxième possibilité. Et dans ce cas, peut-être le geocoder refuse-t-il des appels successifs et ne renvoie pas les coordonnées. Je n’ai pas testé l’ajout de plusieurs points par adresse parce que, pour moi, c’était surtout destiné à l’ajout d’un point isolé.
      Dans ce cas, vous pourriez peut-être faire les appels au geocoder dans le formulaire et renseigner les coordonnées dans des champs cachés pour les enregistrer dans la base.

      Tenez-moi au courant.

    • merci beaucoup pour votre réponse, et en effet il y a bien tous les appels à setMarker, et la console de firebug me renvoie invariablement un Zero à partir de 8 à 11 résultats. Je penche aussi pour une restriction du côté de google.

      Faudrait peut-être que je trouve un moyen d’envoyer les requêtes 5 par 5 avec un temps de latence, en ajax, j’ai essayé un peu dans ce sens là hier, mais sans grand résultat pour l’instant.

      Sinon oui la solution de géocoder les coordonnées dans la bdd au moment de l’inscription serait le plus propre mais là tout de suite j’ai la flemme et si je pouvais trouver une solution dans la direction que j’ai donnée jusqu’à maintenant je n’aurais pas l’impression d’avoir perdu mon temps, et ça c’est bon pour le moral :D

    Répondre à ce message

  • 7

    Bonjour

    Super plugin, merci.
    J’avais commencé à l’utiliser sous la branche 2.1 de spip.
    Une version compatible avec la 3.0 est-elle prévue ?

    • C’est prévu et ça arrivera un de ces jours puisque, utilisant moi-même GMap, je serai bien forcé de travailler la compatibilité. Mais je ne peux pas donner de date parce que j’ai moins le temps d’y travailler en ce moment. Si quelqu’un veut contribuer, ce serait avec plaisir...

      J’ai tout de même fait quelques tests et commencé à travailler l’intégration dans les menus et la déclaration du plugin. L’affichage des cartes dans la partie publique doit fonctionner. Par contre l’intégration dans la partie privée souffre de nombreux défauts et devrait être largement revue car elle était (visiblement) trop dépendante de l’implémentation de spip < 3.

      Parmi les évolutions prévues de GMap, la compatibilité spip 3 reste une priorité et deviendra cruciale dès la sortie officelle...

    • Super.

      Je ne suis pas assez caler en développement pour toucher à un code aussi avancé, mais je peux peut-être participer au débugage en faisant des tests avec la beta et en relevant des bugs.

      Je reste à votre disposition si celà peux aider.

    • Merci de la proposition. Je vous contacterai dès que j’aurai avancé.

    • Pour compléter le fil : j’ai commencé le portage en SPIP 3.

      Mais il y a évolutions bien tentante dans SPIP 3... et je vais en profiter pour apporter la plupart des améliorations que j’avais en tête sur GMap...

      Ça prendra un peu de temps mais je pense que ça faudra le coup d’attendre !

    • Parfait. On patiente.
      Au passage : y a-t-il une fonction déjà intégrée ou prévue pour localiser un article dans un rayon de x km autour d’un point défini ?
      Merci

    • Je me posais justement des questions sur l’implémentation d’un critère de distance :

      • Il y a plein de cas d’utilisation où l’on voudrait sélectionner les points proches, d’ailleurs c’est déjà utilisé en interne pour rechercher les « voisins » temporels.
      • Mais on représente ces points sur une carte rectangulaire, il me semble donc plus pertinent de le faire sur un interval latitude/longitude, sinon on verra un rond de points sur la carte et rien sur les côtés.
      • Pour le plupart des besoins, l’information la plus pertinente sera la distance sur route, donc tout à fait autre chose.
      • Il me semble qu’on aura besoin d’une distance réelle que dans quelques cas très particuliers sur des données techniques et pas forcément pour afficher le résultat sur la carte.

      Je me trompe probablement... Si vous avez des cas d’utilisation de distance « à vol d’oiseau » ça m’intéresserais de les lire, ça me donnerait une idée plus précise des possibilités. Est-ce que de simple zone rectangulaires suffisent, ou non ?

    • Bonjour

      La proposition me parait logique. pas vraiment besoin d’un rayon, l’affichage d’une zone rectangulaire est très bien. Effectivement dans mon cas l’info la plus pertinente est la distance par la route, mais pas nécessaire.

    Répondre à ce message

  • 5
    Massimo

    Un nouveau erreur ,
    je ne comprends pas pourquoi....il se presente sur le SVR pas sur mon pc....

    May 09 08:30:12 124.115.0.102 (pid 4339) Erreur dans la lecture du fichier plugins/gmap/themes/gmap/system.gmd, Erreur "Empty document" (4) at line 1
    May 09 08:34:30 93.45.212.69 (pid 15242) Erreur dans la lecture du fichier plugins/gmap/themes/gmap/system.gmd, Erreur "Empty document" (4) at line 1
    May 09 08:34:45 93.45.212.69 (pid 15949) Erreur dans la lecture du fichier plugins/gmap/themes/gmap/gmap-marker-rubrique.gmd, Erreur "Empty document" (4) at line 1
    May 09 08:34:46 93.45.212.69 (pid 15949) Erreur dans la lecture du fichier plugins/gmap/themes/gmap/gmap-marker-article.gmd, Erreur "Empty document" (4) at line 1
    May 09 08:34:50 93.45.212.69 (pid 15949) Erreur dans la lecture du fichier plugins/gmap/themes/gmap/system.gmd, Erreur "Empty document" (4) at line 1

    L’effect est que la map n’affiche pas su la partie privée. Sur la partie public les maps vont en attente.....
    j’ai controllé les permissions sur les repertoires et tout est ok....
    Mistère...

    Ciao
    Massimo

    • Massimo

      C’est interessante que sur prive_spip.log il devient comme ça

      May 09 08:40:21 93.45.212.69 (pid 25717) Erreur dans la lecture du fichier ../plugins/gmap/themes/gmap/priveActive.gmd, Erreur "Empty document" (4) at line 1

      Au contraire sur gmap.log il etait comme dans mon message precedente...

      Ciao Massimo

    • Bonjour Massimo,

      Le fichier priveActive.gmd est utilisé la partie privée, les autres ne doivent être utilisés que sur la partie publique. Ça doit expliquer la différence.

      Maintenant, pour l’accès aux fichiers, peut-être un problème de chemin absolu/relatif, ou les droits de lecture depuis le PHP ?

      Fabrice

    • Massimo

      Merci.
      Je vais chercher mieux le pourquoi ce nuit ... :(

    • Massimo

      Trouvé !

      Il depends des fichiers .gmd

      Ces fichiers ont des characters ’mauvaises’ au start qui fait aller le parser xml en erreur
      Example
      <?xml v

      C’est vraiment strange, je l’ai trouvé avec un log du serveur, pas avec des editors.
      En fait, le seul editor qui me les montre est HTML-Kit.
      Tous les autres qui j’utilise (PSPAD, PRogrammers Notepad 2, Notepad ++) ne le montrent pas, ni moins en HEX.

      En effect j’ai des problemes avec tes sources. Avec PSPAD tous les char accenté de certsain fichiers crèent des problèmes (et ne sont pas visualisés, peut etre un fait de charset ? Quel utilises-tu ?

      Je vais re-editer les gmd avec HTML- Kit :)
      Peux-tu verifier ?

      Ciao Massimo

    • Les fichiers sont encodés en utf-8, avec BOM, c’est ce qui passe avant. Avec Notepad++ il faut faire « convertir en utf-8 (sans BOM) » pour les supprimer.

      Les fichiers XML sont en utf-8 parce qu’ils le déclarent en entête.... Je pense que je peux les convertir sans soucis en utf-8 sans BOM. 

      Les autres fichiers de sources sont en ANSI, le charset doit être qqchose comme Windows-1252.

      Je ne livre pas tout de suite : trop tard...

      Fabrice

    Répondre à ce message

  • 1
    Massimo

    Bonsoir (nuit :( ) Fabrice.

    Je te signale un bug sur la personalisation des marquers.
    Si on utilise des gmd du type gmap-marker-[object]-[type_point].gmd cela ne marche pas.

    Le problème est sur inc/geomap-geoloc.php.
    Quand on va rechercher les fichiers basés sur type_point le code utilise une variable ($type_point) qui n’est pas initialisée en place de la variable du contexte ($contexte[’type_point’] ).

    Il faut substituer ligne 434

    if (!$type_point || (strlen($type_point) == 0) ||

    avec

    if (!$contexte[’type_point’] || (strlen($contexte[’type_point’]) == 0) ||

    et, plus bas, lignes 442 - 443

    $name = $type_point ;
    if (!$type_point || (strlen($type_point) == 0) ||

    avec

    $name = $contexte[’type_point’] ;
    if (!$contexte[’type_point’] || (strlen($contexte[’type_point’]) == 0) ||

    je pense que c’est tout...

    Ciao
    Massimo

    • Effectivement !

      Le problème est que j’ai une modif en cours sur ces fic hiers, alors je ne peux pas corriger tout de suite...

      Je vois ça sous peu.

      Fabrice

    Répondre à ce message

  • 3

    Bonjour,
    J’ai installé Gmap sur un serveur Amen, mais cela ne fonctionne pas :
    quand je me rend sur : ecrire/ ?exec=configurer_gmap
    Il me répond : configurer_gmap : Accès interdit
    Ce qui est un peu fort, étant logué en admin 1...
    D’ailleurs l’icon gmap n’apparait pas au survol de configuration.
    J’ai du coup mis les droits à 777 sur l’ensemble du plugin, mais rien n’y fait.
    Je suis en spip 2.1.13 et Gmap 0.2.1
    La base sql à un moteur InnoDB, cela peut-il venir de la ???
    J’utilise souvent ce plugin, sur plusieurs sites, et je n’ai jamais eu ce problème...

    Merci pour vos lumières, car moi la je sèche et désespère...

    • Re-bonjour,
      En complément de mon premier message, il arrive parfois, après avoir vidé le cache, d’avoir cette erreur :

      Fatal error : Call to undefined function gmap_est_actif() in /htdocs/public/www/plugins/gmap/gmap_pipeline.php on line 36

      La chose curieuse, c’est qu’en modifiant gmap_autoriser.php (autoriser omnireso plutot que webmaster), le bouton apparait bien, mais ensuite la même erreur arrive (configurer_gmap : Accès interdit).
      C’est comme si gmap ne me considérait pas comme webmaster...

    • Re-re-bonjour !

      Suite et fin de ce fil :
      J’ai activé via le couteau suisse la déclaration des webmestres, et tout a fonctionné.
      Donc il y a bien un souci de reconnaissance de l’auteur 1 en tant que webmestre.

      Bonne journée !

      Sam

    • Bonjour,

      Pour le problème avec gmap_est_actif(), c’est dû au fait que le fichier contenant la fonction n’a pas encore été chargé au moment de l’appel. C’est un problème connu dont il a été question plusieurs fois sur spip-zone à propos d’autres plugins. Ce n’est pas vraiment bloquant puisqu’il suffit d’un F5 pour que tout revienne dans l’ordre. J’essayerai tout de même de forcer le chargement de la fonction depuis le pipeline.

      En ce qui concerne l’autre problème, je n’ai pas d’idée à priori. GMap ne gère pas les autorisations, il se contente de limiter le paramétrage en utilisant la fonction autoriser(« webmestre ») comme un peu partout.
      Je n’ai jamais rencontré ce problème (et il ne m’a jamais été remonté), donc il peut ya avoir deux explications :

      • Soit c’est dû à une évolution de la gestion des autorisations dans SPIP 2.1.13. Je ne l’ai pas encore testé mais si c’est le cas, je devrai retrouver le problème rapidement.
      • Soit c’est dû à l’hébergement que vous utilisez. Ça serait plus exotique et je n’aurai aucune chance de reproduire le problème.

      Je vous tiens au courant si je trouce qqchose.

      Fabrice

    Répondre à ce message

  • 1

    Bonjour,

    J’utilise jusqu’à présent GIS. Est-ce que GMap en est une évolution ? J’ai (presque) lu toute cette page sans arriver à comprendre les différences..

    merci
    dd

    • Excellente question...

      D’abord historiquement, GIS2 et GMap, sont partis de GIS1 pour améliorer le fonctionnement, notamment permettre de géolocaliser tous les objets de SPIP. GIS2 et GMap ont été développés en parallèle, sans se connaitre et ils ont été publiés à peu près en même temps.

      Du coup, c’est vrai que c’est un peu balot d’avoir deux plugins différents.
      Alors, pour tenter le comparatif :

      -  Les deux offrent la possibilité de géolocaliser tous les objets.

      -  GIS2 permet d’éditer des points indépendants puis de les récupérer sur les objets. On peut associer un libellé au point et ce libellé apparait dans les bulles. Un ou plusieurs points peuvent être associés à un objet SPIP.

      -  Pour GMap, les points représentent un objet de SPIP et le contenu des bulles est construit par un squelette à partir de l’objet associé. On peut créer plusieurs points par objet et leur associer un type.

      -  GMap va beaucoup plus loin que GIS2 dans le paramétrage des cartes, des points et bulles. Le paramétrage des carte peut se faire depuis la partie privée du site, l’apparence des points peut être spécifique à un objet, une rubrique et un type de point. Le contenu des bulles peu aussi être paramétré selon les mêmes critères.

      -  En ce qui concerne l’interface de géolocalisation c’est selon les goûts... Moi je me sers beaucoup de la fonction « voisins » de GMap.

      -  Pour les performances, GIS2 est plus léger pour le serveur. GMap a évolué pour permettre de désactiver une partie des moyens de spécialisation des points et des bulles qui sont assez lourds.

      Pour l’avenir, une fusion des deux plugins a déjà été évoquée, on s’y mettra probablement un jour.

      J’espère que ça vous aidera à faire un choix !

    Répondre à ce message

  • 2

    Bonjour,
    Attention le plugin génère des warning « Call-time pass-by-reference has been deprecated ».
    (visiblement, pour être à jour : enlever le « & » côté appel et le mettre côté « function(...) ».
    par exemple pour la fonction _gmap_recurse_fils

    Il y a t-il un correctif de prévu ?

    • C’est corrigé sur spip-zone (révision 59891). Le zip sera bientôt à jour.

      J’ai cherché les appels par référence, je ne crois pas en avoir manqué mais on ne sait jamais. SVP signalez-moi d’autres éventuels problèmes : avec le PHP 5.2 de mon hébergeur point de warnings !

    • Pas d’autres soucis ?

    Répondre à ce message

  • 2

    Maintenant que le plugin fonctionne merveilleusement bien, j’ai une petite question « boucle ».

    J’ai une carte générale qui affiche tous les lieux de concerts d’un groupe dans le monde (1000), et chaque point renvoit à l’article qui présent le concert. Sur chaque page d’article, il y a une carte avec le point précis du lieu de ce concert.

    Je souhaiterais sous la carte afficher, par le biais d’une boucle, les lieux « proches » où le groupe a joué (disons le même pays, la même zone).

    Est-il possible de construire ça ? Avec quelle boucle, et quel critère pour fixer la « proximité » ?

    • Je n’ai pas mis de critère de proximité dans GMap. Peut-être à l’avenir...

      Par contre, il est tout à fait possible de faire une boucle GEOPOINTS, de lui mettre des critères sur la latitude et la longitude, puis d’utiliser la balise #GEOMARKER pour ajouter les points sur la carte.
      Un critère sera surtout utile pour gérer le passage 180° à -180° et pour réutiliser des coordonnées du contexte.

      Pour ce qui est de sélectionner les points dans un même pays, une des évolutions prévues est d’utiliser le geocoder pour ajouter ces informations sur un point... Il sera alors facile d’ajouter ce critère dans une boucle. Mais ce n’est pas actuellement dans mes priorités donc ça risque de traîner un peu.

      J’ai démarré des modifs pour accélerer la requête sur les points. Elle est un peu longue quand on atteint le millier de point. On peut diminuer le temps de calcul si on suppose que tous les points du même type affichés utiliseront la même icone et la même info-bulle. C’est à mon avis la majorité des cas.
      J’intégrerai un critère de proximité quand je livrerai cette modification.

    • Eh bien merci, j’ai trouvé en attendant une autre solution. Je trouve vraiment ce plugin déjà tr !s bien en l’état. Fluide, pratique, et facile à installer et utiliser.

    Répondre à ce message

  • 7

    Grr, je ne comprends pas pourquoi mes marqueurs ne s’affichent plus, et je recherche donc un peu d’aide. Pourtant, ce matin, après installation du plugin, et test, ça marchait, depuis plus rien ! Je suis en spip 2.1.12.

    Pour résumer, j’ai une base de 1000 concerts (1 concert = 1 article dans la rubrique 8) dont je veux géolocaliser les lieux, j’avais fait le travail pour une centaine de dates, et tout se passait bien. Depuis la carte qui regroupe tous les lieux de concert n’affiche plus les marqueurs (la preuve ici : http://www.radiohead.fr/-concerts-).

    Le code est :

    [<div style="position: relative; display: block; width: 580px; height: 420px;">
        (#GEOMAP{id_rubrique=8, markers=query})
        </div>]

    Je pensais que les géolocalisations n’étaient pas prises en compte, mais je me rends compte que si, puisque sur chaque page de concert, j’avais pris soin d’ajouter une carte qui n’affiche que le lieu de concert en question (exemple avec une date aux Etats-Unis : http://www.radiohead.fr/27-fevrier-2012-American-Airlines) avec le code suivant :

    [<div style="float: right; width: 270px; height: 300px;">
    (#GEOMAP{id_article, markers=query})
    </div>]

    et donc, comme dans le premier cas, je n’ai aucun marqueur sur ma carte MAIS la carte est bien centrée sur le point que j’ai géolocalisé. On le constate en zoomant. C’est ce qui me fait penser que j’ai un problème d’affichage de marqueur !
    Si quelqu’un a une solution, une piste... je suis preneuse.

    • marjorie

      J’avais oublié de mettre mon nom !

    • Fabrice

      J’ai essayé et le fichier qui contient les marqueurs est tronqué (url : http://www.radiohead.fr/spip.php?page=gmap-kml-default&merkers=query&objet=rubrique&id_objet=8&map=1&id_rubrique=8). Je n’ai pas eu le temps de trouver pourquoi... Si tu peux essayer en ajoutant un var_mode=debug ça pourrait aider à voir ce qui plante.

      En attendant, j’ai essayé la même requête en json et là, ça passe (ce qui plaiderait pour une limitation quelconque du serveur, le fichier json étant un peu plus petit...), url : http://www.radiohead.fr/spip.php?page=gmap-json-default&markers=query&objet=rubrique&id_objet=8&id_rubrique=8&format=json.
      Donc en ajoutant un format=json dans les paramètres de #GEOMAP ça devrait marcher.

      Je prendrais le temps de regarder plus en profondeur ce soir.

    • marjorie

      Déjà, grand merci à toi d’y avoir regardé ! Je teste le format=json dans un premier temps !

    • J’ai de nouveau essayé de comprendre le(s) problème(s) :

      Pour les cartes qui sont sur les articles, il y a une erreur dans les paramètres de GEOMAP : avec markers=query, la requête va chercher les descendants de id_article géolocalisés. Pour représenter le point de l’article lui-même, il faudrait utiliser markers=local ou markers=articles.

      Concernant la carte de la rubrique, le problème est bien que le fichier qui ramène les points n’arrive pas complet et n’est donc pas un XML valide, d’où pas de points du tout... Par contre je ne sais pas pourquoi. Avec des requêtes différentes (par exemples requête sur gmap-kml-articles au lieu de gmap-kml-default) ça coupe à des endroits différents, donc il me semble que le problème n’est pas lié au contenu d’un article. Ça proviendrait plutôt d’une limite que le process rencontre pendant le traitement (temps de calcul, mémoire...). Il faut voir les traces PHP pour savoir, ou le debug de SPIP peut-être.
      L’utilisation du format json (paramètre format=json dans GEOMAP) devrait résoudre le problème, mais ça m’embête parce que, du coup, je ne saurai jamais ce qui ne marche pas !

      Il y a un autre bug avec les caractères accentués : les titres des points manquent. Quel est l’encodage de votre site ?

    • marjorie

      Enorme merci pour toutes ces combines, qui m’ont permis de faire un affichage correct dans les deux cas.

      J’ai en effet un problème avec certains caractères accentués dans les titres, je vais changer ça à la mains demain je pense.

      Le site est encodé en utf-8, mais il doit rester par ci-par là quelques reliquats des vieilles version en html...

    • Tant mieux si ça marche.

      Cependant ça me semble assez long. Il est normal que, avec 1000 points, le temps de calcul de la page soit assez long. Cependant, une fois qu’elle est en cache, ce temps devrait disparaître. Avez-vous activer la compression des flux html dans spip (configuration avancée, tout en bas de la page) ?
      Sur la page http://www.loceanique.org/spip/rubrique54.html, qui représente 700 points, on voit bien la différence entre le temps pris quand le flux est recalculé (après avoir vidé le cache ou modifié un article) et quand il est renvoyé par le cache.

      Je vais faire une modification dans GMap pour optimiser le calcul des listes de points : http://www.loceanique.org/spip/rubrique57.html#article450. Je signalerai la nouvelle version sur cette page.

    • Je n’avais pas activé la compression, c’est désormais chose faite !

    Répondre à ce message

  • 1

    Bonjour,

    J’ai un conflit avec jquery.js.
    il est dans mon inc_pied pour charger mes JS à la fin. si je désactive celui-ci : http://ecomeeting.info/js/jquery.js alors GMAP fonctionne.

    Le souci c’est que j’en ai besoin de ce JS.
    Quelqu’un aurait-il une piste pour régler ce conflit ?

    • GMap repose sur le jquery qui est embarqué dans SPIP. Utiliser un jQuery plus récent peut toujours provoquer des interférences avec SPIP. Et comme GMap fonctionne principalement à partir de javascript déclenchés au chargement du document, si le js plante GMap ne s’initialise pas.

      Il faut comprendre pourquoi l’ajout d’un jQuery 1.7.1 provoque une erreur dans ajaxCallback.js et, à l’inverse voir se qui empêche les scripts du site de fonctionner avec un jQuery 1.4.4 embarqué par SPIP.

      Je crains de ne pas avoir plus d’idées.

    Répondre à ce message

  • 13

    Bonjour,

    Chez moi le plugin ne fonctionne QUE sur Firefox, avec IE8 ou 9 sous XP ou W7 j’ai invariablement une fenêtre grise et pas de carte. (voir image jointe)

    Et ce sur plusieurs machines , j’ai cherché dans les paramètres de sécurités, réinstallé Activex , ajouté google dans les sites de confiances .... mais rien à faire je ne comprends pas pourquoi cela ne fonctionne pas avec IEx.
    Une Idée ?

    Cordialement,
    Michel

    • Bonjour,

      Non, pas trop d’idée...
      Je travaille principalement sur W7/IE9 et ça passe sans problème. Et je teste régulièrement sur XP avec IE8, ainsi qu’avec Chrome et FireFox.

      Pendant le développement du plugin, les pages grises provenaient invariablement d’une erreur Javascript. Je suis tombé sur des erreurs dans mon code bien sûr, mais aussi que des erreurs dues à la version de JQuery ou à la compression des scripts faite par SPIP.

      Dans le plugin, je désactive la compression des scripts dans l’espace par un « define(’_INTERDIRE_COMPACTE_HEAD_ECRIRE’,true) ; » dans gmap-options.php.
      Mais il n’y a pas de raison que le problème ne se trouve que sur IE.

      Pour avancer, pouvez-vous :
      1 - Essayer en désactivant la compression des scripts dans l’admin de SPIP.
      2 - Vérifier que IE ne se met pas en mode de compatibilité dégradé (juste au cas où, mais l’admin de SPIP aurait aussi une drôle de tête...)
      3 - Activer les outils de développement sur IE9 (bien mieux que les précédents) et regarder dans l’onglet « script » si la console indique une erreur.

      Merci,
      Fabrice

    • Merci du retour rapide,

      1° La compression n’est pas activée
      2° Pas de mode de compatibilité dégradé
      3° Effectivement il y a une erreur avec le débogueur.

      voici l’erreur
      gmap_impl_public.js, Ligne 276 Caractère 4
      SCRIPT445 : Cet objet ne gère pas cette action

      Et la ligne concernée
      mapOptions.center = new google.maps.LatLng(params.viewLatitude, params.viewLongitude) ;

      Mais bon pour moi cela ne parle pas désolé.

      Michel

    • Bon, c’est le premier appel à une objet Google Maps V3 dans la construction de la carte, ce qui me laisse penser que, pour une raison ou une autre, le script Google Maps ne s’est pas chargé.
      Il faudrait que je voie le code source de la page.
      Est-ce que le site qui produit l’erreur est public, puis-je avoir un accès à la partie privée ?
      Sinon, passez-moi une adresse mail par un message privé sur spip-contrib et on s’échangera la page HTML par mail.
      Je n’arrive pas à trouver une cause qui soit spécifique à IE.

    • Oui le site est public, (enfin par encore en ligne officiellement) c’est ici
      http://www.lanrivoare.fr/nouveau_site

      La carte doit apparaitre dans l’onglet « Localisation »

      c’est suffisant l’adresse public ?

      Cordialement,

      Michel

    • Eh bien, sur le site public ça marche. J’ai un petit soucis, sous IE, avec le fait que la carte est dans une div cachée : il faudrait envoyer un évènement « resize » sur la div qui contient la carte (class=« carte_gmap ») au moment où le conteneur est rendu visible.

      Mais ça n’a aucun rapport avec ce qu’il se passe sur la partie privée et là, je ne peux pas la voir.

      Ravi de voir gmap sur le site de Lanrivoare !

    • Merci du « encore » retour rapide,

      Ça ouvre des horizons car chez moi rien ni sur public ni si la partie privée, sur mes deux machines (W7 Pro IE9, et XP pro IE8), cela confirme ce que je voyais arriver depuis un moment j’ai un « bazar » sur ma connexion, car même lorsque j’essaie à travers une prise de contrôle via le bureau à distance (machine hors de chez moi) c’est la même chose sur la partie public et privée de la machine distante.
      Ma box « filtre » ? c’est le seul lien commun ?, bon j’ai du mal à comprendre et j’avoue être « sec ».

      En tous cas merci pour l’aide.
      Bonne fin de soirée, et merci pour ce plugin bien pratique.
      Cordialement,
      Michel

    • Salut,
      j’ai le meme erreur avec Explorer. Avec Firefox et Chrome est OK.

      Je pense (pas sur !!!) que l’erreur est dans ces fonctions javascript, qui ont une liste de params terminé avec ’,’ (et peut-etre fait des problèmes avec explorer)

      map.setIcon("rubrique", {
      	urlIconFile: "plugins/gmap/images/gmap-marker-rubrique.png",
      	urlShadowFile: "plugins/gmap/images/gmap-shadow.png",
      	widthIcon: 32,
      	heightIcon: 32,
      	widthShadow: 32,
      	heightShadow: 32,
      	anchorX: 11,
      	anchorY: 31,
      	popupOffsetX: 12,
      	popupOffsetY: 15,
      	});
      map.setIcon("rubrique_sel", {
      	urlIconFile: "plugins/gmap/images/gmap-marker-rubrique-high.png",
      	urlShadowFile: "plugins/gmap/images/gmap-shadow.png",
      	widthIcon: 32,
      	heightIcon: 32,
      	widthShadow: 32,
      	heightShadow: 32,
      	anchorX: 11,
      	anchorY: 31,
      	popupOffsetX: 12,
      	popupOffsetY: 15,
      	});

      qui sont gerés pas gmap_ajoute_markers() en gmap_geoloc.php

      Ciao
      Massimo

    • Bonjour,
      Merci pour la piste, mais... non je ne crois pas : je mets assez régulièrement des virgules en fin de liste pour éviter les oublis lors des rajouts, ça ne pose de problème ni sur FF ni sur IE. Peut-être sur un IE6 ?
      Avec les outils de développement intégrés dans IE9, vous devez pouvoir me dire quelle ligne plante, je pourrais alors voir ce qui cause problème.
      A+
      Fabrice

    • Bonsoir,
      merci de ta reponse.
      J’utilise pour mes tests IE7, FireFox 6, Chrome 15.0.
      Je te confirme que le problème est sur l’appel de la fonction setIcon.
      Je l’ai trouvée parce que IE me signale un erreur javascript a la ligne de closure de l’appel de setIcon , ç.a.d

              });

      qui est just après

      popupOffsetY: 15{{,}}

      Si j’ai ben compris Gmap crées une icon pour chaque marker avec la fonction setIcon.

      J’ai fait comme ça :
      1- j’ai pris l’HTML de la page
      2- je l’ai sauvegardée comme test.html et je l’ai mis dans la racine du site
      3- j’ai supprimé toutes les « , » après le param popupOffsetY : 15
      4- j’ai sauvegardé

      Et ça marché.

      Je vais un petit peu plus loin.
      J’ai régardé le code.
      La parametrisation de setIcon est genérée dans gmap_definir_parametre_icon()
      Peut-etre il suffit de changer

      function gmap_definir_parametre_icon($iconFile, $shadowFile = NULL,
      				$xAnchor = NULL, $yAnchor = NULL, $xShadowAnchor = NULL, $yShadowAnchor = NULL,
      				$xOffset = NULL, $yOffset = NULL,
      				$varName = NULL)
      {
      	if ($shadowFile == NULL)
      		$shadowFile = _DIR_PLUGIN_GMAP . 'images/shadow.png';
      		
      	$imageInfo = @getimagesize($iconFile);
      	$iconWidth = $imageInfo[0] ? $imageInfo[0] : 32;
      	$iconHeight = $imageInfo[1] ? $imageInfo[1] : 32;
      	$imageInfo = @getimagesize($shadowFile);
      	$shadowWidth = $imageInfo[0] ? $imageInfo[0] : 32;
      	$shadowHeight = $imageInfo[1] ? $imageInfo[1] : 32;
      
      	$out = "";
      	if ($varName)
      		$out .= 'var '.$varName.' = ';	
      	$out .= '{
      		urlIconFile: "'.$iconFile.'",
      		urlShadowFile: "'.$shadowFile.'",
      		widthIcon: '.$iconWidth.',
      		heightIcon: '.$iconHeight.',
      		widthShadow: '.$shadowWidth.',
      		heightShadow: '.$shadowHeight.',';
      	if ($xAnchor != NULL)
      		$out .= '
      		anchorX: '.$xAnchor.',';
      	if ($yAnchor != NULL)
      		$out .= '
      		anchorY: '.$yAnchor.',';
      	if ($xShadowAnchor != NULL)
      		$out .= '
      		anchorShadowX: '.$xShadowAnchor.',';
      	if ($yShadowAnchor != NULL)
      		$out .= '
      		anchorShadowY: '.$yShadowAnchor.',';
      	if ($xOffset != NULL)
      		$out .= '
      		popupOffsetX: '.$xOffset.',';
      	if ($yOffset != NULL)
      		$out .= '
      		popupOffsetY: '.$yOffset.',';
      	$out .= '
      	}';
      	if ($varName)
      		$out .= ';' . "\n";
      	return $out;
      }

      Avec

      function gmap_definir_parametre_icon($iconFile, $shadowFile = NULL,
      				$xAnchor = NULL, $yAnchor = NULL, $xShadowAnchor = NULL, $yShadowAnchor = NULL,
      				$xOffset = NULL, $yOffset = NULL,
      				$varName = NULL)
      {
      	if ($shadowFile == NULL)
      		$shadowFile = _DIR_PLUGIN_GMAP . 'images/shadow.png';
      		
      	$imageInfo = @getimagesize($iconFile);
      	$iconWidth = $imageInfo[0] ? $imageInfo[0] : 32;
      	$iconHeight = $imageInfo[1] ? $imageInfo[1] : 32;
      	$imageInfo = @getimagesize($shadowFile);
      	$shadowWidth = $imageInfo[0] ? $imageInfo[0] : 32;
      	$shadowHeight = $imageInfo[1] ? $imageInfo[1] : 32;
      
      	$out = "";
      	if ($varName)
      		$out .= 'var '.$varName.' = ';	
      	$out .= '{
      		urlIconFile: "'.$iconFile.'",
      		urlShadowFile: "'.$shadowFile.'",
      		widthIcon: '.$iconWidth.',
      		heightIcon: '.$iconHeight.',
      		widthShadow: '.$shadowWidth.',
      		heightShadow: '.$shadowHeight;
      	if ($xAnchor != NULL)
      		$out .= ',
      		 anchorX: '.$xAnchor;
      	if ($yAnchor != NULL)
      		$out .= ',
      		anchorY: '.$yAnchor;
      	if ($xShadowAnchor != NULL)
      		$out .= ',
      		anchorShadowX: '.$xShadowAnchor;
      	if ($yShadowAnchor != NULL)
      		$out .= ',
      		anchorShadowY: '.$yShadowAnchor;
      	if ($xOffset != NULL)
      		$out .= ',
      		popupOffsetX: '.$xOffset;
      	if ($yOffset != NULL)
      		$out .= ',
      		popupOffsetY: '.$yOffset;
      	$out .= '
      	}';
      	if ($varName)
      		$out .= ';' . "\n";
      	return $out;
      }

      J’ai surchargé le fichier gmap_geoloc.php avec la fonction modifiée comme ça et ça a marché...

      Ciao Massimo

    • Bon, dans ce cas... Ça fait un moment que je ne teste plus avec IE7.

      Ça m’inquiète un peu, puisque, comme je le disais, j’ai adopté cette écriture un peu partout, en php et en javascript parce que j’en avais marre d’avoir des erreurs après des ajouts de paramètres en oubliant de remettre la virgule. Donc il va falloir que je passe tout le code en revue pour mettre ça d’équerre.
      Ceci dit, il y a quelque chose qui me chiffonne : c’est sur l’ajout des marqueurs que le script doit se planter, donc la carte devrait déjà être créée. Pourquoi est-elle grise ? Un problème de redimensionnement ?

      En ce qui concerne les icones, non, GMap ne créé par une icone pour chaque marqueur mais une icone pour chaque type de marqueur. Dans ton exemple, c’est une icone de rubrique qui sera partagée par tous les marqueurs de rubrique.

      Je regarde pour les modifs de « , » et je remets un message quand je commite.

      A+

      Fabrice

    • Bonjour.

      Pour céla qui j’ai vu :
      -  setIcon is appelèe pendant la création de la carte (le code que j’ai posté est à l’interieur de la fonction loadCartePublic1 qui est appelée avec jQuery(document).ready(function())

      jQuery(document).ready(function()
      {
      	if (!isObject(gMap("gmap_map1")) || !gMap("gmap_map1").isLoaded())
      		loadCartePublic1();
      });

      IE7 trouve un erreur sur l’appel de setIcon et fait ’invalide’ toute la fonction.
      Pour célà la carte n’est pas montrée

      -  sur les icones. gmap (sur mon site) appelle setIcon deux fois par chaque marker.
      Example sur mon site

      // Chargement des marqueurs des descendants
      	map.setIcon("rubrique", {
      ..})
      map.setIcon("rubrique_sel", {
      ..})
      map.setMarker(6, {...})
      map.setIcon("rubrique", {
      ..})
      map.setIcon("rubrique_sel", {
      ..})
      map.setMarker(1, {
      ..})
      map.setIcon("article", {
      ..})
      map.setIcon("article_sel", {
      ..})
      map.setMarker(5, {
      ..})
      Etc...

      J’utilise la balise #GEOMAP avec markers=recursive

      Maintenant ça marche sur mon site, je n’ai pas trouvé d’autres problemes de ce type.

      Ciao
      Massimo

    • C’est corrigé sur SPIP-Zone, révision 54597.
      Grand merci d’avoir signalé le bug : ça faisait longtemps que je n’avais pas testé sur IE7 !

      J’ai aussi amélioré le cache des icones : il est destiné à ne pas rechercher deux fois quel définition d’icone il faut utiliser (gmap-marker-default, gmap-marker-document, ou gmap-marker-document-34 ?). Il n’était donc actif que sur les articles ou documents d’une même rubrique.
      Il y a maintenant un second buffer dédié pour ne pas générer le code javascript qui créé deux fois la même icone. Avec markers=local/chils/recursive ça ne change pas grand-chose : de toute manière la carte détecte le doublon et ne fait rien, mais en KML ou GeoJSON ça peut alléger le fichier.

      Effectivement, GMap créé deux icones pour chaque marqueur : une icone à l’état normal, et une icone à l’état sélectionné. C’est utile si on veut matérialiser des marqueurs actifs sur la carte (par exemple sur http://www.loceanique.org/spip/article36.html, les marqueurs se sélectionnent quand on survole les photos). Il faudrait que je fasse un paramétrage pour ça car ce n’est peut-être pas un besoin très courant.
      Pour info, ce sont les fonctions javascript gmap_bounceMarker et gmap_bounceMarkers qui permettent de sélectionner un marqueur spécifique ou les marqueurs d’un objet.

    • Grande !

    Répondre à ce message

  • 4
    Christophe

    Bonjour

    Ce plugin me semble très prometteur. Malheureusement, si l’installation semble se dérouler sans encombre, les choses se gâtent lorsque j’en viens à la configuration.

    Je me retrouve avec une erreur SQL 1146

    Table ’monsite_gmap_types’ doesn’t exist

    SELECT spip_gmap_types.id_type_point AS id, spip_gmap_types.objet AS objet, spip_gmap_types.nom AS nom, spip_gmap_types.descriptif AS descriptif, spip_gmap_types.visible AS visible, spip_gmap_types.priorite AS priorite, count(spip_gmap_points.id_point) AS nb_points FROM spip_gmap_types LEFT JOIN spip_gmap_points ON spip_gmap_types.id_type_point = spip_gmap_points.id_type_point GROUP BY spip_gmap_types.id_type_point ORDER BY spip_gmap_types.id_type_point

    Je suis totalement démuni. Auriez-vous une piste pour me sortir de là ?
    Merci d’avance.

    • Bon, j’ai reproduis une erreur a peu près similaire dans le cas où le préfixe des tables n’est pas « spip_ » : dans le cas les fonctions de SPIP traduisent toutes les requêtes qui sont passées pour transformer les « spip_ » en « monsite_ » (par exemple), or il semble que l’expression « count(spip_gmap_points.id_point) » ne soit pas traduite.
      Je vais voir comment gérer ça.

    • Voilà, j’ai modifié le fichier en cause et l’ai remis sur la zone en révision 53703. Je n’ai pas fait évolué le numéro de version du plugin. Pour vérifier que vous avez la bonne révision, regardez le fichier svn.revision à la racine du plugin.
      Le zip devrait être à jour dans quelques heures.

      Ceci dit, il faut que je regarde ce que spip supporte dans le « renommage » des tables des requêtes SQL et que je vérifie toutes les requêtes du plugin pour voir s’il n’y a pas d’autres problèmes du genre.

    • Il y a un autre problème similaire sur un autre fichier, qui devait provoquer une erreur lors de la géolocalisation des articles et des documents, toujours dans le cas où les tables ne sont pas préfixées ’spip_’.

      Je ne peux pas commiter ce soir les modifications sur SPIP-Zone et donc provoquer la mise à jour du paquet téléchargeable sur cette page. Vous pouvez trouver le zip sur loceanique.org.

      Pour info, le problème vient du fait que :

      • depuis le code de spip ou d’un plugin on déclare toujours les tables avec un préfixe ’spip_’, le moteur de spip cache se paramétrage et transpose les noms de tables avant d’exécuter les requêtes ;
      • comme c’est actuellement fait, les noms de tables qui sont précédés d’autre chose qu’une virgule ou un espace ne sont pas transposés ;
      • dans GMap j’avais deux requêtes dans lesquelles un nom de table était précédé d’une parenthèse ouvrante.
    • Ça y est, le commit sur SPIP Zone est passé, le zip de cette page devrait donc être mis à jour, révision 53708.

    Répondre à ce message

  • 2

    Bonjour,

    Merci pour cette contribution très intéressante,

    j’ai un souci avec une rubrique (87) et 2 articles publiées dans cette rubrique correspondants à 2 étapes sur la carte.
    J’ai installé le plugin, j’ai pu en partie privée paramétrer les infos de géolocalisation pour la rubrique et les 2 articles en partie privée, et j’ai mis ensuite dans la rubrique, le code suivant : <map|id_rubrique=87|markers=recursive>

    Lorsque j’essaie d’aller dans la partie privée ou dans la partie publique sur cette rubrique, j’ai une page HTML blanche

    est ce un bug ou une erreur dans l’écriture de mon instruction « map » ?

    Merci par avance de votre aide

    cdlt,

    Philippe

    • Il manque le code dans le message, mais j’ai tout de même trouvé un problème...

      Pour insérer une carte dans une rubriques, et y ajouter les points correspondants aux articles de la rubrique, on peut mettre :

      <map|id_rubrique=1|markers=query>

      ... le plugin fait alors une requête asynchrone pour récupérer les points (et il y a le logo utilisé partout pour les requêtes ajax).
      ou

      <map|id_rubrique=1|markers=childs>

      Auquel cas les points sont directement pris directement lors de la construction de la page côté serveur.

      Il y avait un bug idiot sur cette deuxième méthode que je n’avais pas testée depuis longtemps. Comme c’est une erreur PHP, ça peut très bien mener à une page blanche...
      C’est corrigé sur la zone, le zip devrait être à jour dans peu de temps (révision 53645).

      Merci d’avoir signalé le bug,
      Fabrice

    • Bonjour,

      Merci, ça marche avec query,
      le code que j’avais mis était :

      map|id_rubrique=87|markers=recursive

      cordialement,

      Philippe

    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