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

Markers

Vous êtes ici :TECMap > Overlays

Les marqueurs sont gérés par une liste de type TECMapMarkers accessible au travers de la propriété Markers de TECMap


TECMapMarkers

Cette liste dispose des méthodes et propriétés suivantes :

function Add(const dLatitude,dLongitude:double):integer;
Ajoute un marker au point Latitude,Longitude et retourne son index dans la liste.

Vous pouvez aussi ajouter un marker avec la function AddMarker de TECMap

5

// Delphi map component ECMap

// add marker at center of map
id := map.AdMarker(map.latitude,map.longitude);
// set title to this marker
map.Markers[id].title := 'my first marker!';

function ByLatLng(const dLatitude,dLongitude:double):TECMapMarker;
Retourne le marker positionné en Latitude,Longitude
function ByName(const value:string):TECMapMarker;
Retourne le marker en fonction de son nom (propriété Name)
procedure Clear;
Efface tous les markers
procedure Delete(index:integer);
Supprime le marker dont on passe l'index
function IndexOf(const value:TECMapMarker):integer;
Retourne l'index du marker dans la liste
property Cluster:boolean;
Propriété en lecture/écriture,regroupe les markers en fonction de leur position et suivant le zoom

Fig. 38 Activation du regroupement de markers

Inactive sous CloudMade

7
property Count:integer;
Retourne le nombre de marker dans la liste
procedure fitBounds
Adapte le zoom de la carte pour afficher l'ensemble des markers
property Marker[index:integer]:TECMapMarker;
Tableau permettant l'accès aux markers, c'est la propriété par défaut donc vous pouvez y accéder directement par map.Markers[index] au lieu de map.Markers.Marker[index]
property ToKml : string;
Propriété en lecture seule qui retourne une string au format Kml contenant la liste des markers
property ToTxt : string;
Propriété en lecture/écriture qui donne accès à la liste des markers 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

22
Exemple d'utilisation

// Delphi map component ECMap

// add marker at center of map
id := map.Markers.add(map.latitude,map.longitude);
// set title to this marker
map.Markers[id].title := 'my first marker!';

TECMapMarker

Il s'agit de la classe gérant un marker, elle dispose des méthodes et propriétés suivantes :
procedure setPosition(const dLatitude,dLongitude:double);
Déplace le marker en Latitude,Longitude, déclenche l'évènement OnMarkerMove
procedure PanTo;
Déplace la carte pour que son centre coincide avec le marker, déclenche l'évènement OnMapMove

Le mouvement sera fluide si le déplacement ne dépasse pas la moitié de la hauteur ou de la largeur de la carte.

23
procedure CopyImage(const Source:TECMapMarker);
Copie les options de l'image du marker passé en paramètre
procedure setImage(const _Icon:string;Size,Origin,Anchor:TPoint);
_Icon contient le nom du fichier image source, local ou sur internet voir Icon
Size défini la Largeur et Hauteur, voir IconSize
Origin défini le X et le Y du point d'origine de l'image dans l'image source, voir IconOrigin
Anchor défini le X et le Y du point correspondant à la Latitude et Longitude, voir IconAnchor
procedure setImageShadow(const _Icon:string;Size,Origin,Anchor:TPoint);
Change les options pour l'ombre de l'image
procedure setShape;
Application de la zone clickage du marker, voir propriété Shape
property Adress : string;
Propriété en lecture/écriture, permet d'obtenir l'adresse du marker ou de le positionner à une adresse, déclenche l'évènement OnMarkerAdress

Pour éviter de multiple connexions au serveur l'adresse est mise en cache, une nouvelle connexion ne sera effectuée que si le marker est déplacé

24
property Animation : string;
Propriété en lecture/écrite, les valeurs disponibles sont répertoriées dans la propriété de type TStringList MarkerAnimations de TECMap

Avec l'api Google vous avez 'BOUNCE' et 'DROP', mettez une chaîne vide pour stopper l'animation

25

Inactive sous CloudMade

8
property Altitude : double ;
Propriété en lecture/écrite, la valeur est mise en cache pour éviter de multiple connexions au serveur, une nouvelle connexion ne sera effectuée que si la position du marker change.
property Cursor : string;
Propriété en lecture/écrite, défini le curseur de la souris lors du survol, les valeurs disponibles sont répertoriées dans la propriété de type TStringList Cursors de TECMap

Inactive sous CloudMade

9
property Clickable : boolean;
Propriété en lecture/écrite, défini si le marker reçoit le click de la souris ou non
property Draggable : boolean;
Propriété en lecture/écrite, défini si le marker est déplaçable à la souris.

Même si un marker n'est pas déplaçable à la souris vous pouvez changer sa position par code au travers de setPosition ou de ses propriétés Latitude et Longitude

26
property Dragging : boolean;
Indique si le marker est entrain d'être déplacé
property Flat : boolean;
Propriété en lecture/écrite, défini si le marker a une ombre
property Heading : integer;
Indique l'angle par rapport au nord
property Icon : string;
Propriété en lecture/écrite, défini l'image du marker, cela peut-être soit un fichier local soit une url d'un fichier situé sur internet, voir aussi setImage

Avec Google Maps vous pouvez aussi utiliser un Symbol

6
// Delphi map component ECMap

// set vector icon
map.Markers[0].Icon := '{path: google.maps.SymbolPath.CIRCLE,scale: 3,strokeColor: "#393"}';
property Shadow : string;
Propriété en lecture/écrite, défini l'image de l'ombre du marker, cela peut-être soit un fichier local soit une url d'un fichier situé sur internet, voir aussi setImageShadow
property IconSize : TPoint;
défini la Largeur et Hauteur de l'image
property IconOrigin : TPoint;
défini le X et le Y du point d'origine de l'image dans le fichier source
property IConAnchor : TPoint;
défini le X et le Y dans l'image du point correspondant à la Latitude et Longitude
property Index;
Index du marker dans la liste des markers
property InfoWindow : integer;

Index de l'infoWindow associée au marker dans la liste des InfoWindows

Lors d'un clic sur le marker si une infowindow y est définie, elle sera ouverte

property Name : string;
Propriété en lecture/écrite, défini le nom de votre marker, voir ByName
property Latitude : double;
Propriété en lecture/écrite, définissant la latitude du marker, déclenche l'évènement OnMarkerMove
property Longitude : double;
Propriété en lecture/écrite, définissant la longitude du marker, déclenche l'évènement OnMarkerMove
property Tag :integer;
Propriété en lecture/écrite, vous pouvez l'utiliser librement pour stoker ce que vous voulez
property Title : string;
Propriété en lecture/écrite, définissant le titre de votre marker, il s'affiche sous la forme d'une infobulle lors du survol du curseur
property Visible : boolean;
Propriété en lecture/écrite, permet d'afficher ou non le marker
property Zindex : integer;
Propriété en lecture/écrite, attribut un indice de priorité pour l'affichage du marker, un marker ayant un Zindex plus élevé sera affiché par dessus celui ayant un Zindex inférieur
property ShowOnMap : boolean;
Propriété en lectureindiquant si la position du marker est dans la portion visible de la carte
property Shape : TECMapShape;
Permet de définir la zone clickable du marker.

// Delphi map component ECMap


// fix shape rectangle
map.Markers[0].shape.stype := 'rect';
// fix coord
map.Markers[0].shape.Coord.add([10,10,25,30]);
// set shape
map.Markers[0].setShape;

Avec SType 'circle', 'poly' ou 'rect'
Voir aide de google

Inactive sous CloudMade

10
property ToTxt : string;
Propriété en lecture/écriture qui donne accès au marker sous la forme d'une chaîne texte
property ToKml : string;
Propriété en lecture seule qui retourne le marker sous la forme d'une chaîne au format Kml

Évènements

Vous pouvez vous connecter sur le composant TECMap pour recevoir les évènements mais vous pouvez aussi vous y brancher directement depuis un marker pour une réponse spécifique, auquel cas l'évènement global de TECMap ne sera pas appelé

7

Les markers déclenchent les évènements:

OnMarkerMove(sender: Tobject;const Index:integer;var dLatitude,dLongitude:double)
Déclenché lors de tout déplacement d'un marker, par code ou à la souris

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude la nouvelle position

Vous pouvez modifier celle-ci dans l'évènement

8
OnMarkerClick(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déclenché lors d'un click sur le marker

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude position du marker
OnMarkerRightClick(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déclenché lors d'un click droit sur le marker

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude position du marker
OnMarkerDblClick(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déclenché lors d'un double click sur le marker

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude position du marker
OnMarkerDrag(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déclenché pendant le déplacement à la souris d'un marker

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude position du marker
OnMarkerDragStart(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déclenché au départ du déplacement à la souris d'un marker

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude position du marker
OnMarkerDragEnd(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déclenché à la fin du déplacement à la souris d'un marker

Index est l'indice du marker dans la liste Markers

dLatitude et dLongitude position du marker
OnMarkerAdress(sender: Tobject;const sAdresses:string;var Index:integer;const IndexMarker:integer)
Déclenché par l'attribution d'une adresse au marker

sAdresses contiendra toutes les adresses, séparé par #13#10 pouvant correspondre avec votre requête.

Index contiendra l'index de l'adresse retenue, par défaut 0, vous pourrez le modifier dans cet évènement.

IndexMarker indice du marker dans la liste des Markers

En sortie de cet évènement le marker est positionné sur l'adresse retenue

Les markers répondent aussi aux évènements OnOverlayMouseDown et OnOverlayMouseUp

27

Postionner un marker sur un chemin

function MoveMarkerOnRouteToMeter(const iNumMarker,iNumRoute:integer;
const RouteType: TOverlayType;
const Direction:TDirectionSens;
const lMeter:longint):integer;

Cette fonction vous permet de positionner un marker sur un chemin (route, polyline ou polygone) en fonction d'une direction et d'une distance en mètre.

iNumMarker est l'indice du marker dans la liste Markers

iNumRoute est l'indice du chemin dans Routes, Polylines ou Polygones

RouteType détermine le type de chemin, ovRoute, ovLine ou ovPolygone

Direction est le sens de parcour soit dsStartEnd soit dsEndStart

lMeter la distance en mètre

 

Dans le chapitre suivant vous découvrirez d'autres fonctionnalités pour rendre vos markers mobiles plus simplement

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