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

TECShapePoi

Vous êtes ici :TECNativeMap > Shapes

Sommaire

Les Pois ( point of interest ) sont équivalents aux markers, la différence est que vous avez 7 formes prédéfinies (Texte, Ellipse, rectangle, triangle, losange, étoile et hexagone) mais vous pouvez aussi prendre en charge vous même leur dessin.

Par défaut les tailles des éléments sont en pixels mais vous pouvez aussi utiliser des mètres en utilisant la propriété POIUnit.

// Delphi map component ECMap

// add POI at center of map
id := map.shapes.Pois.add(map.latitude,map.longitude);

// random form

case random(7) of
0 : map.shapes.pois[id].POIShape := poiEllipse;
1 : map.shapes.pois[id].POIShape := poiStar;
2 : map.shapes.pois[id].POIShape := poiRect;
3 : map.shapes.pois[id].POIShape := poiTriangle;
4 : map.shapes.pois[id].POIShape := poiDiamond;
5 : map.shapes.pois[id].POIShape := poiHexagon;
6 : begin
map.shapes.pois[id].POIShape := poiText;
map.shapes.pois[id].Description := 'Poi n°'+inttostr(id);
end;
end;

map.shapes.pois[id].Draggable := true;

map.shapes.pois[id].Color := RGB(random(255),random(255),random(255)) ;

// set hint to this POI
map.shapes.Pois[id].Hint := 'my first POI!';

// by default the size of TECShapePOI is in pixel
// you cant use meter also

// map.shapes.pois[id].POIUnit := puMeter

map.shapes.pois[id].POIUnit := puPixel;

map.shapes.pois[id].width := 32;
map.shapes.pois[id].height:= 32;

Fig. 103 DemoNativePOI

Vous pouvez modifier la taille des formes en basculant leur propriété Editable à true

// Delphi map component ECMap

// add POI at center of map
id := map.shapes.Pois.add(map.latitude,map.longitude);

// random form

case random(7) of
0 : map.shapes.pois[id].POIShape := poiEllipse;
1 : map.shapes.pois[id].POIShape := poiStar;
2 : map.shapes.pois[id].POIShape := poiRect;
3 : map.shapes.pois[id].POIShape := poiTriangle;
4 : map.shapes.pois[id].POIShape := poiDiamond;
5 : map.shapes.pois[id].POIShape := poiHexagon;
6 : begin
map.shapes.pois[id].POIShape := poiText;
map.shapes.pois[id].Description := 'Poi n°'+inttostr(id);
end;
end;

map.shapes.pois[id].Draggable := true;

map.shapes.pois[id].Color := RGB(random(255),random(255),random(255)) ;

// set hint to this POI
map.shapes.Pois[id].Hint := 'my first POI!';

// by default the size of TECShapePOI is in pixel
// you cant use meter also

// map.shapes.pois[id].POIUnit := puMeter

map.shapes.pois[id].POIUnit := puPixel;

map.shapes.pois[id].width := 32;
map.shapes.pois[id].height:= 32;

Fig. 104 TECShapePOI en mode édition - poignée de redimensionnement affichée

TECMapPois

Les POIs sont gérés par une liste de type TECShapePois accessible au travers de la propriété Pois des groupes TECShapes

la propriété OnOwnerDrawPOI : TOnOwnerDrawPOI permet d'indiquer une procédure pour prendre en charge le dessin des Pois de type poiOwnerDraw

// Delphi map component ECMap


map.Shapes.Pois.OnOwnerDraw := doOwnerDrawPOI;
...

// owner draw poi, here transparancy text
procedure TFormPoi.doOwnerDrawPOI(const canvas:TCanvas;var Rect:TRect;item:TECMapPoi) ;
var x,y,w,h:integer;
begin

canvas.brush.Style := bsClear;

if item.Hover then
canvas.font.color := item.HoverColor
else
canvas.font.color := item.color;


canvas.font.Style := [fsBold];

w := canvas.TextWidth(item.hint) ;
h := canvas.TextHeight(item.hint);

x := rect.Left+((rect.Right-rect.Left-w) div 2);
y := rect.top+((rect.bottom-rect.top-h) div 2);

canvas.TextOut(x,y,item.Hint);

end;

Chaque élément TECShapePOI dispose de sa propre propriété OnOwnerDrawPOI

90

Vous avez aussi une propriété OnAfterDraw qui permet de dessiner par dessus une figure, exemple pour y inscrire son numéro.

// Delphi map component ECMap


map.Shapes.Pois.OnAfterDraw := doAfterDrawPOI;
...

// after draw poi, here write is number
procedure TFormPoi.doAfterDrawPOI(const canvas:TCanvas;var Rect:TRect;item:TECMapPoi) ;
var x,y,w,h : integer;
s : string;
begin

canvas.font.style := [fsBold];

s := inttostr(item.IndexOf);


w := canvas.TextWidth(s) ;
h:= canvas.TextHeight(s) ;


x := 1+((r.Left + r.Right) - w) DIV 2 ;
y := 1+((r.Top + r.Bottom) - h) DIV 2 ;

canvas.brush.Style := bsClear;

canvas.font.color := clWhite;

canvas.TextRect(r,x,y,s);
end;

Comme pour les TECShapeMarker la propriété Scale permet d'ajuster la taille et ScaleMarkerToZoom est aussi fonctionnelle.

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