TECShapeLine vous permet de tracer une ligne constituée d'un ensemble de points sur votre carte.
Les lignes sont gérés par une liste de type TECShapeLines accessible au travers de la propriété Lines des groupes TECShapes
TECShapeline
Cette classe descend de TECShape
Elle possède en plus les propriétés suivantes
function Add(const Lat, Lng: double; const Alt: double = _ErrorAltitude): integer;
Contrairement à l'ajout d'un simple point, vous n'avez pas besoin d'encadrer l'ajout de votre tableau par BeginUpdate / EndUpdate, cela est fait automatiquement.
4Inverse le sens de la ligne
property ShowDirection : boolean
Ajoute des flêches à chaque segment pour montrer la direction
procedure Slice(ALat,ALng,BLat,BLng:double;Line: TECShapeLine);
Si ces points ne sont pas sur la ligne, ils sont remplacés par les points les plus proches situés sur le ligne
Si ces points ne sont pas sur la ligne, ils sont remplacés par les points les plus proches situés sur le ligne
Copier dans Line la partie délimité par les segments StartIndex et EndIndex
function Slice(const StartIndex,EndIndex:integer;GroupName:string=''):TECShapeLine;
Retourne une ligne composée de la portion délimité par les segments StartIndex et EndIndex
procedure Slice(const StartKm,EndKm : double;Line : TECShapeLine);
Copier dans Line la partie débutant au kilomètre StartKM et finissant au kilomètre EndKM
function Slice(const StartKm,EndKm : double;GroupName:string=''):TECShapeLine;
Retourne une ligne composée de la portion débutant au kilomètre StartKM et finissant au kilomètre EndKM
procedure Clear;
property Encoded: string ;
property EncodePrecision: byte;
procedure Delete(index: integer);
En utilisant psUserStyle et setCustomDash([len_dash,len_space,..,len_dashx,len_spacex]) vous pouvez créer votre schéma de traits
Vous pouvez animer les traits.
property LineType : TECLineType
Calcule les altitudes des points, vous pouvez lui passer une procédure de type TOnGetAltitude pour pouvoir afficher une barre de progression (voir DemoNativeRoute)
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 line/polygone 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ètredLatitude,dLongitude des variables de type double qui recevront la latitude et la longitude
idPoint une variable qui contiendra l'indice dans le tableau Path où se situe le point, le calcul retourne une approximation car votre polyline/polygone 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 du polyline/polygone(ou le début suivant le sens)
Retourne la distance entre 2 points géographique situés sur la ligne.
Si les points ne sont pas sur la ligne, ils sont remplacés par les 2 points de la ligne les plus proches.
Si la ligne représente une route donne accès aux formes qui signalent les étapes
Les points de départ et d'arrivée sont représentés par des TECShapePOI, les autres points intermédiaires sont des TECShapeMarker
L'exemple ci-dessous permet de modifier l'affichage des points de départ et d'arrivée.
Mode édition
property Editable : booleanUtilisez la propriété EditShadowLine de votre carte pour cacher ou modifier la trace de la future ligne.
La carte possède aussi une propriété EditShape de type TECShape qui contient l'élément en cours d'édition.
Cela ne permet que des tracés rectilignes, pour modifier une route cela demande juste 2-3 lignes de codes supplémentaires.
Vous pouvez aussi définir un tracé à main levée.
Par défaut les points de sélection sont représentés par un carré noir pour le point de départ, un carré blanc pour le point final et un rond blanc pour les points intermédiaires.
Utilisez les propriétés FilenameStartEditLine, FilenameEndEditLine, FilenamePointEditLine de votre carte pour changer les bitmaps
Vous pouvez prendre en charge la création des points de sélection en utilisant la propriété OnCreateShapeLinePoint
property OnShapePathChange : TNotifyEvent
Sélectionner une portion de la ligne
Pour pouvoir sélectionner une portion de votre ligne à la souris ou par code, utilisez la classe TecNativeLineSelect (unité uecEditNativeLine)
Survolez la ligne et cliquez sur le point de sélection pour le valider, recliquez dessus pour le supprimer, l'événement OnSelect est déclenché dès la pose du second point
Vous pourrez alors créer une ligne ou un polygone avec SelectionTo, ou accèder directement aux points sélectionnés avec Selection[x]
Utilisez SelectionFrom(ALat,ALng,BLat,BLng) pour sélection le segment par code.
Ligne géodésique
Une géodésique est le chemin le plus court entre deux point, utilisez la fonction AddGeodesicLine pour en créer une.
const GroupName: string = '';
const maxSegmentLength:integer=5000): TECShapeLine;
Il vous faut au minimum indiquer les coordonnées de deux points.
maxSegmentLength défini la taille maximale, en mètres, des segments intermédiaires.
PtA,PtB : TECShapeMarker;
...
PtA := map.shapes.Markers[0];
PtB := map.shapes.Markers[1];
line := map.AddGeodesicLine(PtA.Latitude,ptA.Longitude,ptB.Latitude,ptB.Longitude);
Enregistrer son déplacement
Le but de cet exemple est d'enregistrer son déplacement dans une TECShapeLine, un triangle pointant dans la direction du déplacement indiquera la position actuelle.
Météo
En utilisant les services d'OpenWeatherMap.org vous pouvez afficher la météo le long de votre TECShapeLine.Vous devez tout d'abord obtenir une clef pour utiliser l'api d'OpenWeatherMap
Consulter la demo RouteWeather pour plus d'informations sur la façon d'utiliser l'api d'OpenWeatherMap.