Rev 3408 |
Blame |
Compare with Previous |
Last modification |
View Log
| RSS feed
/*
* Copyright (C) 2007 Steve Ratcliffe
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* Author: Steve Ratcliffe
* Create date: Dec 1, 2007
*/
package uk.me.parabola.mkgmap.filters;
import uk.me.parabola.mkgmap.general.MapElement;
import uk.me.parabola.mkgmap.general.MapLine;
/**
* This is a filter that dismisses elements too small for the current resolution
*/
public class SizeFilter implements MapFilter {
private final int size;
private int minSize;
private boolean checkRouting;
public SizeFilter(int s) {
size = s;
}
public void init(FilterConfig config) {
minSize = size * (1<<config.getShift());
// don't remove roads on level 0
checkRouting = config.getLevel() == 0 && config.isRoutable() == true;
}
/**
* This applies to both lines and polygons.
* Elements too small for current resolution will be dropped.
*
* @param element A map element that will be a line or a polygon.
* @param next This is used to pass the possibly transformed element onward.
*/
public void doFilter(MapElement element, MapFilterChain next) {
MapLine line = (MapLine) element;
if ((line.isSkipSizeFilter() || (checkRouting && line.isRoad())) == false){
if (line.getBounds().getMaxDimension() < minSize){
return;
}
}
next.doFilter(line);
}
}