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

Overlays

Vous êtes ici :TECMap

Les overlays sont tous les éléments basés sur des points géographiques que vous pouvez incruster sur vos cartes, ils descendent de la classe TECMapItem.

TECMapItem

procedure SetPosition(const dLatitude, dLongitude: double);
Modifie la position géographique de l'élément
procedure AddToGroup(const GroupName:string);
Ajoute l'élément dans un groupe

property Id: integer;

Indice de l'élément dans sa liste

property ItemType : TOverlayType ;

TOverlayType = (ovNone, ovMarker, ovRoute, ovLine, ovPolygone, ovMap,
ovCircle, ovRectangle, ovLabel, ovGlobe, ovKml, ovFusion, ovGroundOverlay,
ovWeather, ovPoi);

property Group : TECMapItemGroup;

Indique le groupe auquel appartient l'élément, positionnez à nil pour sortir l'élément du groupe

Liste d'overlays

Chaque type d'overlay est géré dans une liste séparée, vous pourrez ajouter, supprimer, importer/exporter vos éléments

Les listes sont accessibles au travers des propriétés:

elles se manipulent au travers de méthodes et propriétés similaires, seule le paramètrage de la fonction d'ajout différe.

function Add:integer;

Pour les Polylines, Polygones et Labels

function Add(const dLatitude,dLongitude:double):integer;

Pour les Markers, Circles et Rectangles

function Add(const Url:string;const dLatitude,dLongitude:double):integer;

Pour les GroundOverlays, l'url pointant une image

function Add(const Url:string):integer;

Pour les KmlLayers, l'url pointant un fichier Kml

function Add(const sName:string;const dStartLatitude,dStartLongitude,dEndLatitude,dEndLongitude:double;const OptimizeWaypoints:boolean=false;const WayPoints:TLatLngList=nil):integer;

Pour les Routes

Add retourne dans tous les cas le numéro d'index de l'élément ajouté

16

// Delphi map component ECMap
// add circle at center of map
id := map.Circles.add(map.latitude,map.longitude);
// fix radius to 500 meters
map.Circles[id].Radius := 500;

procedure Clear;

supprime l'ensemble des éléments

function Count:integer;

retourne le nombre d'élément

procedure Delete(index:integer);

supprimer l'élement numéro index

property ToTxt : string

propriété en lecture/écriture permettant d'exporter/importer au format texte l'ensemble des éléments

 

L'importation fonctionne comme un ajout, les éléments préexistants sont conservés, si vous souhaitez remplacer ceux-ci il faut avant l'importation faire appel à Clear

17

property ToKml : string

Exportation au format Kml de l'ensemble des éléments

Les labels ne sont pas exportables au format Kml

6

TECMapOverlay

Les cercles, rectangles, polylines, polygones et groundOverlays descendent du type TECMapOverlay, TECMap dispose d'une propriété de ce type nommée EditOverlay.

En lui assignant un overlay compatible (cercle, rectangle, polyline, polygone ou GroundOverlay), vous pouvez modifier à la souris sa position et sa taille directement depuis votre carte.

Pour cela vous devez basculer à True la propriété EditMode de TECMap

EditOverlay dispose de la propriété OverlayType de type TOverlayType qui vous permet de connaitre le type d'overlay

TOverlayType = (ovNone, ovMarker, ovRoute, ovLine, ovPolygone, ovMap, ovCircle, ovRectangle, ovLabel, ovGlobe, ovKml, ovGroundOverlay);

EditOverlay a aussi une propriété Id de type integer qui vous donne le numéro d'index de votre overlay dans sa liste.

// Delphi map component ECMap
// add circle at center of map
id := map.Circles.add(map.latitude,map.longitude);
// fix radius to 500 meters
map.Circles[id].Radius := 500;
// edit overlay with mouse
map.EditOverlay := map.Circles[id];
// map.EditOverlay.OverlayType = ovCircle
// map.EditOverlay.Id = id

Méthodes & Propriétés communes

Ce type d'overlay partage les propriétés
Color : TColor
Couleur du trait extérieur
Clickable : boolean
Permettre ou non à l'élément de réagir au clic de la souris, à False l'overlay ne pourra pas basculer en mode édition même si EditMode est à True.
Geodesic : boolean
Rendre chaque bordure comme une géodésique (un segment d'un "grand cercle"). Une géodésique est le plus court chemin entre deux points le long de la surface de la Terre.
Id : integer
Numéro d'index de l'overlay dans sa liste
InfoWindow : integer

Numero d'index de l'InfoWindow associée, -1 si aucune

Lors d'un clic sur l'overlay si une infowindow est définie elle sera ouverte

Non disponible sous CloudMade

5
Opacity : double
Pourcentage d'opacité de la couleur
Visible : boolean
Visible ou pas
Weight : integer
Épaisseur du trait
ZIndex : integer
Indice de profondeur par rapport aux autre overlays, permet de déterminer si un overlay est "au-dessus" d'un autre
ToTxt : string
Propriété en lecture/écriture permettant d'exporter/importer au format texte l'ensemble des propriétés de l'overlay
Tag : integer
Vous pouvez utiliser cette propriété comme bon semble

Lorsque vous modifiez les propriétés Color, Opacity, Weight ou ZIndex vous devez explicitement faire un appel à la procédure reDraw pour que cela soit pris en compte

7

// Delphi map component ECMap

map.Polylines[0].Color := clRed;
map.Polylines[0].Weight := 5;
// change property
map.Polylines[0].reDraw;


Les cercles, rectangles et les polygones disposent en plus des propriétés

Area : double
Surface en m²
Distance : double
Distance du pourtour en m
FillColor : TColor
Couleur intérieur
FillOpacity : double
Pourcentage d'opacité de la couleur d'intérieur

Les polylines disposent aussi de la propriété Distance

18
Les cercles possèdent les propriétés
Center : TLatLng
Coordonnées du centre du cercle
Radius : Integer
Rayon en m
Les rectangles possèdent les propriétés
Height : double
Hauteur en m
Width : double
Largeur en m

TLatLngList

Les polylines et polygones possèdent une propriété Path de type TLatLngList, liste des points constituant la figure, dont voici les principales caractéristiques.
function Add(const dLatitude,dLongitude:double):integer;
Ajouter un point en fin de liste
procedure Insert(const index:integer;const dLatitude,dLongitude:double);
Insérer un point en Index
procedure BeginUpdate;
IMPORTANT : avant d'ajouter une serie de point faite un appel à BeginUpdate pour ne déclencher la reconstruction qu'une fois tous les points insérés.
procedure Clear;
Efface tous les points
function Count:integer;
Retourne le nombre de points
procedure Delete(index:integer);
Efface le point Index
procedure EndUpdate;
IMPORTANT : à la fin d'une série d'ajout ou d'insertion, faite un appel à EndUpdate pour répercuter les modification
procedure PanToBounds;
Faire glisser la carte de manière à ce que la figure soit entièrement visible
function getAdress(const index:integer):string;
Retourne l'adresse du point Index
procedure getAltitudes(Event:TOnGetAltitude=nil);

Calcule les altitudes des points, vous pouvez lui passer une procédure de type TOnGetAltitude pour pouvoir afficher une barre de progression (voir demoOverlay et DemoRoute)

// Delphi map component ECMap

// calcul altitude for all point of polyline 0
// you can pass nil if you don't show a progressbar
map.Polyline[0].Path.GetAltitudes(doGetAltitude);
...
{*
event fired by getAltitudes

@param Sender TLatLngList
@param Total number of altitude's point calculated
@cancel flag for abort calcul
}
procedure TFDemoRoute.doOnGetAltitude(Sender: TLatLngList;const Total:integer;var cancel:boolean);
begin
ProgressAltitude.Position := total;
// cancel if press button
cancel := btAbortAlt.tag = -1;
end;

Vous pouvez directement créer un TLatLngList et le remplir avec vos points pour obtenir leur altitude sans avoir à passer par une Polyline.

4
property Point[index:integer]:TLatLng read getPoint; default;
Retourne le TLatLng correspondant à Index
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 le polyline/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ètre

dLatitude,dLongitude des variables de type double qui recevront la latitude et la longitude

idPoint une variable qui contiendra l'indice dans le tableau Point 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)

Les routes disposent d'une même fonction

19

Exemple de manipulation d'un Polyline

// Delphi map component ECMap

// add new polyline
id := map.Polylines.add;

// IMPORTANT for more speed !
map.Polylines[id].Path.BeginUpdate;
// add points to polyline id
map.Polylines[id].Path.Add(37.772323, -122.214897);
map.Polylines[id].Path.Add(21.291982, -157.821856);
map.Polylines[id].Path.Add(-18.142599, 178.431);
map.Polylines[id].Path.Add(-27.46758, 153.027892);
// update data
map.Polylines[id].Path.EndUpdate;


Évènements

Les cercles, rectangles, polylines, polygones et groundoverlays répondent aux évènements suivant


OnOverlayClick(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
simple click sur un overlay

index est l'index de l'overlay dans sa liste

dLatitude,dLongitude les coordonnées géographique du click

OverlayType le type d'overlay (ovCircle, ovRectangle, ovLine, ovPolygone,ovLabel ou ovGroundOverlay)
OnOverlayMouseDown(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
le bouton gauche de la souris est enfoncé sur un overlay

index est l'index de l'overlay dans sa liste

dLatitude,dLongitude les coordonnées géographique du click

OverlayType le type d'overlay (ovMarker,ovCircle, ovRectangle, ovLine, ovPolygone,ovLabel ou ovGroundOverlay)

Les markers répondent à cet évenement !

20
OnOverlayMouseUp(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
le bouton gauche de la souris est relevé sur un overlay

index est l'index de l'overlay dans sa liste

dLatitude,dLongitude les coordonnées géographique du click

OverlayType le type d'overlay (ovMarker,ovCircle, ovRectangle, ovLine, ovPolygone,ovLabel ou ovGroundOverlay)

Les markers répondent à cet évenement !

21

CloudMade ne répond pas aux évènements OnOverlayMouseDown et OnOverlayMouseUp

6
OnOverlayDblClick(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
Double click sur un overlay
OnOverlayRightClick(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
Click droit sur un overlay

CloudMade ne supporte pas le click droit, Alt+click déclenche cet évènement (sous Google Map aussi)

8
OnOverlayMove(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
Déclenché lors du déplacement d'un overlay, par code ou à la souris

Sous Google Map vous pouvez déplacer par glisser-lacher l'overlay pointé par EditOverlay, mais sous CloudMade vous devez d'abord faire un CTRL+clic sur la carte, puis déplacer la souris en maintenant CTRL enfoncé pour déplacer votre élément (fonctionne aussi avec Google Map)

9
OnOverlayMouseOut(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
La souris sort d'un overlay
OnOverlayMouseOver(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double;const OverlayType:TOverlayType)
La souris survole un overlay
OnOverlayChange(sender: Tobject;const Index:integer;const OverlayType:TOverlayType)
Déclenché lors de tout changement sur un overlay (couleur, point...)
OnOverlayPathChange(sender: Tobject;const Index:integer;const OverlayType:TOverlayType;const PathIndex:integer)
Déclenché lorsqu'un des points définissant l'overlay change

PathIndex indique l'index dans Path

Marqueurs interactifs

Les marqueurs interactif de l'overlay assigné à EditOverlay déclenchent aussi des évènements
OnEditOverlayPointClick(sender:TObject; const Index:integer)
Click sur le marqueur qui représente le point Index dans Path
OnEditOverlayPointDragEnd(sender: Tobject;const Index:integer;const dLatitude,dLongitude:double)
Déplacement du point Index dans Path et ses nouvelles coordonnées
OnEditOverlayPointRClick(sender:TObject; const Index:integer)
Click sur le marqueur qui représente le point Index dans Path

Par défaut les marqueurs interactif sont représentés par , vous pouvez modifier l'icône au travers de la proprités IconOverlay de type string, l'image peut-être une image distante sur internet ou un fichier local.

// Delphi map component ECMap

// red marker
map.IconOverlay := 'http://maps.google.com/mapfiles/ms/micons/red-pushpin.png';


Si vous changez l'icône vous aurez peut-être aussi besoin de retoucher les propriétés

IconSizeOverlay : TPoint
Largeur et Hauteur de l'image
IconOriginOverlay : TPoint
Origine en X et Y de la zone affichée extraite de l'image (une même image peut contenir plusieurs icones)
IconAnchorOverlay : TPoint
X et Y du point dans la zone qui va correspondre à la latitude et la longitude

Fig. 36 Polygone en mode édition

Démonstration

Le programme DemoOverlay vous montre comment manipuler facilement tous ces éléments


Fig. 37 DemoOverlay
Fig. 37 DemoOverlay

Toutes les notions liées aux overlays y sont employées, la création, l'édition, la suppression, l'import/export de votre carte, y compris l'export vers Google Earth.

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