ui/src/main/java/ucar/nc2/ui/geoloc/NavigatedPanel.java
public Graphics2D getBufferedImageGraphics() {
    if (bImage == null)
      return null;
    Graphics2D g2 = bImage.createGraphics();

    // set clipping rectangle into boundingBox
    navigate.getMapArea( boundingBox);
    if (debugBB) System.out.println(" getBufferedImageGraphics BB = "+ boundingBox);

    // set graphics attributes
    g2.setTransform( navigate.getTransform());
    g2.setStroke(new BasicStroke(0.0f));      // default stroke size is one pixel
    g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
    Rectangle2D hr = new Rectangle2D.Double();
    hr.setRect(boundingBox.getX(), boundingBox.getY(), boundingBox.getWidth(), boundingBox.getHeight());
    g2.setClip( hr);                 // normalized coord system, because transform is applied
    g2.setBackground( backColor);

    return g2;
  }
public Graphics2D getBufferedImageGraphics() {
    if (bImage == null)
      return null;
    Graphics2D g2 = bImage.createGraphics();

    // set clipping rectangle into boundingBox
    navigate.getMapArea( boundingBox);
    if (debugBB) System.out.println(" getBufferedImageGraphics BB = "+ boundingBox);

    // set graphics attributes
    g2.setTransform( navigate.getTransform());
    g2.setStroke(new BasicStroke(0.0f));      // default stroke size is one pixel
    g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_SPEED);
    Rectangle2D hr = new Rectangle2D.Double();
    hr.setRect(boundingBox.getX(), boundingBox.getY(), boundingBox.getWidth(), boundingBox.getHeight());
    g2.setClip( hr);                 // normalized coord system, because transform is applied
    g2.setBackground( backColor);

    return g2;
  }
User must get this Graphics2D and draw into it when panel needs redrawing