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

Routes

Vous êtes ici :TECMap > Overlays

Clefs pour les API

Par défaut TECNativeMap utilise MapQuest avec une clef pour le plan gratuit limité à 15000 transactions par mois.

Si vous souhaitez utiliser ces services vous devez obtenir une clef auprès de MapQuest

Faites de même pour utiliser les services de MapZen et MapBox.

Mode hors-ligne

Si vous indiquez un répertoire dans la propriété LocalCache, toutes les données des routes seront mise en cache et pourront être réutilisées en mode hors-ligne.

Disponible dans la future version 2.7

34

TECRouting

Cette classe gère les routes ainsi que la navigation tour par tour.

procedure Request(const StartAdress, EndAdress: string;const params: string = ''); overload;

procedure Request(const dLatLngs: array of double;const params: string = ''); overload;

Calculer une route entre des adresses ou des points
// get data road between Tarbes and Paris
map.Routing.Request('Tarbes','Paris');
// get data road between Tarbes and Lourdes via Aureilhan
map.Routing.Request('Tarbes','Aureilhan|Lourdes');
// you can also pass a array of coordinate pairs
map.Routing.Request([43.232858,0.0781021,43.2426749,0.0965226]);
Params vous permet de passer des paramètres supplémentaires au moteur de routage

property routeType: TMQRouteType

Type de route ( rtFastest, rtShortest , rtPedestrian, rtBicycle )

property GroupName : string

Nom du groupe auquel appartiendra la nouvelle route (TECShapeLine), par défaut vide

property Color : TColor

Couleur de la route

property Weight: integer

Épaisseur de la route

property StartMarkerFilename: string

Image utilisée pour marquer le départ, par défaut

property EndMarkerFilename: string

Image utilisée pour marquer l'arrivée, par défaut

property RouteDrawingTime: integer

Temps (en milliseconde) pour afficher la route, permet de réaliser une animation pour un affichage progressif.
Par défaut 0, la route s'affiche en une seule fois.

property EditRoute: TECShapeLine

Permet de modifier la route avec la souris

property EditOnClick : boolean

Par défaut un clic sur une route la fait basculer en mode édition, il suffit de cliquer sur les points A ou B pour quitter ce mode

Moteur de routage

procedure Engine(value:TRoutingEngine;const ApiKey:string='');

Permet de choisir un moteur de routage, au choix MapQuest (seul moteur disponible avant), MapZen, OSRM ou MapBox

// get data road between Tarbes and Paris
map.Routing.Request('Tarbes','Paris');
// get data road between Tarbes and Lourdes via Aureilhan
map.Routing.Request('Tarbes','Aureilhan|Lourdes');
// you can also pass a array of coordinate pairs
map.Routing.Request([43.232858,0.0781021,43.2426749,0.0965226]);

Utilisez EngineValidUrl pour modifier l'url avant quelle ne soit envoyée au moteur

// get data road between Tarbes and Paris
map.Routing.Request('Tarbes','Paris');
// get data road between Tarbes and Lourdes via Aureilhan
map.Routing.Request('Tarbes','Aureilhan|Lourdes');
// you can also pass a array of coordinate pairs
map.Routing.Request([43.232858,0.0781021,43.2426749,0.0965226]);

Définir son propre moteur

Utilisez EngineUrl, EngineExcute pour utiliser votre propre moteur.

property EngineUrl : TECThreadRoutingUrl

property EngineExecute : TECThreadRoutingExecute

// get data road between Tarbes and Paris
map.Routing.Request('Tarbes','Paris');
// get data road between Tarbes and Lourdes via Aureilhan
map.Routing.Request('Tarbes','Aureilhan|Lourdes');
// you can also pass a array of coordinate pairs
map.Routing.Request([43.232858,0.0781021,43.2426749,0.0965226]);

EngineUrl et EngineExecute sont exécutés dans un autre thread !

96

property EngineName : string

Donne un nom au moteur, utilisé pour le stockage local

property EngineKey : string

Clef pour utiliser le moteur, vous devez obtenir les votres auprès de MapQuest, MapZen ou MapBox

property TurnByTurn: TECTurnByTurn

Gestion de la navigation tour par tour

4 événements sont disponibles

property OnAddRoute : TOnAddRoute
Déclenché lorsque la route a été crée
property OnChangeRoute : TOnChangeRoute
Déclenché lorsque la route a été modifiée
property OnErrorRoute : TOnErrorRoute
Déclenché si la route n'a pas été créée
property OnDrawRoute : TOnDrawRoute
Déclenché lorsque la route a été affichée intégralement (utile si RouteDrawingTime > 0)
// get data road between Tarbes and Paris
map.Routing.Request('Tarbes','Paris');
// get data road between Tarbes and Lourdes via Aureilhan
map.Routing.Request('Tarbes','Aureilhan|Lourdes');
// you can also pass a array of coordinate pairs
map.Routing.Request([43.232858,0.0781021,43.2426749,0.0965226]);

TECTurnByTurn

property line: TECShapeLine

Route à suivre

function Position(const Lat, Lng: double):boolean

Indiquez votre position GPS

property AlertDistance: integer

Par défaut 300 mètres

property ExecutionDistance: integer

Par défaut 100 mètres

property ErrorDistance: integer

Par défaut 30 mètres

événements disponibles

property OnAlert: TOnTurnByTurnAlert

Déclenché lorsque vous arrivez à moins de AlertDistance mètres de la cible

property OnInstruction: TOnTurnByTurnInstruction

Déclenché lorsque vous arrivez à moins de ExecutionDistance mètres de la cible

property OnArrival: TNotifyEvent

property OnError: TOnTurnByTurnError

property OnAfterInstruction: TOnTurnByTurnInstruction

property OnConnectRoute: TNotifyEvent

Déclenché par la connection d'une route

property OnDeconnectRoute: TNotifyEvent

Déclenché par la déconnection d'une route
// get data road between Tarbes and Paris
map.Routing.Request('Tarbes','Paris');
// get data road between Tarbes and Lourdes via Aureilhan
map.Routing.Request('Tarbes','Aureilhan|Lourdes');
// you can also pass a array of coordinate pairs
map.Routing.Request([43.232858,0.0781021,43.2426749,0.0965226]);

Fig. 123 DemoNativeRoute

La demo DemoNativeRoute a été réécrite pour utiliser ces nouvelles fonctionnalité.

28

Anciennes méthodes, privilégiez les nouvelles fonctionnalités disponible depuis la version 2.7

32

Recherche de routes

Vous avez à votre disposition 4 routines (2 synchrones et 2 asynchrones) pour calculer un itinéraire.

function GetRoutePathByAddress(const StartAdress, EndAdress: string;const routeType:TMQRouteType = rtFastest const params: string = '' ): TECRoutePath

function GetRoutePathFrom(const dLatLngs: array of double;const routeType:TMQRouteType = rtFastest ;const params: string = '' ): TECRoutePath

procedure GetASyncRoutePathByAddress(const StartAdress, EndAdress: string;const routeType:TMQRouteType = rtFastest ;const params: string = '' )

procedure GetASyncRoutePathFrom(const dLatLngs: array of double;const routeType:TMQRouteType = rtFastest ;const params: string = '' )


Ces fonctions permettent d'obtenir les informations d'une route sans effectuer de tracé, les procedures asynchrones 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

97

Si vous ne libérez pas le TECMapRoutePath obtenu, il le sera automatiquement lors de la destruction de TECNativeMap

98

Afficher la route

Vous pouvez créer une TECShapeLine à partir d'un TECMapRoutePath avec la fonction AddRoute

// Delphi map component ECMap

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

Line := map.AddRoute(routePath);
// see the entire route
map.fitBounds(line.NorthEastLatitude,line.NorthEastLongitude,line.SouthWestLatitude,line.SouthWestLongitude);

routePath.free;
end;

Vous pouvez aussi directement modifier une TECShapeLine avec la procedure setRoutePath

// Delphi map component ECMap

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

// change line 0 with new data
if map.shapes.lines.count>0 then
map.shapes.lines[0].setRoutePath(routePath);
// see the entire route
map.fitBounds(line.NorthEastLatitude,line.NorthEastLongitude,line.SouthWestLatitude,line.SouthWestLongitude);

routePath.free;
end;

Modifier la route à la souris

Pour cela vous allez devoir rajouter l'unité uecEditNativeLine ( FMX.uecEditNativeLine sous FireMonkey)

Vous pourrez alors utiliser la classe TecNativeLineToRoute pour pouvoir modifier dynamiquement le trajet.

property Line : TECShapeLine
TECShapeLine à modifier
property RouteType : TMQRouteType
type de route ( rtFastest, rtShortest, rtPedestrian, rtBicycle )
property Modified : boolean
Indique si la route à été modifié
property OnClick : TOnShapeMousePoint
Permet de réagir au clic sur la route
property OnMouseOver : TOnShapeMousePoint
Permet de réagir au survol de la route
property OnChange : TNotifyEvent
Évenement déclenché a chaque modification de la route

Exemple d'utilisation

// Delphi map component ECMap

var ecNativeLineToRoute : TecNativeLineToRoute;
...
ecNativeLineToRoute := TecNativeLineToRoute.create;

// edit route
ecNativeLineToRoute.Line := map.shapes.Lines[0];

// end edit route
ecNativeLineToRoute.Line := nil;
...
ecNativeLineToRoute.free;

DemoNativeRoute

Une démonstration est disponible pour bien comprendre la gestion des routes.

Fig. 124 DemoNativeRoute

Aller à la page
Composant Delphi / Google Maps / OpenStreetMap / Leaflet  / Mappilary© 2016 ESCOT-SEP Christophe - Réalisé avec Help&Web - RSS - RSS - Google+