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);property Id: integer;
property ItemType : TOverlayType ;
ovCircle, ovRectangle, ovLabel, ovGlobe, ovKml, ovFusion, ovGroundOverlay,
ovWeather, ovPoi);
property Group : TECMapItemGroup;
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:
- Circles
- GroundOverlays
- KmlLayers
- FusionTablesLayer
- Labels
- Markers
- InfoWindows
- Polylines
- Polygones
- Rectangles
- Routes
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;
function Add(const dLatitude,dLongitude:double):integer;
function Add(const Url:string;const dLatitude,dLongitude:double):integer;
function Add(const Url:string):integer;
function Add(const sName:string;const dStartLatitude,dStartLongitude,dEndLatitude,dEndLongitude:double;const OptimizeWaypoints:boolean=false;const WayPoints:TLatLngList=nil):integer;
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;
function Count:integer;
procedure Delete(index:integer);
property ToTxt : string
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
17property ToKml : string
Les labels ne sont pas exportables au format Kml
6TECMapOverlay
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
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ésNumero 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
5Lorsque 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
Les polylines disposent aussi de la propriété Distance
18TLatLngList
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.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.
4Calcule 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ètredLatitude,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
19Exemple 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
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)
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 !
20index 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 !
21CloudMade ne répond pas aux évènements OnOverlayMouseDown et OnOverlayMouseUp
6CloudMade ne supporte pas le click droit, Alt+click déclenche cet évènement (sous Google Map aussi)
8Sous 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)
9PathIndex indique l'index dans Path
Marqueurs interactifs
Les marqueurs interactif de l'overlay assigné à EditOverlay déclenchent aussi des évènementsPar 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
Démonstration
Le programme DemoOverlay vous montre comment manipuler facilement tous ces éléments
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.