samedi, décembre 20, 2008

Tracer un chemin avec les fonctions Google de Windev 14

Il est possible de tracer un chemin avec la fonction gglrecupèreCarte. Il faut pour cela utiliser tous les paramètres de la fonction. Quelques difficultés peuvent être rencontrées, voir astuces en bas de cet article.

Il faut déterminer les différents paramètres du trait de la structure gglParamètreCarte. De plus il faut déterminer un marqueur si vous utilisez le zoom automatique (la zone ne fonctionne pas contrairement au message d'erreur affiché dans le cas où aucun marqueur n'est défini)
Ici j'ai utilisé un tableau de structure pour les différents points du tracé. Ce qui a permis d'utiliser les [ ] pour le remplissage du tableau dynamique.
Le POUR TOUT ELEMENT est très pratique pour le parcours du tableau.
Remarquez également l'utilisation de la fonction Ajoute pour ajouter un élément à un tableau. On aurait pu aussi utiliser la fonction TableauAjoute.

Voici le code utilisé lors du clic sur le bouton :

point est une structure
lat est un réel
longi est un réel
FIN

cléGoogle est une chaîne = "VotreClé"
Chemin est un gglParamètreCarte
stUnPoint est un point
sCoord est un gglCoordonnée
tabCoord est un tableau de 0 point
Trajet est un gglChemin
UnMarq est un gglMarqueur

// définition du trait
Chemin.Chemin..Couleur = iRougeFoncé
Chemin.Chemin..Epaisseur = 2
Chemin.Chemin..Opacité = 100

//définition du tableau de point
tabCoord = [[40.7078,-74.0021],[46.7140,-56.3968],[51.0165,-29.5967],[51.1067,-25.1016],
[49.8997,-6.1730],[48.9577,2.1423]]
// définition des points du tracer
POUR TOUT ELEMENT stUnPoint DE tabCoord
sCoord.Latitude = stUnPoint.lat
sCoord.Longitude = stUnPoint.longi
Ajoute(Chemin.Chemin..Point,sCoord)
FIN
Chemin.Format = gglJPG
// quand on met un Zoom auto il faut préciser une Zone ou un marqueur
// mais marche pas avec une zone alors on met un marqueur
//chemin.Zone.Latitude = 40.7078
//chemin.zone.Longitude = -74.0021
// définition du marqueur
UnMarq.Latitude = 40.7078
UnMarq.Longitude = -74.0021
UnMarq.Taille = gglPetit
Ajoute(Chemin.Marqueur,UnMarq)
IMG_Image1=GglRécupèreCarte(cléGoogle,40.7078,3.9483,gglZoomAuto,600,400,gglHybride,Chemin)

CAS ERREUR:
Erreur(ErreurInfo(errComplet))


ASTUCES :
Lorsque Google ne renvoie pas la carte, il n'y a pas de message d'erreur, rien ne se passe. Donc si lors du clic sur le bouton, vous avez tout de suite la main sur l'appli, c'est que vous avez trop de points.

Il faut faire attention au nombre de point du tracé. En effet on est limité à 100 points, sauf que celui-ci diminue si on met des marqueurs. Donc si la carte ne s'affiche pas, c'est que vous dépassez le nombre de points. Dans mes tests en mettant 7 marqueurs, je n'ai pu mettre que 70 points au tracé.

Le cas erreur, c'est la gestion automatique des erreurs, inutile de le saisir directement, vous aurez une erreur. Il faut cliquer sur le lien "Si erreur : par programme" du pcode pour avoir le "cas erreur".


Attention :
Si vous utilisez la syntaxe Chemin.Chemin..Point, vous ne pouvez pas l'utiliser dans la fonction Ajoute, il faudra écrire Chemin.Chemin.point. (signaler au ST)

Vous ne pouvez pas non plus utiliser les [] pour remplir un tableau de structure si vous avez déclaré votre tableau : tab est un tableau dynamique de 0 gglCoordonnées (signaler au ST).
C'est pour ca que dans le code il y a une déclaration d'une structure "Point".

2 commentaires:

Marc a dit…

Sympa comme "bout de code", merci, mais comment obtenir un chemin type "itinéraire" ?
Quel principe car le code par du principe que l'on dispose deja des long/lat. Quel est "le truc" pour avoir un itineraire ?
a+

progwdm a dit…

les fonctions google ne les proposent pas. J'ai fait une suggestion au ST pcsoft.