Skip to main content

Données géographiques

THE HIVE utilise un référentiel Cameroun-first : 10 régions, ~50 villes principales, et les quartiers pour les grandes métropoles.

Modèle

Endpoints

GET /v1/api/regions                       → 10 régions
GET /v1/api/regions/{id}/villes          → villes d'une région
GET /v1/api/villes                        → toutes les villes (~50)
GET /v1/api/villes/{id}                   → détail ville
GET /v1/api/villes/{id}/quartiers        → quartiers d'une ville
GET /v1/api/villes/search?q=dou          → autocomplete
Toutes ces données sont publiques (pas de token nécessaire) et peuvent être cachées 24 h.

Les 10 régions

CodeNomChef-lieuVilles principales
ADAdamaouaNgaoundéréNgaoundéré, Meiganga, Tibati
CECentreYaoundéYaoundé, Mbalmayo, Bafia, Obala
ESEstBertouaBertoua, Batouri, Abong-Mbang
ENExtrême-NordMarouaMaroua, Kousséri, Mokolo
LTLittoralDoualaDouala, Nkongsamba, Édéa
NONordGarouaGaroua, Guider, Figuil
NWNord-OuestBamendaBamenda, Kumbo, Wum
OUOuestBafoussamBafoussam, Dschang, Foumban, Mbouda
SUSudEbolowaEbolowa, Kribi, Sangmélima
SWSud-OuestBuéaBuéa, Limbé, Kumba

Villes principales

Exemple de réponse /regions

[
  { "id": 1, "code": "LT", "nom": "Littoral", "chefLieu": "Douala" },
  { "id": 2, "code": "CE", "nom": "Centre", "chefLieu": "Yaoundé" },
  { "id": 3, "code": "OU", "nom": "Ouest", "chefLieu": "Bafoussam" },
  { "id": 4, "code": "NW", "nom": "Nord-Ouest", "chefLieu": "Bamenda" },
  { "id": 5, "code": "SW", "nom": "Sud-Ouest", "chefLieu": "Buéa" },
  { "id": 6, "code": "NO", "nom": "Nord", "chefLieu": "Garoua" },
  { "id": 7, "code": "EN", "nom": "Extrême-Nord", "chefLieu": "Maroua" },
  { "id": 8, "code": "AD", "nom": "Adamaoua", "chefLieu": "Ngaoundéré" },
  { "id": 9, "code": "SU", "nom": "Sud", "chefLieu": "Ebolowa" },
  { "id": 10, "code": "ES", "nom": "Est", "chefLieu": "Bertoua" }
]

Exemple /villes/{id}

{
  "id": 55,
  "regionId": 1,
  "nom": "Douala",
  "slug": "douala",
  "latitude": 4.0511,
  "longitude": 9.7679,
  "population": 3600000,
  "quartiers": 42
}

Quartiers (grandes villes)

Disponible pour : Douala (~42 quartiers), Yaoundé (~38), Bafoussam (~12), Garoua (~10), Bamenda (~15), Maroua (~8), Buéa (~8). Exemple JSON :
{
  "villeId": 55,
  "quartiers": [
    { "id": 101, "nom": "Akwa", "slug": "akwa" },
    { "id": 102, "nom": "Bonapriso", "slug": "bonapriso" },
    { "id": 103, "nom": "Bonanjo", "slug": "bonanjo" },
    { "id": 104, "nom": "Makepe", "slug": "makepe" }
  ]
}

Autocomplete

GET /v1/api/villes/search?q=dou
{
  "suggestions": [
    { "id": 55, "nom": "Douala", "regionNom": "Littoral" },
    { "id": 72, "nom": "Doumé", "regionNom": "Est" }
  ]
}

Géolocalisation inversée

Pour convertir lat/lng en ville :
POST /v1/api/geo/reverse
{ "latitude": 4.05, "longitude": 9.77 }
{
  "ville": { "id": 55, "nom": "Douala" },
  "quartier": { "id": 101, "nom": "Akwa" },
  "distance": 1.2
}
Implémenté via requête PostGIS ST_DWithin sur index GIST des centroïdes quartier.

Source des données

  • Population : estimations INS 2023
  • Coordonnées : centroïdes OpenStreetMap
  • Quartiers : compilation manuelle + validation locale

Mise à jour

Le référentiel est en lecture seule côté API. Les modifications passent par une migration Flyway (ex. ajout d’une nouvelle ville lors d’un recensement).

Utilisation typique

Voir aussi