Localisation & Cartographie
NGZ Ads intègre un système complet de géolocalisation : saisie de l'adresse lors du dépôt d'une annonce, recherche par ville, filtre dans la barre latérale et vue carte sur la page des annonces.
Fournisseur de carte
Deux fournisseurs sont disponibles, configurables depuis Administration → Paramètres → Map Provider.
| Fournisseur | Avantages | Prérequis |
|---|---|---|
| OpenStreetMap (par défaut) | Gratuit, aucune clé API, données mondiales | Aucun |
| Google Maps | Autocomplete précis, tuiles HD, Street View | Clé API Google Cloud |
Le choix du fournisseur est global : il s'applique au sélecteur d'adresse lors du dépôt d'une annonce, à l'édition du profil utilisateur et à la vue carte des annonces.
Configurer OpenStreetMap
Aucune action requise. OpenStreetMap est actif par défaut. La géocodification utilise l'API publique Nominatim et les tuiles sont servies par les serveurs OpenStreetMap.
Nominatim est soumis à une politique d'utilisation acceptable. Pour un usage intensif (> 1 requête/s), envisagez un serveur Nominatim auto-hébergé ou un service tiers compatible.
Configurer Google Maps
1. Créer une clé API Google Maps
- Connectez-vous à la Google Cloud Console.
- Créez un projet (ou sélectionnez-en un existant).
- Accédez à API et services → Bibliothèque et activez :
- Accédez à API et services → Identifiants et créez une clé API.
- Dans les Restrictions de la clé, limitez-la à votre domaine (ex :
https://monsite.com/*) pour éviter tout usage non autorisé.
2. Saisir la clé dans les paramètres
Dans Administration → Paramètres → Map Provider :
- Sélectionnez Google Maps.
- Le champ Clé API Google Maps apparaît.
- Collez votre clé (format
AIza...). - Cliquez sur Enregistrer.
La clé est stockée dans
config/settings.phpet injectée côté client. Ne partagez jamais ce fichier publiquement.
Saisie de la localisation lors du dépôt d'une annonce
Lors du dépôt ou de l'édition d'une annonce, le champ Localisation offre :
- Autocomplete : saisissez au moins 3 caractères pour voir les suggestions de villes. Les résultats proviennent de Nominatim (OpenStreetMap) ou de l'API Places (Google Maps).
- Carte interactive : cliquez sur la carte pour placer le marqueur ; un marqueur est glissable pour affiner la position.
- Géolocalisation : le bouton 🎯 utilise l'API HTML5
navigator.geolocationpour détecter automatiquement la position du navigateur.
Les données enregistrées pour chaque annonce sont :
| Colonne DB | Description | Exemple |
|---|---|---|
location | Libellé affiché (ville + pays) | Paris, France |
city | Ville extraite de la réponse | Paris |
postcode | Code postal | 75001 |
country | Code pays ISO (2 lettres) | FR |
lat | Latitude décimale (7 décimales) | 48.8566700 |
lon | Longitude décimale (7 décimales) | 2.3514992 |
Seules les annonces ayant des coordonnées
lat/lonapparaissent sur la vue carte.
Recherche par ville sur la page d'accueil
La barre de recherche principale (hero) comporte un champ Ville entre le champ de mots-clés et le sélecteur de catégorie.
- Saisissez un nom de ville partiel (ex :
Paris,Lyon,Mars…). - La recherche est soumise vers la page des annonces avec le paramètre
?city=valeur. - La correspondance est insensible à la casse et partielle (type
LIKE %valeur%).
Filtre par ville dans la barre latérale
Sur la page des annonces (/annonces), la barre latérale de filtres propose un champ Ville.
- Il prend la valeur du paramètre GET
cityet la transmet à la requête SQL. - Compatible avec les autres filtres (catégorie, prix, type de prix).
- Les annonces sans ville renseignée ne correspondent pas à un filtre ville actif.
Vue carte des annonces
La page des annonces propose trois modes d'affichage via les boutons en haut à droite de la liste :
| Bouton | Icône | Description |
|---|---|---|
| Grille | ⊞ | Cartes en grille (défaut) |
| Liste | ☰ | Cartes en liste pleine largeur |
| Carte | 🗺 | Grande carte avec marqueurs groupés |
Fonctionnement de la vue carte
- Au premier clic sur le bouton Carte, les annonces géolocalisées correspondant aux filtres actifs sont chargées via l'API (
?map_mode=1). - Jusqu'à 500 annonces sont affichées simultanément.
- Les marqueurs proches sont regroupés automatiquement (clustering) :
- Un clic sur un marqueur (ou un cluster dézoomé) ouvre une popup avec :
La vue carte n'est pas paginée : elle charge en une seule requête toutes les annonces géolocalisées correspondant aux filtres courants (hors
pageetsort).
Persistance de la vue
Le dernier mode d'affichage choisi (grille, liste ou carte) est mémorisé dans localStorage sous la clé adsView. Il est restauré automatiquement à chaque visite de la page des annonces.
Données de localisation dans l'API
L'endpoint GET /api/ads accepte les paramètres de filtrage suivants :
| Paramètre | Type | Description |
|---|---|---|
city | string | Filtre partiel sur la colonne city |
country | string | Filtre exact sur la colonne country (code ISO) |
map_mode | bool | 1 pour retourner jusqu'à 500 annonces géolocalisées sans pagination |
Les champs lat, lon et city sont inclus dans la réponse de chaque annonce.
Exemple — annonces géolocalisées à Paris
GET /api/ads?city=Paris&map_mode=1
Réponse :
{
"success": true,
"data": {
"ads": [
{
"id": 42,
"title": "Vélo de course carbone",
"slug": "velo-de-course-carbone",
"price": 850,
"currency": "EUR",
"city": "Paris",
"lat": 48.8566700,
"lon": 2.3514992,
"primary_image": "https://..."
}
]
}
}
Bonnes pratiques
- Encouragez la saisie de la localisation : les annonces sans coordonnées n'apparaissent pas sur la vue carte, ce qui réduit leur visibilité.
- Localisation héritée : lors du dépôt d'une première annonce, le champ Localisation est pré-rempli avec la ville du profil utilisateur si elle est renseignée.
- Performances : pour les sites avec un très grand nombre d'annonces géolocalisées (> 10 000), envisagez d'ajouter un index spatial sur les colonnes
latetlon:
ALTER TABLE ads ADD INDEX idx_lat_lon (lat, lon);
- Quota Google Maps : l'API Places est facturée après 100 $ de crédit mensuel gratuit. Activez les alertes de budget dans Google Cloud pour éviter les mauvaises surprises.