code: package com.graphhopper.matching.cli;
  
  import com.fasterxml.jackson.dataformat.xml.XmlMapper;
  import com.graphhopper.matching.Observation;
  import com.graphhopper.matching.gpx.Gpx;
  import com.graphhopper.matching.gpx.Trk;
  import com.graphhopper.util.shapes.BBox;
  import io.dropwizard.cli.Command;
  import io.dropwizard.setup.Bootstrap;
  import net.sourceforge.argparse4j.inf.Namespace;
  import net.sourceforge.argparse4j.inf.Subparser;
  
  import java.io.File;
  import java.io.IOException;
  import java.util.List;
  
  public class GetBoundsCommand extends Command {
  
      public GetBoundsCommand() {
          super("getbounds", "");
      }
  
      @Override
      public void configure(Subparser subparser) {
          subparser.addArgument("gpx")
              .type(File.class)
              .required(true)
              .nargs("+")
              .help("GPX file");
      }
  
      @Override
      public void run(Bootstrap bootstrap, Namespace args) {
          XmlMapper xmlMapper = new XmlMapper();
          BBox bbox = BBox.createInverse(false);
          for (File gpxFile : args.<File>getList("gpx")) {
              try {
                  Gpx gpx = xmlMapper.readValue(gpxFile, Gpx.class);
                  for (Trk trk : gpx.trk) {
                      List<Observation> inputGPXEntries = trk.getEntries();
                      for (Observation entry : inputGPXEntries) {
                          bbox.update(entry.getPoint().getLat(), entry.getPoint().getLon());
                      }
                  }
              } catch (IOException e) {
                  throw new RuntimeException(e);
              }
          }
  
          System.out.println("bounds: " + bbox);
  
          // show download only for small areas
          if (bbox.maxLat - bbox.minLat < 0.1 && bbox.maxLon - bbox.minLon < 0.1) {
              double delta = 0.01;
              System.out.println("Get small areas via\n"
                      + "wget -O extract.osm 'http://overpass-api.de/api/map?bbox="
                      + (bbox.minLon - delta) + "," + (bbox.minLat - delta) + ","
                      + (bbox.maxLon + delta) + "," + (bbox.maxLat + delta) + "'");
          }
      }
  }
  