Carnet Wiki

GISV2

Article obsolète gardé ici pour arhive

GIS2 utilise la librairie Mapstraction ce qui lui permet de fonctionner directement avec les providers suivants : openlayers, googlev2, googlev3, microsoft bing, yahoo, mapquest etc

Avant tout :

GIS

  • ok mettre à jour les tables du plugin sur un couple type/id_objet pour permettre de localiser n’importe quel type d’objet
  • ok recoder le bloc GIS des pages exec=articles, exec=mots_edit etc : un fond html dans gis/prive/ et insertion par le pipeline affiche_milieu (voir plugin a2a)
  • ok utiliser le formulaire CVT editer_gis dans les pages du privé
  • ok toujours insérer le formulaire au même endroit (pas une fois dans la colonne centrale et un autre dans la navigation)
  • ok utiliser un squelette JSON au lieu du Geo RSS pour les cartes. On garde le flux GeoRSS uniquement pour le proposer en syndication.
  • clustering de marqueurs en option ou en sous-plugin
  • ok faire le ménage dans les scripts du plugin...
  • ok renommer les fonctions de façon plus homogène (il y a un mélange d’espagnol/français/anglais dans le code)
  • ok mettre en place un filtre pour calculer la distance entre deux points : http://snipplr.com/view/2531/calculate-the-distance-between-two-coordinates-latitude-longitude/
  • ok faire un critère pour trier des points par distance (?)

Geomap

  • le plugin geomap est obsolète avec GIS2 Utiliser l’API V3 qui ne nécessite plus de clé.

OpenLayers

Toutes les fonctionnalités de GIS n’étaient pas compatibles avec OpenLayers. J’ai commencé à jouer avec celui-ci dernièrement et corrigé quelques bugs.

http://zone.spip.org/trac/spip-zone/log/_plugins_/open_layers

D’autres personnes semblent être intéressées par le sujet...

  • affichage des couches geoportail

Si cela peut aider, le plugin SPIP-Geoportail intègre quelques fonctionnalités décrite ci-dessus.
En particulier :

  • la gestion objet/id_objet qui permet de géoréférencer tout type d’objet SPIP + un critère de jointure pour accéder rapidement aux coord.
  • utilisation du pipeline affiche_milieu
  • la possibilité de référencer les visiteurs (formulaire dans l’espace publique)
  • l’ajout de couches WMS
  • la possibilité de lire directement les documents géolocalisés : tags des images, coords dans les fichiers kml ou gpx (voir API mise en place dans le plugin inc/geoupload.php)
  • dans l’utilisation d’un référentiel géographique il y a des billes pour faire des recherches autour d’un point (critère de distance) puisque c’est comme cela qu’il fait le lien avec le référentiel (géocodage inverse : voir ici). On pourrait développer sur le même modèle la recherche d’articles autour d’un point.
  • intégration avec les API : renvoyer l’info de chargement de la carte dans une fonction (initSpipMap) pour pouvoir développer facilement des fonctionnalités autour de l’API et ajouter des comportements aux cartes.
  • ...

NB : l’API Géoportail est basée sur OpenLayers (ce qui peut aider).

Retours et remarques sur la beta

La version de dev du plugin est disponible par svn ici :

http://zone.spip.org/trac/spip-zone/browser/_plugins_/gis/trunk

Vous pouvez la tester à vos risques et périls ;)

Indiquez vos retours et observations ci-dessous :

Benfer : le 6 juillet 2011

+ demander à b_b quel est le probleme du bug mapstraction

GIS 2 ( mapstraction )

Installation sous SPIP 2.1.10

Sur la zone : _plugins_/GIS/trunk/

Ajouter les plugins médiathèque et afficher objets ( afficher objets est incu par défaut dans la 2.3-dev.

Le gestionnaire demande l’ajout d’un paquet h2fe2d58a-mxn-2.0.16
lib/, apparemment mapstraction, il suffit de cliquer sur le bouton pour confirmer l’ajout du paquet.

Fatal error : Maximum execution time of 30 seconds exceeded in /home/users4/a/atravers/www/PCPI/ecrire/inc/flock.php on line 383

Finalement c’est installé.

Essai de récupérer mon contenu depuis GIS 1 : ni mon KML ni mon marker perso ne s’affichent, mais je suis sous OpenLayers, je dois d’abord essayer GoogleMap.

Avec Google v3 ça ne marche pas non plus, alors je vais essayer de retourner à la v2, comme avant, mais pour cela je dois récupérer mon ancienne clé Google, créée pour ce site.

Cela ne semble plus révéler des erreurs par défaut à partir de GIS 1. Je peux commencer à reformuler mes squelettes pour GIS 2.

Les parametres sont documentes dans le code. Je vais les reformuler ici :

Voici une copie de la doc telle que présentée dans le squelette carte_gis.html

Modele carte_gis

Parametres :

  • id_carte_gis = 1 id de la carte
  • lat = 48.3 latitude du centre de la carte
  • lon = -4.7 longitude du centre de la carte
  • zoom = 5 zoom de la carte
  • width = 100% largeur de la carte, 100% par defaut
  • height = 400px hauteur de la carte, 400px par defaut
  • style = non ne pas styler la carte
  • zoom_molette = non désactiver le zoom avec la molette de la souris, actif par defaut
  • type = carte type de la carte : carte, satellite, relief ou hybride
  • control_zoom = large type de controles pour le zoom : large, small
  • control_pan = non ne pas afficher les controles de déplacement dans la carte
  • control_type = non ne pas afficher les controles de changement de type
  • no_control = oui ne pas afficher les controles de la carte
  • overview = oui afficher un mini carte de situation
  • scale = oui afficher l’échelle de la carte
  • limit = 500 nombre max de marqueurs à afficher, 500 par defaut
  • objets = gis type d’objets à afficher (fichier json/gis_xx qui génère la source de donnees)
  • autocenterandzoom = oui centrer et zoomer la carte automatiquement pour afficher tous les marqueurs
  • kml = 12 kml à superposer à la carte (id_document ou url)
  • localiser_visiteur = oui centrer la carte sur la position du visiteur (API geolocation HTML5)

]

Pour modifier l’emplacement d’un marqueur dans l’interface privée, cliquez à l’endroit souhaité sur la carte.

On peut passer par le modèle pour appeler un kml en superposition de la carte, ce qui oblige à créer un squelette personnalisé pour chacun des articles qui utilisent ce type de fichier.

Pour ajouter un KML en superposition de la carte, la meilleure méthode est de créer une boucle document pour l’inclure au modèle.

Notez qu’on ne peut ajouter qu’un seul kml pour une carte. On peut toutefois éditer les kml pour transformer plusieurs kml en un seul en respectant la syntaxe spécifique ( une variante de xml ).

Ah ! en passant à OpenLayers, mon KML ne s’affiche plus, et la carte n’est plus en mode satellite ( c’est normal il n’y a pas de mode satellite, il faut rajouter des couches externes pour cela ).

Géolocalisation d’un Événement d’agenda

 !! Intégré dans GIS v2, v3 et v4 !!

Dans le cadre du développement d’un site d’actu culturel, il est apparu le besoin de géolocaliser les évements plutôt que les articles. Voici comment procéder.

Ajouter dans mes_option.php ce genre de code : (le nom localise_evenement est un exemple)

    $spip_pipeline['affiche_milieu'] .= "|localise_evenement";  
    function localise_evenement($flux){
            if ($flux['args']['exec']=='evenements_edit'){
                    $objet = 'evenement';
                    $id_objet = $flux['args']['id_evenement'];
                    if ($objet && $id_objet) {
                            if (1) {
                                    $contexte['objet'] = $objet;
                                    $contexte['id_objet'] = $id_objet;
                                    $flux['data'] .= "<div id='pave_gis'>";
                                    $bouton = bouton_block_depliable(_T('gis:cfg_titre_gis'), false, "pave_gis_depliable");
                                    $flux['data'] .= debut_cadre_enfonce(find_in_path('images/gis-24.png'), true, "", $bouton);
                                    $flux['data'] .= recuperer_fond('prive/contenu/gis_objet', $contexte);
                                    $flux['data'] .= fin_cadre_enfonce(true);
                                    $flux['data'] .= "</div>";
                            }
                    }
            }
            return $flux;
    }

Puis dans le répertoire du plugin gis2/json le fichier gis_evenements.html que voici :

		<BOUCLE_eve(EVENEMENTS){gis}{id_evenement ?}{id_article ?}{id_rubrique ?}{id_secteur ?}{id_mot ?}{id_auteur ?}{recherche ?}{0, #ENV{limit}}{","}>
		{"type": "Feature",
		"geometry": {"type": "Point", "coordinates": [#LON, #LAT]},
		"id":"#ID_GIS",
		"title":[(#TITRE_GIS*|sinon{#TITRE*}|supprimer_numero|json_encode)],
		"description":[(#DESCRIPTIF_GIS|sinon{#DESCRIPTIF}|json_encode)][(#SET{logo_doc,''})]
		[(#LOGO_GIS|oui)
		[(#SET{logo_doc,#LOGO_GIS|image_passe_partout{32,32}|image_recadre{32,32}})]]
		[(#LOGO_GIS|non)
		[(#CHEMIN{images/marker_defaut.png}|oui)
			[(#SET{logo_doc,#CHEMIN{images/marker_defaut.png}|image_passe_partout{32,32}|image_recadre{32,32}})]
		]]
		[(#GET{logo_doc}|oui)
		#SET{icon_w,#GET{logo_doc}|extraire_attribut{src}|largeur}
		#SET{icon_h,#GET{logo_doc}|extraire_attribut{src}|hauteur}
		#SET{icon_anchorPoint,''}
		[,"icon": (#GET{logo_doc}|extraire_attribut{src}|url_absolue|json_encode)],
		"icon_size": [(#VAL{91}|chr)]#GET{icon_w},#GET{icon_h}[(#VAL{93}|chr)],
		"icon_anchor": [(#VAL{91}|chr)][(#GET{icon_w}|div{2})],[(#GET{icon_h})][(#VAL{93}|chr)]
		]}</BOUCLE_eve>

Dès lors, vous avez la possibilité d’associer un marqueur à un événement.

b_b - Mise à jour :26 janvier 2018 à 11h05min