begin process at 2012 02 15 04:16:54
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Javascript / DHTML

 > API GOOGLE MAPS!

API GOOGLE MAPS!


 Information sur le tutoriel

Note :
Aucune note

 Description

Comment mettre en place l'API GOOGLE MAPS?
À la base l'API que google propose est réalisée en JScript; donc pas interessant pour nous autres developpeurs en PHP purs et durs (^^).
Heureusement de plus en plus de classes PHP ont vusle jour pour générer le JScript de l'API GOOGLE; analysons en une:  N/X API to Google Maps

Tutorial

Préambule

Pour la classe N/X API, vous pouvez soit la télécharger ici (inscription nécessaire) soit la trouver dans le ZIP.

Note : le script original n’est pas W3C valid donc je me suis permis d’optimiser la class originale (cf fin du tutorial).

Une fois installée dans le répertoire d’exécution (ou dans n’importe quel autre sur votre serveur), nous allons nous intéresser de près à la génération du JS.

Avant toute chose il vous faut une clef (API KEY) gracieusement fournie par Google à cette adresse. Pour ce faire vous devez possédez un compte google, accepter (aveuglement ^^) la charte et indiquer le site sur lequel vous désirez installer votre API. (Si votre script est installé dans une sous répertoire n’oubliez pas de l’indiquer !). Cette clef est une sorte de HASH à la mode Google du dossier de votre site donc si vous voulez changer de place votre page PHP qui génère la MAP faite les maintenant, ou alors il vous faudra redemander une clé valide à Google.

Créons un fichier PHP basique :

Ouvrer une de vos pages modèles si vous en avez et définissons :

<?php

define(GoogleMapsKey, '<GoogleAPIKey>');
require "nxgooglemapsapi.php"; // Include de la classe
$api = new NXGoogleMapsAPI(); // instanciation de la classe
$api -> setHeight(600); // hauteur de la map
$api -> setWidth(800); // largeur de la map
$onLoad = $api->getOnLoadCode();
$contenuMAP = $api-> getBodyCode ();

?>



<html>
<head>
<?php echo $api->getHeadCode(); ?>
</head>
<body onLoad="<?php echo $onLoad;?>">
<?php echo $contenuMAP; ?>
</body>
</html>

Et voilà, ce n’était pas si compliqué ^^


Quelques fonctions encore intéressantes :


$api->addControl(GLargeMapControl); Boutons de contrôle


$api->addControl(GMapTypeControl); // Menus de choix de type de carte (map, satellite, mixte)


$api->setZoomFactor(16); // Définition du zoom d’affichage initial


$api->addControl(GOverviewMapControl); // Petite carte en bas à droite


$api->addAddress("adresse, pays", "Texte de la bulle (TXT/HTML)", (true/false)); // Créer une bulle par rapport à une adresse ; la troisième valeur définit si la bulle doit représenter le centre de la carte. (Si plusieurs true, le dernier fait foi)

$api-> setCenter ((int) $long, (int) $lat)) // Positionne la carte p/r aux coordonnées


Finalement quelques améliorations du script (W3C valid) :

Ligne 202 : remplacer par :

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;key='.$this->apiKey.'" type="text/javascript"></script>';

Le probleme est que les symboles ET (“&”) ne sont pas valides donc on les remplaces par “&amp;”

Ligne 104 : remplacer par :

$ar = array(addSlashes($address), str_replace("</","<\/",addSlashes($htmlinfo)), $setCenter);

Comme l’indique la doc du W3C (ici) , il faut utiliser une barre oblique inverse pour empêcher que la chaîne soit interprétée comme du balisage JS.

 Historique

16 août 2008 20:58:34 :
Erreur de lien

Commentaires

Commentaire de christophe_be2 le 29/08/2008 10:20:41

Salut GillesWebmaster,

Je viens de tomber sur le tutoriel "API GOOGLE MAPS!" qui me semble plus qu'intéressant et en plus valide W3C.
Tu dis : "Pour la classe N/X API, vous pouvez soit la télécharger ici (inscription nécessaire) soit la trouver dans le ZIP".
Peux tu me dire où je peux trouver le zip car je ne le vois pas sur la page.

Bonne journée et merci pour ce tutoriel.

Christophe_be2

Commentaire de GillesWebmaster le 29/08/2008 17:08:12

Oui désolé voici l'URL:
http://www.phpcs.com/codes/API-GOOGLE-MAPS-DEPUIS-PHP-VALID-W3C_47802.aspx
@++

Commentaire de GillesWebmaster le 29/08/2008 17:28:14

S'il te plait ce tutoriel, tu peux le noter! :)

Commentaire de PCPT le 30/08/2008 22:14:04 administrateur CS

quelques refontes, la notation des tutos est inactive pour le moment

Commentaire de christophe_be2 le 31/08/2008 17:17:59

Je mettrai la note mais ça fonctionne toujours pas donc ... je la mettrai quand ce sera à nouveau possible ...

Par contre, quand j'essaie d'ajouter plusieurs adresses (plus de 10), j'ai une "alert" comme quoi il ne trouve pas certaines de ces adresses. Aurais-tu une idée sur comment résoudre ce problème?

Une autre petite chose, sais tu si il est possible, comme sur le site Googlemaps, d'avoir dans l'info bulle, un lien qui permettrait de calculer son itinéraire à partir et vers ce lieux?

Merci d'avance.

Commentaire de GillesWebmaster le 31/08/2008 17:20:40

itch alors pour les dix adresses je vais voir...
pour le calcul d'itinéraires, google se réserve cette fonctionnalité, dsl pas accessible en JS/PHP!

Commentaire de christophe_be2 le 15/09/2008 09:52:35

Voilà qui est fait (pour la note).

As tu eu le temps de regarder au problème des + de 10 adresses? Pour ce qui est du calcul d'itinéraire, j'ai un peu regardé, et maintenant Google permet cette fonctionnalité, ..., je regarderai ça de plus près bientôt.

Commentaire de dunbar le 17/09/2008 17:16:58

Bonjour,
Merci pour le tuto qui est trés bien fait, mais il me reste une question comment es t'il possible de faire en sorte que le marker soit de couleur differente suivant un critere precis ??
D'avance merci

Commentaire de GillesWebmaster le 17/09/2008 18:25:49

Bonjour alors je vais regarder ces petites question et je vous redis...

Commentaire de dunbar le 17/09/2008 18:55:49

Merci

Commentaire de dunbar le 19/09/2008 11:59:20

Aucune idée ?

Commentaire de GillesWebmaster le 20/09/2008 16:06:05

Bonjour à tous!
Malheureusement je ne reviens pas avec de bonnes nouvelles; En effet l'erreur de la "Location not found" est, à mon sens, imputable au JS! Existerai-t-il une limite d'élément dans un tableau en JS? (var addresses = new Array(...) )
Concernant la couleur, dsl je sais que c'est faisable en JScript! Si tu me donne le code JS, je te l'implémenterai dans la class PHP!

Commentaire de bobatheboss le 30/09/2008 23:46:28

Merci pour ce tuto et les liens qui vont bien avec.

Commentaire de GillesWebmaster le 01/10/2008 19:13:46

Pas de soucis...
Par contre je ne vois toujours pas de note!

Commentaire de Scratyx le 09/10/2008 14:11:10

Pour ce qui est de l'erreur de location...

Après avoir utilisé les divers API Google Map, il s'avèrerait que la recherche de plus de 10 (une dizaine d'adresse en fait) pose problème au Géocoder de Google (ce n'est pas un problème de Javascript). En effet le Géocoder à besoin de temps pour s'exécuter; et s'il reçoit trop d'adresses d'un coup, ça plante.

A mon avis, le mieux serait de placer vos points grâce à leur Latitude et Longitude, donc s'en passer par le Géocoder.

La solution que j'ai déployée sur divers sites est de passer votre "point de recherche" au géocoder, d'obtenir les points, de les stocker en base de donnée et ensuite pouvoir faire votre recherche google map avec les points. Et je vous garanti que pour plus de 10 point ça fonctionnera.

Commentaire de GillesWebmaster le 09/10/2008 17:29:57

bonne idée!

Commentaire de christophe_be2 le 15/10/2008 01:23:13

Oups, la note n'a pas été prise en compte. La voici donc ...

Commentaire de GillesWebmaster le 15/10/2008 12:50:15

je ne la vois pas?!

Commentaire de momo1972 le 28/11/2008 07:33:03

Bonjour Gilleswebmaster,
Merci pour ce tuto qui m'a permit de mieux comprendre les choses. Pour ma part, je lui donnerait une note de 7,5/10.
Je rencontre le meme pb que vous alors que j'aurais besoin d'afficher une centaine de d'adresses. Il me faut donc toutes les geocoder en un bloc avant de les afficherpar leur geopoints.
Je voudrais transformer un tableau contenant plusieurs adresses en un tableau contenant les geocoordonnées correspondants. Par exemple, j'ai le tableau addresses qui est de la forme suivante var addresses = new Array( new Array("Moscou, Russia", "La place rouge ou le Kremlin <br>Chez Poutine ", true), new Array("Santiago Chili", " Palais del revolutione <br>Tel 23450987765 ", true)) et je voudrais obtenir le tableau geopoints de la forme suivante var geopoints = new Array( new Array(23,54, "La place rouge ou le Kremlin <br>Chez Poutine ", true), new Array(21,9, " Palais del revolutione <br>Tel 23450987765 <br>", true)) et je n'arrive pas à mettre en place un code javascript qui me fait le travail.
Voici ce que j'avais pensé faire:
function conversion(){
var geopoints = new array;
for (i=0; i< addresses.length;i++){
if (geocoder){
                                  geocoder.getLatLng(addressses[i][0],function(point) {
if (!point){
alert("Location not found:" + adressesi0);
}else {

marker= new GMarker(center);
var tpoint= marker.getPoint();
                                                                                                 geopoints[i][0]=tpoint.lat();
                                                                                                 geopoints[i][1]=tpoint.lng();
                                                                                                 geopoints[i][2]=addresses[i][1];
                                                                                                 geopoints[i][3]=addresses[i][2];
}

} )
}
}
return geopoints;
}

puis ensuite appeler la fonction conversion:@@ var geopoints = conversion();

@@
, puis ensuite appliquer la fonction showGeopoints(), mais aucun points ne s'affiche, il n'y a que le map. J'ai vraiment besoin de votre soutient car je dois livrer le client très bientot.Merci d'avance.

Commentaire de fabvincent le 01/12/2008 16:45:09

Bonjour,
je suis le tuto depuis un petit moment et ca marche bien sauf que cela me fait crasher safari systematiquement a caus e du code php dans le head du html?
des suggestions?

Commentaire de giloubidou le 09/12/2008 17:11:09

Hello,
je crois savoir qu'il faut une API Key, généré par l'inscription du nom de domaine/site qui utilise google maps.

Commentaire de stooff le 12/02/2009 22:55:13

Bonjour,

Juste un petit commentaire pour noter et féliciter le concepteur de ce script : 8/10.
S'intègre facilement et réagit correctement quand tous les champs nécessaires sont renseignés.

Je relance le débat concernant la limitation du nombres d'adresses à importer environ une quinzaines(qui vient bien de google, je rereconfirme) alors que j'ai 93 adresses à importer, en augmentation (géolocalisation de clients simplifiant la gestion de ma zone de chalandise).
Je n'ai pas réussi à implémenter correctement un script de génération des points de géolocalisation.

momo1972 : j'ai adapté ton script mais sans grand succès comme à ton instar.
Quelqu'un aurait-il trouvé une piste ou créé un script pour ce faire.

Commentaire de stooff le 12/02/2009 22:59:45

Toujours pas de note on dirait, hummm...

dsl GillesWebmaster, ct pourtant de bon coeur ;)

Commentaire de GillesWebmaster le 07/07/2009 11:47:08

Bonjour tout le monde,
Personnellement, je pense que c'est google qui limite volontairement l'affichage d'un certain nombre d'adresses.
(tout comme l'affichage d'itinéraires, p-exemple)...
Oui effectivement, le système de notation ne fonctionne pas... :(

Commentaire de begueradj le 23/02/2010 08:33:05

merci pour ce tuto

Commentaire de GREGGRAPH le 14/03/2010 09:02:32

Bonjour, je viens de trouver ton tuto,

j'ai un site avec une carte google différente dans chaque page.
Est il possible de définir le lat long dans  la partie <?php echo $contenuMAP; ?>
qui se trouve dans le body en incluant dedans la variable $api-> setCenter ((int) $long, (int) $lat))
afin de ne pas avoir à copier coller le code php définissant les paramètres. Car tout les prams sont identique excepté les coordonnées.

Je suis pas un codeur fou, donc une explication simple serait bienvenue ;)

Commentaire de meskale le 14/04/2010 12:30:52

Merci pour ce Tuto , décidement google facilite pas le boulot coté W3c.
Tuto Sympa , mais j'aurais voulu evité sa pour une carte valide W3c directement fourni pas google...

Commentaire de drweb001 le 11/05/2010 22:44:25

Bonjour à tous,

je m'en remet à vous après beaucoup de recherche concernant api google.

Je cherche a trouver un moyen de connaitre la distance ( entre une adresse a et b ).
J'arrive à le faire avec api google mais seulement en javascript ce qui ne me permet pas de le stocker dans une variable php ?

Qqun peux il m'éclairer ou m'aider ?

Commentaire de toufouk le 23/08/2010 15:54:20

Bonjour,
Voila j'essai depuis un moment d'inserer une carte google maps sous mon site en vain :-(
Je vous explique et peut être que quelq'un pourra m'aider..
J'ai plusieurs photos dans un dossier pour lesquelles je récuperére les données Exifs et notamment la longitude et la latitude.
Comme indiqué sur le tuto, j'ai ma google maps Key et mon souhait est d'inserer une carte google maps avec un marqueur (en fonction de la latitude et longitude récupéré). Quelqu'un pour m'aider ?

Merci pour votre aide.

Commentaire de elehoux le 01/10/2010 03:11:33

voici un code qui marche sans key:

<!doctype html public "-//w3c//dtd html 4.0 transitional//en">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
<title>google maps marker addresses</title>

<script src="http://maps.google.com/maps?file=api&v=2&key=" type="text/javascript"></script>

<script type="text/javascript">
//<![CDATA[
function load() {
if (GBrowserIsCompatible()) {

var txt = "<table class=\"bullemap\"><tr><td><\/td><td class=\"dlb\">Titre<\/td><\/tr><tr><td class=\"lb\">Ville :<\/td><td>ville<\/td><\/tr><tr><td class=\"lb\">R&eacute;gion : <\/td><td>nomRegion (codeRegion)<\/td><\/tr><tr><td class=\"lb\">Pays : <\/td><td>nomPays (codePays)<\/td><\/tr><tr><td class=\"lb\">Pertinence : <\/td><td>pertinente<\/td><\/tr><\/table>";

var map = new GMap2(document.getElementById("map")); //définie l'élément du DOM pour afficher la carte
var point = new GLatLng(45.2167015076, 0.566699981689); //définie un point (latitude, longitude)
map.setCenter(point, 7); //centrage de la carte sur ce point avec zoom initial
var marker = new GMarker(point); //création d'un marquer à cet emplacement
map.addOverlay(marker); //ajout du marqueur sur la carte
GEvent.addListener(marker, "mouseover", function(){marker.openInfoWindowHtml(txt);});
marker.openInfoWindowHtml(txt); //ouverture de la bulle d'infos sur le marqueur
map.addControl(new GLargeMapControl()); //boutons de contrôle API google maps
map.addControl(new GMapTypeControl()); //menu choix de type de carte (map, satellite, mixte)

//test avec un autre marqueur
var point2 = new GLatLng(44.2167015076, 0.566699981689);
var marker2 = new GMarker(point2);
GEvent.addListener(marker2, "mouseover", function(){marker2.openInfoWindowHtml(txt);});
map.addOverlay(marker2);
}
}
//]]>
</script>
<style type="text/css">
a {color:#000000}
a:hover {color:#990000}
table.bullemap{
background-color: #fff;
color: #0;
font:12px arial, verdana, helvetica, sans-serif;
line-height: 14px;
border:none;
overflow:hidden;
}
table.bullemap td.lb{color:#BBB; font-size:10px}
table.bullemap td.dlb{font-weight:bold}
#map {width:800px;height:600px}
</style>
</head>      
<body onload="load()" onunload="GUnload()">
<div id="map"></div>
</body>
</html>

Commentaire de elehoux le 01/10/2010 03:21:02

Voici venue une petite classe de géo-localisation par (ASP3) que j'ai développé de concert avec mon appli Google Maps postée précédemment:

<%
'########################################################################################
' classGeolocaliseIP : classe de récupération d'informations de Geo-localisation par IP
'########################################################################################
class classGeolocaliseIP
'DÉFINITIONS DES VARIABLES
'variables des objets du document XMLDOM accessibles dans la Class
Private objXMLHTTP, objXMLDoc, objXMLRoot
Private url_ipinfodb_Server, url_ipinfodb_BackupServer, url_utrace_Server, utraceMaxQueries, utraceHitsQueries
'variables des informations à récupérer
Private sIP, sCountryCode, sCountryName, sRegionCode, sRegionName, sCity, sLatitude, sLongitude

'---------------------------------------------------------------------------------------------------
' Constructeur : initialisation de la Class (événement appelé lorsque l'instance est créée)
'---------------------------------------------------------------------------------------------------
Private sub Class_Initialize
'instanciation des objets
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
Set objXMLDoc = Server.CreateObject( "MSXML2.DOMDocument.3.0" )

'utrace: précis mais limité à 100 requêtes/jour
'cf. http://en.utrace.de/api.php - http://en.utrace.de/
url_utrace_Server = "http://xml.utrace.de/?query="
utraceMaxQueries = 100

'ipinfodb: un peu moins précis, plus riche d'infos et pas de limite spécifique quotidienne,
'mais pas plus de 2 requêtes/seconde sinon sera mis en "file d'attente"
'cf. http://ipinfodb.com/
url_ipinfodb_Server = "http://ipinfodb.com/ip_query.php?ip="
url_ipinfodb_BackupServer = "http://backup.ipinfodb.com/ip_query.php?ip="

End sub

'---------------------------------------------------------------------------------------------------
' Destructeur : résiliation de la Class (événement appelé lorsque l'instance est détruite)
'---------------------------------------------------------------------------------------------------
Private Sub Class_Terminate()
'libère tous les objets
Set objXMLRoot = Nothing
Set objXMLDoc = Nothing
Set objXMLHTTP = nothing
End Sub

Public Function loadInfosIP(strIP)

'IP à géolocaliser
sIP = strIP

'raz de la variable de récupération du nombre de requêtes envoyé au server de utrace
utraceHitsQueries = 0

'raz des variables des informations récupérées
sCountryCode = "": sCountryName = "": sRegionCode = "": sRegionName = "": sCity = ""
sLatitude = "": sLongitude = ""

'retourne par défaut que les informations n'ont pu être récupérées
loadInfosIP = False

'ne pas interrompre si erreur
on error resume next

'## on commence par récupérer les infos issues du server de http://ipinfodb.com ##
'interroge le server principal de ipinfodb
objXMLHTTP.Open "GET", url_ipinfodb_Server & sIP, False
objXMLHTTP.Send

'si pas de réponse HTTP 200 du serveur principal, alors interroge le serveur de sauvegarde de ipinfodb
if objXMLHTTP.Status <> 200 then
objXMLHTTP.Open "GET", url_ipinfodb_BackupServer & sIP, False
objXMLHTTP.Send
end if

'si réponse HTTP 200 du serveur principal ou du serveur de sauvegarde
if objXMLHTTP.Status = 200 then
'lire et analyser la réponse XML
objXMLDoc.loadXML(objXMLHTTP.responseXML.xml)
's'il n'y a pas d'erreur d'analyse lors de la lecture de la réponse XML
if objXMLDoc.parseError.errorcode = 0 then
'récupération des informations retournées par ipinfodb
sCountryCode = objXMLDoc.documentElement.selectSingleNode("CountryCode").text
sCountryName = objXMLDoc.documentElement.selectSingleNode("CountryName").text
sRegionCode = objXMLDoc.documentElement.selectSingleNode("RegionCode").text
sRegionName = objXMLDoc.documentElement.selectSingleNode("RegionName").text
sCity = objXMLDoc.documentElement.selectSingleNode("City").text
sLatitude = objXMLDoc.documentElement.selectSingleNode("Latitude").text
sLongitude = objXMLDoc.documentElement.selectSingleNode("Longitude").text
'retourne que les informations ont pu être récupérées
loadInfosIP = True
end if
end if

'## ensuite, on récupére les infos issues du server de http://en.utrace.de ##
'interroge le server de utrace pour récupérer des informations plus pertinentes
objXMLHTTP.Open "GET", url_utrace_Server & sIP, False
objXMLHTTP.Send
'la réponse du server de utrace est sous forme d'une chaîne de texte dont la structure est du XML
'que l'on charge dans l'objet document XMLDOM
'response_Text = objXMLHTTP.responseText
objXMLDoc.loadXML(objXMLHTTP.responseText)

's'il n'y a pas d'erreur d'analyse lors de la lecture de la réponse XML
if objXMLDoc.parseError.errorcode = 0 then
'définie objXMLRoot "result" comme le n½ud-racine par défaut au lieu du n½ud-racine "results"
Set objXMLRoot = objXMLDoc.getElementsByTagName("result")(0)
'récupération des informations plus pertinentes retournées par utrace
sCountryCode = objXMLRoot.selectSingleNode("countrycode").text
sCity = objXMLRoot.selectSingleNode("region").text
sLatitude = objXMLRoot.selectSingleNode("latitude").text
sLongitude = objXMLRoot.selectSingleNode("longitude").text
utraceHitsQueries = Cint(objXMLRoot.selectSingleNode("queries").text)
end if

End Function

'---------------------------------------------------------------------------
' les propriétés suivantes permettent d'obtenir les informations séparément
'---------------------------------------------------------------------------
Public Property Get codePays
codePays = sCountryCode
End Property

Public Property Get nomPays
nomPays = sCountryName
End Property

Public Property Get codeRegion
codeRegion = sRegionCode
End Property

Public Property Get nomRegion
nomRegion = sRegionName
End Property

Public Property Get ville
ville = sCity
End Property

Public Property Get latitude
latitude = sLatitude
End Property

Public Property Get longitude
longitude = sLongitude
End Property

Public Property Get pertinente
'si le nombre de requêtes envoyé au server de utrace est > 0 et < 100
if utraceHitsQueries<>0 then pertinente = True else pertinente = False
End Property

End class

'------------------ EXEMPLE D'APPLICATION -----------------------------
Dim objGeolocaliseIP
Set objGeolocaliseIP = new classGeolocaliseIP

if objGeolocaliseIP.loadInfosIP(Request.ServerVariables("REMOTE_ADDR")) then
Response.Write "<br/>code pays: "& objGeolocaliseIP.codePays
Response.Write "<br/>nom pays: "& objGeolocaliseIP.nomPays
Response.Write "<br/>code region: "& objGeolocaliseIP.codeRegion
Response.Write "<br/>nom region: "& objGeolocaliseIP.nomRegion
Response.Write "<br/>ville: "& objGeolocaliseIP.ville
Response.Write "<br/>latitude: "& objGeolocaliseIP.latitude
Response.Write "<br/>longitude: "& objGeolocaliseIP.longitude
Response.Write "<br/>pertinente: "& objGeolocaliseIP.pertinente

else
Response.Write "<br/>pas d'informations"
end if
%>

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,281 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales