* @param showLabels is true, the bottom and right edges of the map are covered with
* white strips, and labels for the grid lines are placed in the white strips.
*/
private void drawGrid( MapGraphicContext context, boolean showLabels ) {
GridStyle style = getStyle(context.getLayer());
double[] gridSize=style.getGridSize();
try{
MathTransform mt = CRS.findMathTransform(DefaultGeographicCRS.WGS84, context.getCRS(), true);
if( !mt.isIdentity() ){
double x=gridSize[0]/2.0;
double y=gridSize[1]/2.0;
double[] toTransform=new double[]{-x,-y,x,y};
double[] dest=new double[4];
mt.transform(toTransform,0,dest,0,2);
gridSize=new double[]{Math.abs(dest[2]-dest[0]), Math.abs(dest[3]-dest[1])};
}
}catch (Exception e) {
MapGraphicPlugin.log("",e); //$NON-NLS-1$
}
Envelope bounds = context.getViewportModel().getBounds();
Coordinate centerCoord = bounds.centre();
gridSize = style.getGridSize();
Coordinate topLeftCenterCoord = new Coordinate(centerCoord.x - gridSize[0]/2,
centerCoord.y + gridSize[1]/2);
Coordinate topLeftMostCoord = new Coordinate(topLeftCenterCoord);
while (topLeftMostCoord.x - gridSize[0] > bounds.getMinX()) {
topLeftMostCoord.x -= gridSize[0];
}
while (topLeftMostCoord.y + gridSize[1] < bounds.getMaxY()) {
topLeftMostCoord.y += gridSize[1];
}
Coordinate coord = topLeftMostCoord;
ViewportGraphics graphics = context.getGraphics();
int mapPixelWidth = context.getMapDisplay().getWidth();
int mapPixelHeight = context.getMapDisplay().getHeight();
//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.03);
final int GRID_LINE_EXTENSION = (int)(RIGHT_STRIP_WIDTH * 0.1);
graphics.setColor(Color.white);
graphics.fillRect(mapPixelWidth - RIGHT_STRIP_WIDTH,
0,
RIGHT_STRIP_WIDTH,
mapPixelHeight);
graphics.fillRect(0,
mapPixelHeight - BOTTOM_STRIP_HEIGHT,
mapPixelWidth,
BOTTOM_STRIP_HEIGHT);
//draw grid lines
graphics.setColor(style.getColor());
Point pixel = null;
while(true){
pixel = context.worldToPixel(coord);
coord.x+=gridSize[0];
coord.y-=gridSize[1];