Пример #1
0
  public void draw(MapGraphicContext context) {

    boolean showLabels = true;
    Color gridColor = Color.black;
    Font font = new Font("Times", Font.PLAIN, 8);

    Envelope bounds = context.getViewportModel().getBounds();
    List<Double>[] gridLines = chooseGridLines(bounds);

    ViewportGraphics graphics = context.getGraphics();
    int mapPixelWidth = context.getMapDisplay().getWidth();
    int mapPixelHeight = context.getMapDisplay().getHeight();
    graphics.setColor(gridColor);

    List<Double> xCoords = gridLines[0];
    List<Double> yCoords = gridLines[1];

    // draw vert lines
    for (int i = 0; i < xCoords.size(); i++) {
      double x = xCoords.get(i).doubleValue();

      for (int j = 0; j < yCoords.size() - 1; j++) {

        double y1 = yCoords.get(j).doubleValue();
        Coordinate lastCoord = new Coordinate(x, y1);
        double y2 = yCoords.get(j + 1).doubleValue();
        Coordinate thisCoord = new Coordinate(x, y2);

        Point lastPixel = context.worldToPixel(lastCoord);
        Point thisPixel = context.worldToPixel(thisCoord);

        graphics.drawLine(lastPixel.x, lastPixel.y, thisPixel.x, thisPixel.y);
      }
    }

    // draw horiz lines

    for (int i = 0; i < yCoords.size(); i++) {
      double y = yCoords.get(i).doubleValue();
      for (int j = 0; j < xCoords.size() - 1; j++) {

        double x1 = xCoords.get(j).doubleValue();
        Coordinate lastCoord = new Coordinate(x1, y);
        double x2 = xCoords.get(j + 1).doubleValue();
        Coordinate thisCoord = new Coordinate(x2, y);

        Point lastPixel = context.worldToPixel(lastCoord);
        Point thisPixel = context.worldToPixel(thisCoord);

        graphics.drawLine(lastPixel.x, lastPixel.y, thisPixel.x, thisPixel.y);
      }
    }

    // cover the right side and bottom of map with thin strips
    final int RIGHT_STRIP_WIDTH = (int) (mapPixelWidth * 0.05);
    final int BOTTOM_STRIP_HEIGHT = (int) (mapPixelHeight * 0.05);
    final int GRID_LINE_EXTENSION = (int) (RIGHT_STRIP_WIDTH * 0.1);
    graphics.setColor(Color.white);
    graphics.setBackground(Color.white);

    graphics.clearRect(mapPixelWidth - RIGHT_STRIP_WIDTH, 0, RIGHT_STRIP_WIDTH, mapPixelHeight);
    graphics.clearRect(0, mapPixelHeight - BOTTOM_STRIP_HEIGHT, mapPixelWidth, BOTTOM_STRIP_HEIGHT);

    // outline the map
    graphics.setColor(Color.BLACK);
    graphics.drawRect(
        0, 0, mapPixelWidth - RIGHT_STRIP_WIDTH - 1, mapPixelHeight - BOTTOM_STRIP_HEIGHT - 1);

    // draw labels
    graphics.setFont(font);
    if (showLabels) {
      graphics.setColor(gridColor);
      for (int i = 1; i < yCoords.size() - 1; i++) {
        double y = yCoords.get(i).doubleValue();
        double x = xCoords.get(xCoords.size() - 1).doubleValue();
        Point pixel = context.worldToPixel(new Coordinate(x, y));
        // line is covered by white overlay
        if (pixel.y > mapPixelHeight - BOTTOM_STRIP_HEIGHT) break;
        graphics.drawString(
            (int) (y) + "",
            mapPixelWidth - RIGHT_STRIP_WIDTH + GRID_LINE_EXTENSION,
            pixel.y,
            ViewportGraphics.ALIGN_LEFT,
            ViewportGraphics.ALIGN_MIDDLE);
      }
      for (int i = 1; i < xCoords.size() - 1; i++) {
        double x = xCoords.get(i).doubleValue();
        double y = yCoords.get(yCoords.size() - 1).doubleValue();
        Point pixel = context.worldToPixel(new Coordinate(x, y));
        // line is covered by white overlay
        if (pixel.x > mapPixelWidth - RIGHT_STRIP_WIDTH) break;
        graphics.drawString(
            (int) (x) + "",
            pixel.x,
            mapPixelHeight - BOTTOM_STRIP_HEIGHT + GRID_LINE_EXTENSION,
            ViewportGraphics.ALIGN_MIDDLE,
            ViewportGraphics.ALIGN_TOP);
      }
    } // showlabels
  }