| 81 | /** Clustering tuning. Lou-Ka style per-building geocoding wants |
81 | /** Clustering tuning. Lou-Ka style per-building geocoding wants |
| 82 | * maxZoom 15 so stacked units stay grouped as long as possible. |
82 | * maxZoom 15 so stacked units stay grouped as long as possible. |
| 83 | * `valueClamp` bounds each item's contribution to the bubble mean. */ |
83 | * `valueClamp` bounds each item's contribution to the bubble mean. */ |
| 84 | − cluster?: { maxZoom?: number; radius?: number; valueClamp?: [number, number] }; |
84 | + cluster?: { |
| |
85 | + maxZoom?: number; |
| |
86 | + radius?: number; |
| |
87 | + valueClamp?: [number, number]; |
| |
88 | + /** N minimal d'items pour afficher la valeur sous une bulle. */ |
| |
89 | + valueMinCount?: number; |
| |
90 | + }; |
| 85 | } |
91 | } |
| 86 | |
92 | |
| 87 | const EMPTY_FC: GeoJSON.FeatureCollection = { |
93 | const EMPTY_FC: GeoJSON.FeatureCollection = { |
| 133 | maxZoom: number; |
139 | maxZoom: number; |
| 134 | radius: number; |
140 | radius: number; |
| 135 | valueClamp?: [number, number]; |
141 | valueClamp?: [number, number]; |
| |
142 | + valueMinCount?: number; |
| 136 | }; |
143 | }; |
| 137 | |
144 | |
| 138 | /** Mouvement en cours déclenché par le code (fitBounds, easeTo interne) : |
145 | /** Mouvement en cours déclenché par le code (fitBounds, easeTo interne) : |
| 166 | maxZoom: Math.round(options.cluster?.maxZoom ?? 14), |
173 | maxZoom: Math.round(options.cluster?.maxZoom ?? 14), |
| 167 | radius: options.cluster?.radius ?? 46, |
174 | radius: options.cluster?.radius ?? 46, |
| 168 | valueClamp: options.cluster?.valueClamp, |
175 | valueClamp: options.cluster?.valueClamp, |
| |
176 | + valueMinCount: options.cluster?.valueMinCount, |
| 169 | }; |
177 | }; |
| 170 | |
178 | |
| 171 | this.map = new mapboxgl.Map({ |
179 | this.map = new mapboxgl.Map({ |
| 296 | // hachés par propertiesToGeoJSON) |
304 | // hachés par propertiesToGeoJSON) |
| 297 | }); |
305 | }); |
| 298 | } |
306 | } |
| 299 | − for (const layer of buildPropertyLayers(this.theme, this.sourceId)) { |
307 | + for (const layer of buildPropertyLayers(this.theme, this.sourceId, { |
| |
308 | + valueMinCount: this.clusterOptions.valueMinCount, |
| |
309 | + })) { |
| 300 | if (!map.getLayer(layer.id)) map.addLayer(layer); |
310 | if (!map.getLayer(layer.id)) map.addLayer(layer); |
| 301 | } |
311 | } |
| 302 | this.installDrawLayers(); |
312 | this.installDrawLayers(); |