- ECMap
- Achat - Contact
- Licence d'utilisation
- Installation
- Positionnement
- Type de carte
- Contrôles
- Localisation
- Places
- Import/Export
- Overlays
- StreetView
- EarthView
- Panoramio
- DistanceMatrix
- Table des illustrations
- Glossaire
La propriété Places de type TECPlaces 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.
Avec l'api Google vous allez utiliser le service Places , avec les autres vous employez MapQuest Xapi API Service qui utilise les données d'OpenStreetMap, cela entraine une petite différence dans la syntaxe de la recherche que nous détaillerons par la suite.
Vous pouvez forcer l'utilisation de Xapi sous Google en fixant à true la propriété UseOpenMapQuestServices
3La propriété OpenMapQuestXapi vous permet d'utiliser un autre serveur Xapi que celui de MapQuest
map.OpenMapQuestXapi := 'http://www.overpass-api.de/api/xapi?';
Le servide Places de google est limité à 20 résultats par requête
4TECPlaces
Lancement d'une recherche, tags contient la requête, la syntaxe varie en fonction de l'api Google ou CloudMade
Liste des tags disponibles sous Google
// map
component ECMap
var Tags:string;
begin
map.Places.Latitude := map.latitude;
map.Places.Longitude:= map.Longitude;
// syntaxe change with
api
case map.MapAPI
of
apigoogle : begin
if ckStore.checked
then
Tags := 'store'
else
if ckRestaurant.checked
then
Tags := 'restaurant'
else
if ckDoctor.checked
then
Tags := 'doctor';
end;
else begin
if ckStore.checked
then
Tags := 'node[shop=*]'
else
if ckRestaurant.checked
then
Tags := 'node[amenity=restaurant]'
else
if ckDoctor.checked
then
Tags := 'node[amenity=doctors]';
end;
end;
// 500 meters
map.Places.Radius := 500;
// run search
map.Places.Search(Tags);
Lorsque la recherche est terminée, l'évènement OnPlacesSearch est déclenché
Chaque lancement de Search efface les résultats d'une précédente recherche
5Proprié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
TECPlacesResults
Cette classe gère la liste des resultats retournés par Search
TECPlaceResult
Classe gérant un résultat correspondant à une recherche
Effectue une requête supplémentaire sur le résultat pour obtenir des détails
Non disponible sous CloudMade
1Lorsque les détails sont disponibles l'évènement OnPlacesDetail est déclenché.
// map
component ECMap
// Event
OnPlacesSearch
procedure
TFDemoLocalise.mapPlacesSearch(Sender: TObject);
var i:integer;
iMarker : integer;
s,icon,types,names: string;
begin
if
map.Places.Status<>'OK' then
exit;
for i:=0 to
map.Places.Results.count-1
do
begin
types:= map.Places.Results[i].result['types'];
names:= map.Places.Results[i].result['name'];
// add a marker for all valid
résult
if
(names<>'')
then
begin
iMarker :=
map.AddMarker(map.Places.Results[i].latitude,map.Places.Results[i].longitude);
if
iMarker>-1 then
begin
// select icon for
types
if pos('restaurant',types)>0 then
icon := 'http://google-maps-icons.googlecode.com/files/restaurant.png'
else
if pos('doctor',types)>0 then
icon := 'http://google-maps-icons.googlecode.com/files/doctor.png'
else
icon := 'http://google-maps-icons.googlecode.com/files/supermarket.png';
map.Markers[iMarker].icon := icon;
map.Markers[iMarker].tag := FStartPlace+i;
map.Markers[iMarker].infoWindow :=
map.InfoWindows.Add(names);
map.InfoWindows[map.Markers[iMarker].infoWindow].Anchor
:= iMarker;
end;
end;
end;
end;
Les résultats ne sont pas conservés lors d'un rechargement de la carte (reLoad, changement d'api ou autre), ils ne sont pas non plus enregistrés lors de la sauvegarde
2Démonstration
le programme DemoLocalise vous montre comment gérer Places