@@ -13,8 +13,8 @@ use vt_optimizer::mbtiles::{
1313} ;
1414use vt_optimizer:: output:: {
1515 format_bytes, format_histogram_table, format_histograms_by_zoom_section,
16- format_metadata_section, format_zoom_table, ndjson_lines, pad_left, pad_right ,
17- resolve_output_format,
16+ format_metadata_section, format_top_tiles_lines , format_zoom_table, ndjson_lines, pad_left,
17+ pad_right , resolve_output_format,
1818} ;
1919use vt_optimizer:: pmtiles:: {
2020 inspect_pmtiles_with_options, mbtiles_to_pmtiles, pmtiles_to_mbtiles, prune_pmtiles_layer_only,
@@ -220,6 +220,8 @@ fn main() -> Result<()> {
220220 stats : Some ( "tile_summary" . to_string ( ) ) ,
221221 no_progress : false ,
222222 zoom : None ,
223+ x : None ,
224+ y : None ,
223225 bucket : None ,
224226 tile : Some ( format ! ( "{}/{}/{}" , z, x, y) ) ,
225227 summary : true ,
@@ -247,6 +249,8 @@ fn main() -> Result<()> {
247249 stats : None ,
248250 no_progress : false ,
249251 zoom : None ,
252+ x : None ,
253+ y : None ,
250254 bucket : None ,
251255 tile : None ,
252256 summary : false ,
@@ -284,14 +288,25 @@ fn run_inspect(args: vt_optimizer::cli::InspectArgs) -> Result<()> {
284288 Some ( value) => Some ( parse_sample_spec ( value) ?) ,
285289 None => None ,
286290 } ;
287- let tile = match args. tile . as_deref ( ) {
291+ let mut tile = match args. tile . as_deref ( ) {
288292 Some ( value) => Some ( parse_tile_spec ( value) ?) ,
289293 None => None ,
290294 } ;
291- if args. summary && tile. is_none ( ) {
295+ if tile. is_some ( ) && ( args. x . is_some ( ) || args. y . is_some ( ) ) {
296+ anyhow:: bail!( "--tile cannot be combined with -x/-y" ) ;
297+ }
298+ if tile. is_none ( ) {
299+ if let ( Some ( z) , Some ( x) , Some ( y) ) = ( args. zoom , args. x , args. y ) {
300+ tile = Some ( vt_optimizer:: mbtiles:: TileCoord { zoom : z, x, y } ) ;
301+ } else if args. x . is_some ( ) || args. y . is_some ( ) {
302+ anyhow:: bail!( "-x/-y require -z/--zoom" ) ;
303+ }
304+ }
305+ let summary = args. summary || ( tile. is_some ( ) && args. tile . is_none ( ) && args. x . is_some ( ) ) ;
306+ if summary && tile. is_none ( ) {
292307 anyhow:: bail!( "--summary requires --tile z/x/y" ) ;
293308 }
294- if tile. is_some ( ) && !args . summary {
309+ if tile. is_some ( ) && !summary {
295310 anyhow:: bail!( "--tile requires --summary" ) ;
296311 }
297312 let mut layers = args. layers . clone ( ) ;
@@ -307,7 +322,7 @@ fn run_inspect(args: vt_optimizer::cli::InspectArgs) -> Result<()> {
307322 } else {
308323 args. topn
309324 } ;
310- let ( sample, topn, histogram_buckets) = if args. fast {
325+ let ( sample, mut topn, histogram_buckets) = if args. fast {
311326 (
312327 Some ( vt_optimizer:: mbtiles:: SampleSpec :: Ratio ( 0.1 ) ) ,
313328 Some ( 5 ) ,
@@ -316,16 +331,20 @@ fn run_inspect(args: vt_optimizer::cli::InspectArgs) -> Result<()> {
316331 } else {
317332 ( sample, topn, args. histogram_buckets as usize )
318333 } ;
334+ if output == ReportFormat :: Text && topn. unwrap_or ( 0 ) == 0 {
335+ topn = Some ( 10 ) ;
336+ }
337+ let topn_value = topn. unwrap_or ( 0 ) as usize ;
319338 let options = InspectOptions {
320339 sample,
321- topn : topn . unwrap_or ( 0 ) as usize ,
340+ topn : topn_value ,
322341 histogram_buckets,
323342 no_progress : args. no_progress ,
324343 max_tile_bytes : args. max_tile_bytes ,
325344 zoom : args. zoom ,
326345 bucket : args. bucket ,
327346 tile,
328- summary : args . summary ,
347+ summary,
329348 layers,
330349 recommend : args. recommend ,
331350 include_layer_list : output == ReportFormat :: Text
@@ -390,26 +409,28 @@ fn run_inspect(args: vt_optimizer::cli::InspectArgs) -> Result<()> {
390409 let include_histogram_by_zoom = args. stats . is_some ( )
391410 && stats_filter. includes ( vt_optimizer:: output:: StatsSection :: HistogramByZoom ) ;
392411 let include_layers = stats_filter. includes ( vt_optimizer:: output:: StatsSection :: Layers ) ;
412+ let hide_tile_summary_sections = args. x . is_some ( ) && args. y . is_some ( ) ;
393413 let include_recommendations =
394414 stats_filter. includes ( vt_optimizer:: output:: StatsSection :: Recommendations ) ;
395415 let include_bucket = stats_filter. includes ( vt_optimizer:: output:: StatsSection :: Bucket ) ;
396416 let include_bucket_tiles =
397417 stats_filter. includes ( vt_optimizer:: output:: StatsSection :: BucketTiles ) ;
398- let include_top_tiles =
399- stats_filter. includes ( vt_optimizer:: output:: StatsSection :: TopTiles ) ;
418+ let include_top_tiles = stats_filter
419+ . includes ( vt_optimizer:: output:: StatsSection :: TopTiles )
420+ && !hide_tile_summary_sections;
400421 let include_top_tile_summaries =
401422 stats_filter. includes ( vt_optimizer:: output:: StatsSection :: TopTileSummaries ) ;
402423 let include_tile_summary =
403424 stats_filter. includes ( vt_optimizer:: output:: StatsSection :: TileSummary ) ;
404425 println ! ( "{}" , format_inspect_title( & args. input) ) ;
405426 println ! ( ) ;
406- if include_metadata && !report. metadata . is_empty ( ) {
427+ if include_metadata && !hide_tile_summary_sections && ! report. metadata . is_empty ( ) {
407428 for line in format_metadata_section ( & report. metadata ) {
408429 println ! ( "{}" , emphasize_section_heading( & line) ) ;
409430 }
410431 println ! ( ) ;
411432 }
412- if include_summary {
433+ if include_summary && !hide_tile_summary_sections {
413434 println ! ( "{}" , emphasize_section_heading( "## Summary" ) ) ;
414435 println ! (
415436 "{}" ,
@@ -490,21 +511,24 @@ fn run_inspect(args: vt_optimizer::cli::InspectArgs) -> Result<()> {
490511 ) ;
491512 }
492513 }
493- if include_histogram && !report. histogram . is_empty ( ) {
514+ if include_histogram && !hide_tile_summary_sections && ! report. histogram . is_empty ( ) {
494515 println ! ( ) ;
495516 println ! ( "{}" , emphasize_section_heading( "## Histogram" ) ) ;
496517 for line in format_histogram_table ( & report. histogram ) {
497518 println ! ( "{}" , emphasize_table_header( & line) ) ;
498519 }
499520 }
500- if include_histogram_by_zoom && !report. histograms_by_zoom . is_empty ( ) {
521+ if include_histogram_by_zoom
522+ && !hide_tile_summary_sections
523+ && !report. histograms_by_zoom . is_empty ( )
524+ {
501525 println ! ( ) ;
502526 for line in format_histograms_by_zoom_section ( & report. histograms_by_zoom ) {
503527 let line = emphasize_section_heading ( & line) ;
504528 println ! ( "{}" , emphasize_table_header( & line) ) ;
505529 }
506530 }
507- if include_layers && !report. file_layers . is_empty ( ) {
531+ if include_layers && !hide_tile_summary_sections && ! report. file_layers . is_empty ( ) {
508532 println ! ( ) ;
509533 println ! ( "{}" , emphasize_section_heading( "## Layers" ) ) ;
510534 let name_width = report
@@ -600,12 +624,12 @@ fn run_inspect(args: vt_optimizer::cli::InspectArgs) -> Result<()> {
600624 }
601625 if include_top_tiles && !report. top_tiles . is_empty ( ) {
602626 println ! ( ) ;
603- println ! ( "{}" , emphasize_section_heading ( "## Top Tiles" ) ) ;
604- for tile in report . top_tiles . iter ( ) {
605- println ! (
606- "- z={}: x={} y={} bytes={}" ,
607- tile . zoom , tile . x , tile . y , tile . bytes
608- ) ;
627+ println ! (
628+ "{}" ,
629+ emphasize_section_heading ( & format! ( "## Top {} big tiles" , topn_value ) )
630+ ) ;
631+ for line in format_top_tiles_lines ( & report . top_tiles ) {
632+ println ! ( "{}" , line ) ;
609633 }
610634 }
611635 if include_top_tile_summaries && !report. top_tile_summaries . is_empty ( ) {
0 commit comments