Index de l'article

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 :

https://maps.googleapis.com/maps/api/distancematrix/json?origins=49.037463,%202.003490100000022&destinations=49.0449034,%202.0419157999999697

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&amp;destinations=$endCoords&amp;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');
});
});
Liens ou pièces jointes
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/troubleshooting-tools/)Wiki Fabrik sur les troubleshooting tools[Article]0 Ko
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/calculation-element/)Wiki Fabrik sur les champs calc pour débogage[Article]0 Ko
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/php-form-plugin/)Wiki Fabrik sur le plugin PHP pour les formulaires[Article]0 Ko
Accéder à cette adresse URL (http://fabrikar.com/forums/index.php?wiki/filtering-lists-tables/)Filtres de listes[Article officiel Fabrik sur les pré-filtres de listes]0 Ko
Accéder à cette adresse URL (https://api.joomla.org/cms-3/classes/JDatabaseDriver.html)Joomla! API[Documentation Joomla]0 Ko
Accéder à cette adresse URL (https://docs.joomla.org/Selecting_data_using_JDatabase)Selecting data using JDatabase[Documentation Joomla]0 Ko