Les routes sont gérées par la liste
Routes de type
TECMapRoutes
TECMapRoutes
Cette liste dispose des méthodes et propriétés
suivantes :
function
Add(const sName:string;const
dStartLatitude,dStartLongitude,dEndLatitude,dEndLongitude:double;
const OptimizeWaypoints:boolean=false;const
WayPoints:TLatLngList=nil):integer;
Ajout d'une route, retourne l'indice de la route
dans la liste
Déclenche l'évènement OnRouteChange en cas de succès sinon
OnRouteError
Name nom de votre route,
peut-être vide
dStartLatitude,dStartLongitude
point de départ de la route
dEndLatitude, dEndLongitude point
d'arrivée de la route
OptimizeWayPoints force le calcul
de la route la plus directe en réorganisant vos
points de passages (n'a aucune action sous
CloudMade)
WayPoints
liste de type
TLatLngList des
points de passages.
Passez nil si vous ne voulez pas indiquer de
points de passage particulier
34
function
AddByAdr(const
sName,sStartAdress,sEndAdress:string;
const OptimizeWaypoints:boolean=false;const
WayPoints:TLatLngList=nil):integer;
Ajout d'une route, retourne l'indice de la route
dans la liste
Déclenche l'évènement OnRouteChange en cas de succès sinon
OnRouteError
Name nom de votre route,
peut-être vide
sStartAdress Adresse du point de
départ de la route
sEndAdress Adresse point
d'arrivée de la route
OptimizeWayPoints force le calcul
de la route la plus directe en réorganisant vos
points de passages (n'a aucune action sous
CloudMade)
WayPoints
liste de type
TLatLngList des
points de passages.
Passez nil si vous ne voulez pas indiquer de
points de passage particulier
35
AddByAdr n'est pas disponible sous
CloudMade
16
procedure
Clear;
Efface l'ensemble des routes
function
Count:integer;
Retourne le nombre de routes
procedure
Delete(index:integer);
Efface la route d'indice Index
procedure
Undo(index:integer);
Annule le changement de direction effectuée à la
souris sur la route d'indice
Index
Vous pouvez annuler les dix dernières modifications
de trajet.
Non disponible sous CloudMade
17
function
Ready:boolean;
Indique si vous pouvez ajouter une route, vous ne
pouvez pas le faire lorsqu'une route est entrain
d'être calculée.
property
TravelMode:
TDirectionsTravelMode
Propriété en lecture/écriture qui permet de
choisir le type de route que l'on veux
property
Distance :
longint;
Propriété en lecture
seule qui retourne la longueur de l'ensemble
des routes en mètres
property
Duration :
longint;
Propriété en
lecture
seule qui retourne le temps qu'il faut, en
secondes, pour effectuer les
trajets.
Non disponible sous CloudMade
18
property
avoidHighways :
boolean;
Propriété en lecture/écrite qui offre le choix
d'éviter ou non les autoroutes
property
avoidTolls :
boolean;
Propriété en lecture/écrite qui offre le choix
d'éviter ou non les routes payantes
property
Color : TColor;
Propriété en lecture/écrite qui offre le choix
de fixer la couleur de la route
property
Draggable :
boolean;
Propriété en
lecture/écrite qui permet la
modification à la souris du trajet de la route.
Avec l'api CloudMade vous ne pouvez modifier que
les points de départ/arrivée et de
passages
11
property
Opacity : double;
Propriété en lecture/écrite qui ajuste le
pourcentage d'opacité de la couleur de la route
property
Weight : integer;
Propriété en lecture/écrite qui fixe la taille
du tracé de la route
property
ZIndex : integer;
Propriété en lecture/écrite, attribut un indice
de priorité pour l'affichage de la route, une route
ayant un Zindex plus élevé sera affiché par dessus
celle ayant un Zindex inférieur
property
MarkerOptions :
TECMapMarker;
property
Route[index:integer]:TECMapRoute;
default;
Tableau permettant l'accès aux routes, c'est la
propriété par défaut donc vous pouvez y accéder
directement par map.Routes[index] au
lieu de map.Routes.Route[index]
property
ToKml : string;
Propriété en
lecture
seule qui retourne une string au
format Kml contenant la liste des routes
property
ToTxt : string;
Propriété en
lecture/écriture qui donne accès à
la liste des routes dans un format texte.
En écriture il s'agit d'un ajout et non d'un
remplacement, si vous ne souhaitez pas conserver
les anciennes valeurs faites un
Clear avant
l'ajout
36
wp := TLatLngList.create(nil);
try
wp.add(43.2237336276672,0.0462043685729441);
map.Routes.Color := clGreen;
id := map.Routes.Add('my first
route',
43.2328643,0.074120799999946,
43.0946324606031,-0.0254427986328665,true,
wp);
finally
wp.free;
end;
Évènements
OnRouteChange(sender: Tobject;const
idRoute:integer;const NewRoute:boolean)
idRoute est l'indice de la route
dans la liste Routes
NewRoute égale
True s'il s'agit d'un ajout de
route, False s'il s'agit d'une
modification du trajet
OnRouteError(sender:
Tobject;const idRoute:integer;const
sError:string)
idRoute est l'indice de la route
dans la liste Routes
sError explication de
l'erreur
TECMapRoute
TECMapRoute est la classe qui manipule une route, elle
vous donne accès aux méthodes et propriétés suivantes
:
function
getLatLngFromMeter(const
SensStartEnd:boolean;const
lMeter:longint;
var
dLatitude,dLongitude:double;
var
idPoint:integer;
var
heading:integer;var bEnd:boolean):boolean;
Calcule la latitude et la longitude d'un point sur
la route en fonction de sa distance en mètres,
retourne True si on a trouvé un
point
SensStartEnd sens du parcours,
true pour départ ->
arrivée
lMeter la distance en
mètre
dLatitude,dLongitude des
variables de type double qui
recevront la latitude et la longitude
idPoint une variable qui
contiendra l'indice dans Path où se
situe le point, le calcul retourne une approximation
car votre route ne comporte par l'ensemble des points
réels
Heading une variable qui
contiendra l'angle du point par rapport au nord (de 0
à 360°)
bEnd indique si l'on a atteind ou
dépassé la fin de la route (ou le début suivant le
sens)
procedure
fitBounds
Adapte le zoom de la carte pour afficher l'ensemble
de la route
procedure
Update;
Redéfini la route pour tenir compte des modifications
effectuées sur l'une des propriétés
procedure
OptimizeWaypoints;
Réorganise les points de passages pour que leur ordre
soit optimal
Non disponible sous CloudMade
19
procedure
updateOptions;
Redessine la route pour tenir compte des propriétés
Color,Opacity,
Weight et Draggable
Propriété en lecture
seule qui retourne la longueur de la route en
mètres
property
Duration :
longint;
Propriété en
lecture
seule qui retourne le temps qu'il faut, en
secondes, pour effectuer le
trajet.
Non disponible sous CloudMade
20
property
Path :
TECMapRoutePath;
Liste de type TECMapRoutePath contenant les points
constituants la route
property
WayPoints :
TLatLngList;
Liste des points de passages
property
Copyright :
string;
L'éventuel copyright associé à cette route
property
StartAdress :
string;
Adresse du point de départ, en lecture seule
Non disponible sous CloudMade
21
property
StartLatitude :
double;
Propriété en lecture/écriture Latitude du point
de départ
property
StartLongitude :
double;
Propriété en lecture/écriture Longitude du
point de départ
property
EndAdress :
string;
Adresse du point d'arrivée, en lecture seule
Non disponible sous CloudMade
22
property
EndLatitude :
double;
Propriété en lecture/écriture Latitude du point
d'arrivée
property
endLongitude :
double;
Propriété en lecture/écriture Longitude du
point d'arrivée
property
Name : string;
Propriété en lecture
seule qui retourne le nom de la route telqu'il
a été indiqué à la création
property
Id : integer;
Propriété en
lecture
seule qui retourne l'indice de la route dans
la liste
Routes
property
NorthEastLatitude :
double;
Propriété en lecture
seule qui retourne la latitude du coin
Nord-Est de la zone encadrant l'intégralité de la
route
property
NorthEastLongitude :
double;
Propriété en lecture
seule qui retourne la longitude du coin
Nord-Est de la zone encadrant l'intégralité de la
route
property
SouthWestLatitude :
double;
Propriété en lecture
seule qui retourne la latitude du coin
Sud-Ouest de la zone encadrant l'intégralité de la
route
property
SouthWestLongitude :
double;
Propriété en lecture
seule qui retourne la longitude du coin
Sud-Ouest de la zone encadrant l'intégralité de la
route
property
TravelMode:
TDirectionsTravelMode
Propriété en lecture/écriture qui permet de
choisir le type de route que l'on veux
property
avoidHighways :
boolean;
Propriété en lecture/écrite qui offre le choix
d'éviter ou non les autoroutes
property
avoidTolls :
boolean;
Propriété en lecture/écrite qui offre le choix
d'éviter ou non les routes payantes
property
Color : TColor;
Propriété en lecture/écrite qui offre le choix
de fixer la couleur de la route
property
Draggable :
boolean;
Propriété en
lecture/écrite qui permet la
modification à la souris du trajet de la route.
Avec l'api CloudMade vous ne pouvez modifier que
les points de départ/arrivée et de
passages
12
property
Opacity : double;
Propriété en lecture/écrite qui ajuste le
pourcentage d'opacité de la couleur de la route
property
Weight : integer;
Propriété en lecture/écrite qui fixe la taille
du tracé de la route
property
ZIndex : integer;
Propriété en lecture/écrite, attribut un indice
de priorité pour l'affichage de la route, une route
ayant un Zindex plus élevé sera affiché par dessus
celle ayant un Zindex inférieur
property
MarkerOptions :
TECMapMarker;
Propriété qui vous permet de manipuler les markers de
départ et d'arrivée en changeant l'icône par exemple,
malheureusement on ne peut pas encore les
différencier.
Non disponible sous CloudMade
23
property
Tag :integer;
Propriété en lecture/écrite, vous pouvez
l'utiliser librement pour stoker ce que vous voulez
property
ToKml : string;
Propriété en
lecture
seule qui retourne une string au
format Kml contenant la route
property
ToTxt : string;
Propriété en
lecture/écriture qui donne accès à
la route dans un format texte.
En écriture il s'agit d'un ajout et non d'un
remplacement, si vous ne souhaitez pas conserver
les anciennes valeurs faites un
Clear avant
l'ajout
38
TECMapRoutePath
Liste des points de la route, elle vous donne accès
aux méthodes et propriétés
function
Distance:integer;
Distance en mètres
function
Duration:integer;
Durée en secondes
function
Count:integer;
Retourne le nombre de point constituant la route
function
IndexOfLatLng(const
dLatitude,dLongitude:double):integer;
Retourne l'index d'un point dont on passe la
latitude et la longitude, -1 si pas de point
property
Point[index:integer]:TECMapRoutePathPoint;
default;
Tableau permettant l'accès aux points, c'est la
propriété par défaut donc vous pouvez y accéder
directement par
map.Routes[idroute].Path[idPoint]
au lieu de
map.Routes[idroute].Path.Point[idPoint]
TECMapRoutePathPoint
Classe gérant un point de la route, elle vous
donne accès aux propriétés
property
Altitude : double;
Propriété en lecture
seule qui retourne l'altitude en mètre du
point
property
Instructions :
string;
Propriété en lecture
seule qui retourne les instructions, en
HTML, associées au point
property
Latitude :
double;
Propriété en lecture
seule qui retourne la latitude du point
property
Longitude :
double;
Propriété en lecture
seule qui retourne la longitude du point
property
Distance :
longint;
Propriété en lecture
seule qui retourne la distance en mètres
property
Text :
string;
Propriété en lecture
seule qui retourne les instructions au
format texte
AddPolylineFromRoute
TECMap dispose d'une fonction qui vous permet
d'ajouter une polyligne à partir
de l'indice d'une route
id := map.AddPolylineFromRoute(0);
Cela peut-être utile pour "figer"
une route, en effet lors de la sauvergarde d'une
route seul les points de départ et d'arrivée sont
sauvés, lors de la lecture un recalcul de la route
sera effectué.
Les polylines permettent de calculer par lot l'altitude des points
alors que pour les routes il faut le faire point par
point, DemoRoute utilise AddPolylineFromRoute pour
calculer l'élévation.
Fonctions utilitaires
function
TECMap.GetRoutePathFrom(const
dLatLngs: array of double;const params): TECMapRoutePath;
procedure
TECMap.GetASyncRoutePathFrom(const
dLatLngs: array of double;const params:
string);
function
TECMap.GetRoutePathByAdress(const
StartAdress, EndAdress: string;const params:
string): TECMapRoutePath;
procedure
TECMap.GetAsyncRoutePathByAdress(const
StartAdress, EndAdress: string;const params:
string);
Ces quatre routines permettent d'obtenir les
informations d'une route sans effectuer de tracé,
vous avez deux procedures asynchrones qui vont
s'exécuter en arrière-plan et déclencher
l'évenement OnRoutePath lorsque les données sont
disponibles.
Si vous ne libérez pas le TECMapRoutePath
obtenu, il le sera automatiquement lors de la
destruction de TECMap
40
Vous pouvez créer une polyline à partir
d'un TECMapRoutePath
routePath :=
map.GetRoutePathByAdress('Tarbes','Aureilhan|Lourdes');
if
routePath<>nil then
begin
id :=
map.polylines.addFromRoutePath(routePath);
map.polylines[id].fitBounds;
routePath.free;
end;
function
TECMap.
DistanceFrom(const
LatStart, LngStart,LatEnd, LngEnd: double):
double;
function
TECMap.DistanceRouteByAdress(const
StartAdress, EndAdress: string;const params:
string= ''): double;
Retourne la distance en KM entre 2 adresses en
passant par la route
function
TECMap.DistanceRouteFrom(const
dLatLngs: array of double;const params: string =
''): double;
Retourne la distance en KM entre 2 points
géographique en passant par la route
function
TECMap.AddRouteByAdress(const
Adresses:TStrings):integer;
Ajoute une route, Adresses
contient les adresses de passages.
dKm := map.DistanceRouteByAdress('Tarbes','Aureilhan|Lourdes');
Adresses := TStringList.create;
try
Adresses.add('Tarbes');
Adresses.add('Aureilhan');
Adresses.add('Séméac');
Adresses.add('Lourdes');
map.AddRouteByAdress(Adresses);
finally
Adresses.free;
end;
DemoRoute
Le programme DemoRoute vous montre
comment exploiter les routes
Fig. 41 DemoRoute -
Instructions
Fig. 42 DemoRoute -
Altitudes