TesselyaTesselya
Vincent Cormouls·

Cas d'usage — Collecte du verre

Équilibrer 10 tournées de collecte du verre à Montpellier sur le volume relevé

Pour répartir la collecte du verre entre 10 équipes, ce n'est pas le nombre de colonnes qu'on équilibre, mais le volume à relever. Le jeu de données ouvert de la métropole mélange tous les flux d'apport volontaire — on en extrait le verre en deux clics, puis on laisse Sectora découper le territoire.

Donnée Montpellier Méditerranée Métropole — PAVAlgorithme Sectora · 10 secteursLecture ~9 min

Dans nos précédents cas d'usage, nous avons découpé Paris en tournées à partir d'un simple comptage de bornes, puis pondéré l'entretien des arbres par leur taille. À chaque fois, la donnée d'entrée était déjà propre : une couche, un seul type d'objet, une charge à modéliser. Le terrain réel est rarement aussi docile.

Le jeu des points d'apport volontaire de Montpellier Méditerranée Métropole rassemble dans un seul fichier tout ce que la collectivité collecte en apport volontaire — verre, biodéchets, emballages, papier. On n'en garde qu'un flux, le verre : un filtre, et c'est réglé. L'intérêt du cas est ailleurs : une fois le verre isolé, on ne l'équilibre pas au nombre de colonnes, mais au volume à relever — la vraie mesure du travail d'une benne. Suivez le déroulé complet, du GeoJSON brut au rapport d'analyse final.

01Le contexte

Une tournée de verre se mesure en volume, pas en nombre de bornes

La métropole publie en open data l'ensemble de ses points d'apport volontaire (PAV) : les colonnes où les habitants déposent eux-mêmes verre, biodéchets, emballages ou papier. Chaque point porte son flux, son type de contenant et son volume. Imaginons le service — la régie métropolitaine ou son prestataire — chargé d'organiser la collecte du verre, réparti en 10 tournées. L'objectif : construire 10 secteurs de collecte qui tiennent la route.

La collecte du verre obéit à des règles qui lui sont propres. C'est une collecte monomatériau : le verre ne partage pas son camion. On le relève à l'aide d'un camion-grue, dont le bras hydraulique soulève la colonne — aérienne, semi-enterrée ou enterrée — et la vide par le fond dans la benne. Chaque levée prend du temps, ce qui fait du nombre de points et de leur dispersion un facteur de durée. Et comme le verre est dense, la benne atteint le plus souvent son poids maximal autorisé (PTAC) bien avant son volume utile : c'est la masse collectée — donc le volume de verre présent dans les colonnes — qui dimensionne réellement la tournée.

Les contraintes classiques de la sectorisation s'appliquent toujours :

  • Équilibre de charge — chaque tournée relève à peu près le même volume de verre, pour qu'aucune benne ne sature pendant qu'une autre roule presque à vide.
  • Compacité — chaque secteur est ramassé géographiquement : entre deux levées, le camion-grue se déplace lentement, et les kilomètres à vide coûtent cher.
  • Continuité — un secteur forme un bloc d'un seul tenant, sans colonne isolée à l'autre bout de la métropole.

Une seule subtilité côté données : le fichier mélange tous les flux d'apport volontaire. On ne gardera que le verre, mais c'est une simple opération de filtrage — rien qui mérite qu'on s'y attarde. Le vrai sujet reste la charge : équilibrer le volume, pas le nombre de colonnes.

À propos de la donnée

Le jeu « Points d'apport volontaire » de Montpellier Méditerranée Métropole est public et téléchargeable en GeoJSON depuis le portail open data de la métropole. Il recense l'ensemble des PAV de la collectivité, tous flux confondus — chaque entrée portant son flux (Verre, Biodéchets, Tri sélectif…) et son volume de contenant. C'est la colonne « Flux » qui nous servira à isoler le verre, et la colonne « volume » à mesurer la charge.

02Pas à pas dans l'interface

Du GeoJSON brut aux 10 tournées équilibrées

Voici le parcours complet, tel qu'on le fait dans Tesselya. L'intérêt n'est pas de montrer « ça marche », mais à quoi ressemble le travail réel — y compris le tri de la donnée et les pièges à éviter en chemin.

  1. Créer le projet et découvrir l'interface

    On se connecte à son compte Tesselya et on crée un nouveau projet. Un projet regroupe les couches de données, les générations et leurs analyses pour un même territoire d'étude. On arrive sur l'espace de travail : la carte occupe la partie droite, les couches et les outils sont à gauche. L'atelier est encore vide — il attend nos données.

    Fig. 1L'espace de travail du projet, avant import.
  2. Importer le GeoJSON et confirmer la projection

    On importe le fichier des points d'apport volontaire téléchargé depuis le portail de la métropole. Tesselya accepte le GeoJSON et les formats géospatiaux courants. Ce fichier ne précise pas sa projection dans ses métadonnées : plutôt que de deviner, l'interface demande de confirmer qu'il s'agit bien de WGS84 — le standard des données web et open data, et c'est bien le cas ici. Si la donnée avait été dans une autre projection, un sélecteur des CRS les plus courants permet de rectifier en un clic.

    Fig. 2Import de la couche et confirmation du CRS.

    Pourquoi cette étape compte

    Une projection mal interprétée place les points à des centaines de kilomètres de leur vraie position. Demander confirmation évite de fausser silencieusement toute l'analyse en aval.

  3. Inspecter les données importées

    L'import terminé, les colonnes apparaissent sur la carte. On manipule, on inspecte, puis on ouvre le tableau d'éléments. Le constat est net : tous les flux sont là — verre, biodéchets, tri sélectif. Le fichier est un inventaire complet de l'apport volontaire de la métropole, pas une couche dédiée au verre.

    Fig. 3Les points importés : tous flux confondus.
  4. Filtrer sur le flux « Verre »

    Tous les types de PAV étant présents, on applique un filtre sur la colonne « Flux » pour n'afficher que les « Verre ». Opération immédiate : on passe de 3 492 points à 1 327. Ne restent que les colonnes à verre.

    Fig. 4Le filtre sur le flux « Verre » : 3 492 → 1 327 points.
  5. Transformer les points en hexagones

    Sectora travaille sur des zones, pas sur des points isolés. On crée donc une couche d'hexagones à partir des colonnes avec l'outil « Points → zones », en réglant des hexagones de 250 m de côté. La métropole couvre un vaste territoire, donc deux options sont décisives :

    • On décoche « Couvrir toute la zone » : inutile de générer des hexagones là où il n'y a aucune colonne.
    • On coche « Générer des îlots » et on fixe une distance de remplissage de 10 km, pour rattacher au maillage le plus de colonnes possible sans semer le territoire d'hexagones vides.

    Le résultat : un maillage qui épouse la zone de travail de la métropole — dense là où sont les colonnes, sans surcharge d'hexagones inutiles ailleurs.

    Fig. 5Maillage hexagonal et génération des îlots sur 10 km.
  6. Définir les agrégations

    On reporte maintenant deux informations sur chaque hexagone :

    • Le nombre de colonnes à verre qu'il contient — agrégation en mode « Dénombrement », sortie nommée nb_points.
    • Le volume total de ces colonnes — agrégation en mode « Somme » sur l'attribut volume (présent dans le GeoJSON), sortie nommée volume.

    Chaque hexagone saura ainsi combien de colonnes il porte, et quel volume de verre s'y relève.

    Fig. 6Les deux attributs reportés sur chaque hexagone.

    Le filtre, une deuxième fois

    Attention à un piège : le filtre posé à l'étape 4 est purement visuel. Il change ce qu'on voit, pas ce que l'agrégation calcule. Il faut donc redéclarer le filtre flux = Verre dans chaque agrégation — sinon les biodéchets et le tri sélectif reviendraient gonfler le nombre de points et le volume des hexagones. Un filtre d'affichage n'est pas un filtre de calcul.

  7. Générer la couche d'hexagones et vérifier

    On lance le calcul. La couche s'affiche, et on contrôle visuellement sur la carte puis dans le tableau d'entités. Les valeurs sont cohérentes : la plupart des hexagones portent entre 0 et 4 colonnes, pour un volume de l'ordre de 3 m³ par contenant en moyenne. Rien d'aberrant — on peut passer à Sectora.

    Fig. 7Densité lisible d'un coup d'œil, valeurs contrôlées dans le tableau.
  8. Choisir Sectora et définir la charge

    On sélectionne Sectora dans la liste des algorithmes. La couche d'entrée est présélectionnée automatiquement : la couche d'hexagones est la seule du projet compatible avec une sectorisation. Reste à définir la charge — la grandeur à équilibrer entre les secteurs. Ici, pas de pondération savante : on reprend directement le volume. C'est lui qui dimensionne la tournée, puisque c'est la quantité de verre à relever qui remplit la benne.

    Fig. 8La charge à équilibrer : le volume des colonnes.

    Compter ou peser ?

    Équilibrer le nombre de colonnes donnerait autant de poids à une petite borne aérienne presque vide qu'à une colonne enterrée de plusieurs mètres cubes. En équilibrant le volume, on répartit le verre réellement collecté — pas un simple comptage de points.

  9. Régler les autres paramètres

    On finalise le découpage :

    • 10 secteurs, une tournée chacun.
    • Compacité visée à 80 %, pour des secteurs ramassés.
    • Tolérance de 10 % d'écart entre secteurs.

    On configure enfin les agrégations de la couche de sortie, pour retrouver les chiffres utiles par secteur — très simple ici, on reprend les deux attributs créés juste avant :

    • Somme de nb_points — le nombre de colonnes par tournée.
    • Somme de volume — le volume total relevé par tournée.
    Fig. 9Nombre de secteurs, compacité, tolérance et agrégations de sortie.
  10. Lancer la génération et analyser

    On lance le calcul. Quelques secondes plus tard, le résultat s'affiche. Inspection visuelle sur la carte : les 10 secteurs sont cohérents et lisibles — le découpage tient debout.

    Fig. 10Le découpage final : 10 secteurs de tournée.

    On ouvre ensuite l'analyse d'équilibrage. Le tableau de bord donne les chiffres clés : une charge totale de 4 175 m³ répartie sur 10 secteurs, des tournées comprises entre 334 et 501 m³, pour un écart-type de 68,95.

    Fig. 11Le tableau de bord d'équilibrage des secteurs.
  11. Exporter le rapport

    Reste à partager le travail : on télécharge le rapport PDF mis en page, qui rassemble la carte du découpage, l'analyse d'équilibrage, la qualité géométrique et l'annexe technique détaillée — prêt à transmettre au service de collecte ou à joindre à une réponse d'appel d'offres.

    Fig. 12Le rapport exporté : synthèse et carte du découpage.
    Fig. 13Le rapport exporté : l'aperçu zone par zone.

03Analyse du résultat

10 tournées de verre, un équilibre honnête

Charge totale

4 175

volume de verre

Secteurs

10

une tournée chacun

Charge moyenne / secteur

418

de 334 à 501

Coefficient de variation

16,5%

déséquilibre modéré

Le découpage répartit 4 175 m³ de volume de verre sur 10 tournées. Le secteur le plus chargé (secteur 6) pèse 501 m³, le moins chargé (secteur 3) 334 m³, autour d'une moyenne de 418 m³ — soit un écart maximal de 20 % de part et d'autre de la cible. Le rapport qualifie l'équilibre de « modéré », et c'est une lecture juste : le coefficient de variation s'établit à 16,5 %, au-dessus des 12-13 % d'un découpage très serré.

Il faut savoir que les paramètres qu'on a réglés — 10 % de tolérance, 80 % de compacité — sont pour Sectora des objectifs visés, pas des contraintes inviolables. Le solveur arbitre en permanence entre l'équilibre des charges et la cohérence géographique des secteurs ; quand les deux entrent en conflit, il peut s'écarter d'une cible pour préserver des tournées tenables. Ici, il s'arrête à 20 % d'écart : c'est le compromis qu'il a jugé le meilleur, pas un échec à atteindre 10 %.

Une bonne part de cette marge tient à la nature de la charge : le volume est une grandeur « en blocs ». Une colonne enterrée de plusieurs mètres cubes est indivisible — le solveur ne peut pas la couper en deux pour ajuster une tournée. Quand quelques hexagones concentrent de gros volumes, l'algorithme ne peut qu'assembler ces paliers, jamais les fractionner. La finesse du maillage joue d'ailleurs ici : avec des hexagones plus petits que 250 m, moins de colonnes tomberaient dans la même maille, ce qui réduirait le risque d'hexagones très chargés et permettrait sans doute un équilibrage plus pertinent. Reste que ±20 % autour de la moyenne demeure exploitable sur le terrain : aucune benne ne déborde, et le poids collecté reste sous le PTAC avec une marge confortable.

Un mot sur ces volumes : une charge de 334 à 501 m³ par secteur dépasse largement la capacité d'un camion de collecte du verre, qui avoisine les 25 m³. C'est volontaire — ici, un secteur n'est pas une benne, mais un territoire de tournée à relever sur plusieurs passages, étalés sur plusieurs jours. L'autre option serait de découper en bien plus de 10 secteurs, jusqu'à ce que chaque charge finale tienne dans un seul camion ; mais cela démultiplierait le nombre de secteurs à générer et à gérer. Pour cette démonstration, on s'en tient à 10 zones équilibrées, chacune correspondant à une charge de travail répartie dans le temps.

Tous les secteurs sont connexes — pas une seule rupture de contiguïté sur 2 325 hexagones — et le calcul complet a tourné en environ 24 secondes (dont 19 s pour le solveur AZP lui-même). La compacité moyenne recule en revanche, de 0,278 à 0,210 : c'est la contrepartie d'un territoire de colonnes très étalé et d'une charge en volume difficile à lisser. Sur un semis de points aussi dispersé qu'une métropole entière, ce niveau reste cohérent, et la contiguïté parfaite est l'essentiel pour des tournées réalistes.

Le détail par secteur, repris de l'annexe technique du rapport :

SecteurHexagonesCharge (m³)Écart moy.Compacité
Z0229423+60,2161
Z1331335−830,3058
Z2316470+530,2132
Z3403334−840,1888
Z4229359−590,2115
Z5291417−10,1570
Z6121501+840,3040
Z7220335−830,1206
Z877500+830,2078
Z9108501+840,1700

Un détail du tableau résume tout l'intérêt d'équilibrer le volume plutôt que les points. Le secteur 8 ne compte que 77 hexagones mais porte 500 m³ ; le secteur 3 en compte 403 pour seulement 334 m³. Autrement dit, une poignée d'hexagones du cœur urbain — là où se concentrent les grosses colonnes enterrées — pèse plus lourd qu'un vaste secteur périphérique parsemé de petites bornes aériennes. Un découpage au simple nombre de colonnes aurait donné à ce secteur 8 une tournée minuscule, alors qu'il relève autant de verre que les autres. C'est exactement ce que la charge en volume permet de capturer.

Les colonnes à verre de Montpellier n'étaient qu'un prétexte. Partout où une donnée publique mélange plusieurs natures d'objets, et où la charge tient au volume, au poids ou à la durée plutôt qu'au simple nombre — collecte multi-flux, parcs d'équipements hétérogènes, points de service de tailles inégales — la méthode est la même : on isole le bon sous-ensemble, on choisit la bonne mesure de charge, puis on laisse Sectora l'équilibrer et le justifier, chiffres à l'appui.

Pour aller plus loin — la collecte en temps réel

La métropole publie aussi une API qui expose en temps réel le taux de remplissage de chaque colonne. Notre exemple s'arrête à un volume installé, statique. Mais rien n'empêcherait — selon les contraintes d'organisation du service — de rejouer le découpage au jour le jour, en pondérant la charge par le remplissage réel plutôt que par la capacité des contenants. Les tournées suivraient alors le verre effectivement présent, et non plus seulement les colonnes en place.

Vos données, votre charge

Un fichier qui mélange plusieurs flux, une charge qui dépend du volume ou du poids ? Importez votre couche dans Tesselya, isolez votre sous-ensemble et générez votre premier découpage Sectora.