API Google Map
Lancer la navigation Google Map depuis un formulaire à partir des coordonnées géographiques
Dans un Rendu Fabrik Google Map, on peut déjà, à partir d'un popup d'un point de la carte, lancer la navigation Google Map vers ce point (ou un autre). Ceci grâce à la balise {nav_url}
.
Mais en recréant le lien dynamiquement, on peut lancer la navigation à partir d'un formulaire. D'abord un exemple d'une URL dure, lançant la navigation sur Google Map :
http://maps.google.com/maps?q=loc:49.038684733966846,2.0750216000001274&navigate=yes
Il s'agit donc de créer soi-même ce lien, et dynamiquement, pour insérer les coordonnées des enregistrements.
Mais avant cela il faut nettoyer le champ contenant les coordonnées, car il contient des parenthèses et le zoom par défaut (sous forme (lat,lon):4
). Ce nettoyage est possible en écrivant son propre PHP, mais inutile de se fatiguer, c'est déjà prévu par PHP (ou Joomla/Fabrik, je ne sais pas). Ceci avec la fonction mapStrToCoords
.
Le code suivant, dans un champ Calc va donc créer des boutons lançant la navigation à partir d'un formulaire vers des champs de type Élément Google Map :
// get the simple "lat,long" strings $coords = FabrikString::mapStrToCoords('{MaTable___Champ_GM_Depart}') ; $startCoords= $coords->lat . ',' . $coords->long; $coords = FabrikString::mapStrToCoords('{MaTable___Champ_GM_Destination}') ; $endCoords = $coords->lat . ',' . $coords->long; //build the URL $NavVersDepart = "http://maps.google.com/maps?q=loc:$startCoords&navigate=yes" ; $NavVersDestination = "http://maps.google.com/maps?q=loc:$endCoords&navigate=yes" ; return '<div style="line-height: 30px;"><a style="margin:20px" href='.$NavVersDepart.' target="_blank" >Naviguer vers départ</a><a style="margin:20px" href='.$NavVersDestination.' target="_blank" >Naviguer vers destination</a><br><a href="#">Modifier</a>';
Lancer une recherche Google Map depuis des champs textuels
Autre exemple plus simple, où on souhaite créer un lien vers une recherche GM à partit de 3 champs textuels (add, city et country)
Dans un champ calc, on concatène les champs textuels pour les inclure dans un lien, et on affiche les champs à l'intérieur de ce lien :
$Add = '{table___add}' ; $City = '{table___city}' ; $Country = '{table___country}' ; return '<div style = "" > <a href="https://www.google.com/maps/search/'.$Add.' '.$City.' '.$Country.'" target="_blank"> <div style = "" >'. $Add.' </div> <div style = "" >'. $City.' </div> <div style = "">'. $Country.' </div> </a> </div>' ;
Récupérez la distance routière et le temps de trajet entre 2 points
L'API Google Map permet de récupérer la distance et le temps de trajet routier entre 2 coordonnées géographiques, cela sous forme de lien renvoyant un fichier de type JSON :
Si votre table possède 2 éléments Google Map, vous pouvez les utiliser pour créer dynamiquement ces liens afin de récupérer les valeurs, ou simplement les afficher.
Cela depuis un plugin PHP sur un formulaire, sous cette forme :
// get the simple "lat,long" strings $coords = FabrikString::mapStrToCoords('{booking___start_address_coord}') ; $startCoords= $coords->lat . ',' . $coords->long; $coords = FabrikString::mapStrToCoords('{booking___end_address_coord}') ; $endCoords = $coords->lat . ',' . $coords->long; //build the URL, with API key $distanceURL = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=$startCoords&destinations=$endCoords&key=YOUR_KEY" ; // get the result and decode it $distanceData = file_get_contents($distanceURL); $distanceResult = json_decode($distanceData); $DistanceMeter = $distanceResult->rows[0]->elements[0]->distance->value ; $DistanceTime = $distanceResult->rows[0]->elements[0]->duration->text ; // Calculate kilometers $DistanceKilometer = round($DistanceMeter/1000,1) ; // Set results in dedicated fields if ($distanceResult->status === 'OK') { $formModel->updateFormData('MY_TABLE___distance_m', $DistanceMeter, true); $formModel->updateFormData('MY_TABLE___time_min', $DistanceTime, true); $formModel->updateFormData('MY_TABLE___distance_km', $DistanceKilometer, true); }
L'API nous renvoie la distance en mètres ainsi qu'une chaîne de texte mentionnant les kilomètres. Nous la recalculons ici pour obtenir les kilomètres sous forme numérique, plus pratique pour calculer le prix d'une course d'après un forfait kilométrique par exemple. Vous disposez aussi du temps en minutes et en secondes.
Le dernier paragraphe vient remplir 3 champs dédiés préalablement créés, avec les résultats.
Plus d'info sur l'API Distance MatrixDistance Matrix
API étudiants : AIzaSyBDxMhC_Oj4tXgGifJV77sjFiR3EE89KA4
Ouvrir un popup par défaut
Pour déclencher l'ouverture par défaut du popup d'informations d'un enregistrement, il faut simuler un clic sur l'icône de cet enregistrement. Le code suivant, dans un fichier javascript (.js) situé dans components/com_fabrik/js et nommé viz_ID_DE_VOTRE_CARTE.js, ouvre le popup du 1er enregistrement affiché sur une carte ([0]
). Modifiez le nombre pour atteindre l'enregistrement voulu :
requirejs(['fab/fabrik'], function () { Fabrik.addEvent('fabrik.viz.googlemap.ajax.refresh', function (viz) { google.maps.event.trigger(viz.markers[0], 'click'); }); });