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 }