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

Localisation

Vous êtes ici :TECMap

Clefs pour les API

Par défaut TECNativeMap utilise MapQuest avec une clef pour le plan gratuit limité à 15000 transactions par mois.

Si vous souhaitez utiliser ces services vous devez obtenir une clef auprès de MapQuest

Faites de même pour utiliser les services de MapZen et MapBox.

Mode hors-ligne

Si vous indiquez un répertoire dans la propriété LocalCache, toutes vos données de géolocalisation seront mise en cache et pourront être réutilisées en mode hors-ligne.

Format de l'adresse

vous bénéficiez des services de géolocalisation au travers de la propriété GeoLocalise de type TECGelocalise

La propriété Address vous donne l'adresse du centre de la carte, elle est de type string et est accessible en lecture/écriture

Pour rechercher une adresse vous pouvez utiliser un format libre du genre "adresse,ville, code postal".

TECGeolocalise utilise les services d'OpenStreetMap et d'OpenMapQuest

Vous pouvez aussi utiliser ArcGis au travers des fonctions
function TECGeolocalise.ArcGisReverse(const Lat,Lng:double):string;
function TECGeolocalise.ArcGisFind(const data:string;var Lat,Lng:double):boolean;

Geolocalisation

Pour obtenir l'adresse d'un point précis vous avez la fonction GetAddressFromLatLng(const dLatitude,dLongitude:double):string;

Vous pouvez obtenir les diverses parties de l'adresse en utilisant la propriété TECGeolocalise.ReverseResults:TStringList

adr := map.GetAddressFromLatLng(Latitude,Longitude) ;

// now ReverseResults contains tags in nominatim <addressparts>

country := map.Geolocalise.ReverseResults['country'];
road := map.Geolocalise.ReverseResults['road'];
postcode:= map.Geolocalise.ReverseResults['postcode'];
...

Vous pouvez obtenir les coordonnées d'une adresse avec la fonction GetLatLngFromAddress(const sAddress:string;var dLatitude,dLongitude:double):boolean;

En attribuant une valeur à la propriété Address vous allez changer la position du centre de votre carte pour la faire correspondre à l'adresse indiquée


Places

TECGeolocalise vous permet d'effectuer des recherches sur des lieux spécifiques dans une zone données, par exemple trouver des restaurants dans un rayon de 500 mètres.

C'est Overpass-api qui utilise les données d'OpenStreetMap qui est utilisé

La propriété TECGeolocalise.Places.XapiServer vous permet d'utiliser un autre serveur Xapi que celui de MapQuest

// Delphi map component ECMap
// use overpass-api.de

map.GeoLocalise.Places.XapiServer := 'http://www.overpass-api.de/api/xapi?';
procedure Search( Tags:string);

Lancement d'une recherche, tags contient la requête

Documentation Xapi

// Delphi map component ECMap
Map.geolocalise.OnSearch := mapPlacesSearch;

Map.GeoLocalise.Places.latitude := map.latitude;
Map.GeoLocalise.Places.longitude := map.longitude;

Tags := 'node[amenity=restaurant]';


// 500 meters
Map.GEoLocalise.Places.radius := 500;

Map.GEoLocalise.Places.Search(Tags);

...

procedure TForm.mapPlacesSearch(sender: TObject);
var
i, max: Integer;
types, names: string;
begin

if map.GEoLocalise.Places.Status <> 'OK' then
exit;

max := map.GEoLocalise.Places.results.count - 1;

for i := 0 to max do
begin

types := map.GEoLocalise.Places.results[i].result['types'];
names := map.GEoLocalise.Places.results[i].result['name'];
end;

end;


Lorsque la recherche est terminée, l'évènement Geolocalise.OnSearch est déclenché

Chaque lancement de Search efface les résultats d'une précédente recherche

26
property Adress : string read FAdress write FAdress;
Propriété en lecture/écriture qui indique le point central de la zone de recherche, elle a la priorité sur les propriétés Latitude et Longitude
property Status : string;

Propriété en lecture seule qui retourne une string indiquant le status de la recherche, 'OK' si tout c'est bien passé

Le status est consultable dans l'évènement OnPlacesSearch

property ItemDetail : integer;
Propriété en lecture seule qui contient l'index du résultat dont on cherche les détails supplémentaires
property Latitude : double;
Propriété en lecture/écriture qui indique la latitude du point central de la zone de recherche, cela invalide le contenu de la propriété Adress
property Longitude: double;
Propriété en lecture/écriture qui indique la longitude du point central de la zone de recherche, cela invalide le contenu de la propriété Adress
property Radius : integer;
Propriété en lecture/écriture qui indique le rayon de recherche en mètres
property maxResult : integer;
limite le nombre de résultat pour une recherche dans les données d'OpenStreetMap
property Searching: boolean;
Propriété en lecture seule qui indique si une recherche est en cours
property Results:TECPlaceResults;
Liste des resultats, l'événement Geolocalise.OnSearch est déclenché lorsque les résultats sont disponibles

TECPlacesResults

Cette classe gère la liste des resultats retournés par Search

procedure Clear;
Efface l'ensemble des résultats
function Count:integer;
Retourne le nombre de résultat correspondant à la requête
procedure Delete(const index:integer);
Efface le résultat dont on passe l'index
property Result[index:integer]:TECPlaceResult
Tableau permettant l'accès aux résultats, c'est la propriété par défaut donc vous pouvez y accéder directement par map.Places.Results[index] au lieu de map.Places.Results.Result[index]

TECPlaceResult

Classe gérant un résultat correspondant à une recherche

procedure getDetails;

Effectue une requête supplémentaire sur le résultat pour obtenir des détails

Lorsque les détails sont disponibles l'évènement OnPlacesDetail est déclenché.

property Result[const key:string]:string;
Retourne la valeur de la clef que l'on passe en paramètre
property Detail[const Key:string]:string;
Retourne la valeur de la clef que l'on passe en paramètre pour les détails
property NameResult[const index:integer]:string;
Retourne la clef d'un résultat en fonction de son index
property NameDetail[const index:integer]:string;
Retourne la clef d'un détail en fonction de son index
property CountResult:integer;
Retourne le nombre d'élément (clef=valeur) d'un résultat
property CountDetail:integer read getCountDetail;
Retourne le nombre d'élément (clef=valeur) d'un détail
property Latitude : double;
Latitude du résultat
property Longitude: double;
Longitude du résultat
property RawResult : string;
Retourne l'ensemble des éléments du resultat sous la forme d'une chaîne constituée de lignes clef=valeur
property RawDetail : string;
Retourne l'ensemble des éléments du détail sous la forme d'une chaîne constituée de lignes clef=valeur

DemonNativeLocalise

le programme DemoNativeLocalise vous montre comment gérer Places

Fig. 81 DemoLocalise
Fig. 81 DemoLocalise

Geofences

Geofence désigne une zone virtuelle qui déclenche une alerte lorsqu'on y entre ou qu'on en sort.

function Add(const Lat,Lng:double;const RadiusMeter:integer;const Name:string=''):integer;overload;

Ajoute une zone circulaire définie par son point central et son rayon en mètres.

map.geofences.add(43.231572,0.080853,50);
function Add(const dLatLngs: array of double;const Name:string=''):integer;overload;

Ajoute une zone polygonale définie par un tableau contenant les divers points

map.geofences.add([lat1,lng1,lat2,lng2,lat3,lng3],"triangle");
function Add(const Polygone:TECShapePolygone;const Name:string=''):integer;overload;

Ajoute une zone polygonale définie à partir d'un polygone

map.geofences.add(map.shapes.polygones[0]);
procedure Delete(index:integer);
Supprimer une geofence
function Count:integer;
Retourne le nombre de geofences
function IndexOf(value:TECBaseGeofence):integer;
Retourne l'index de la geofence
procedure Clear;
Efface toute les geofences
property Active : boolean ;
Activer ou non la détection des geofences
property toTxt:string ;

Importer / exporter les geofences sous forme textuelle

Par défaut lorsque vous sauvegardez la carte dans le format texte les geofences sont enregistrés et peuvent être rechargés

property Geofence[index : integer]:TECBaseGeofence ;
Retourne une geofence

TECBaseGeofence

property TECBaseGeofence.Name:string ;
Nom de la geofence
property TECBaseGeofence.Active : boolean
Activer ou non la geofence (active par défaut)
property TECBaseGeofence.ActiveDuration : integer

Temps maximal d'activation (millisecondes) 0 pour un temps infini (0 par défaut)

// Activate for 3 seconds
map.geofences.geofence[0].ActiveDuration := 3000;
property Color : TColor ;
Couleur de la zone
property HoverColor : TColor ;
Couleur de la zone lors du survol par la souris
property Item : TObject;
Vous pouvez utiliser cette propriété pour stocker vos données
property Tag : integer;
Vous pouvez utiliser cette propriété pour stocker vos données
property TECBaseGeofence.Shapes : TECShapesList
Liste des éléments qui sont actuellement dans la geofence

Événements Geofences

Pour réagir branchez-vous sur les événements OnEnterGeofence et OnLeaveGeofence de TECNativeMap.

...
map.OnEnterGeofence := mapEnterGeofence;
map.OnLeaveGeofence := mapLeaveGeofence;
...
procedure TForm1.mapEnterGeofence(sender: TObject; const Geofence: TECBaseGeofence; const item: TECShape);
begin
caption := 'item '+inttostr(item.id)+' enter in '+Geofence.Name;
end;

procedure TForm1.mapLeaveGeofence(sender: TObject; const Geofence: TECBaseGeofence; const item: TECShape);
begin
caption := 'item '+inttostr(item.id)+' leave '+Geofence.Name;
end;

La détection se fait lorsqu'un shape est déplacé, le test est effectué sur le point de localisation (sa latitude et sa longitude) pas sur la surface réelle de l'objet.

Fig. 82 Demo Geofences

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