Composant Delphi / Google Maps / OpenStreetMap / Leaflet  / Mappilary / Native Maps 100% Delphi 0% WebBrowser 0% Javascript

Routes

Vous êtes ici :TECMap > Overlays
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

// Delphi map component ECMap

wp := TLatLngList.create(nil);
try
// add waypoint
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

Les Polylines/Polygones disposent d'une même fonction au travers de leur propriété Path de type TLatLngList

37

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

// Delphi map component ECMap

// add polyline with info of route number 0
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.

Voir open.mapquestapi.com/directions/ pour le paramètre Params

39

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
// Delphi map component ECMap

// ge data road between Tarbes and Lourdes via Aureilhan
routePath := map.GetRoutePathByAdress('Tarbes','Aureilhan|Lourdes');
// draw polyline from routePath
if routePath<>nil then
begin

id := map.polylines.addFromRoutePath(routePath);
// see the entire route
map.polylines[id].fitBounds;

routePath.free;
end;
function TECMap.DistanceFrom(const LatStart, LngStart,LatEnd, LngEnd: double): double;

Retourne la distance en KM entre 2 points géographique, utilise la formule d'haversine

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

Voir open.mapquestapi.com/directions/ pour le paramètre Params des fonctions DistanceRouteXXX

41

function TECMap.AddRouteByAdress(const Adresses:TStrings):integer;

Ajoute une route, Adresses contient les adresses de passages.

// Delphi map component ECMap

// find the distance in km by road between Tarbes and Lourdes via Aureilhan
dKm := map.DistanceRouteByAdress('Tarbes','Aureilhan|Lourdes');

Adresses := TStringList.create;
try

Adresses.add('Tarbes');
Adresses.add('Aureilhan');
Adresses.add('Séméac');
Adresses.add('Lourdes');

// create route Tarbes/Lourdes via Aureilhan and Séméac
map.AddRouteByAdress(Adresses);

finally
Adresses.free;
end;

DemoRoute

Le programme DemoRoute vous montre comment exploiter les routes
Fig. 41 DemoRoute - Instructions
Fig. 41 DemoRoute - Instructions
Fig. 42 DemoRoute - Altitudes
Fig. 42 DemoRoute - Altitudes
Aller à la page
Composant Delphi / Google Maps / OpenStreetMap / Leaflet  / Mappilary© 2016 ESCOT-SEP Christophe - Réalisé avec Help&Web - RSS - RSS - Google+