Ignore:
Timestamp:
2011-05-15T17:30:21+02:00 (13 years ago)
Author:
bastiK
Message:

applied #6308 (patch by Ole Jørgen Brønner) - Filter/search by closed-way area size

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/search/SearchCompiler.java

    r3818 r4085  
    2222import org.openstreetmap.josm.data.osm.Way;
    2323import org.openstreetmap.josm.tools.DateUtils;
     24import org.openstreetmap.josm.tools.Geometry;
    2425
    2526/**
     
    629630        }
    630631        @Override public String toString() {return "child(" + parent + ")";}
     632    }
     633   
     634    /**
     635     * Matches on the area of a closed way.
     636     *
     637     * @author Ole Jørgen Brønner
     638     */
     639    private static class Area extends Match {
     640        private int min, max;
     641
     642        public Area(int min, int max) {
     643            this.min = min;
     644            this.max = max;
     645            if (min == max) {
     646                this.min = 0;
     647            }
     648        }
     649
     650        @Override
     651        public boolean match(OsmPrimitive osm) {
     652            if(!(osm instanceof Way && ((Way) osm).isClosed()))
     653                return false;
     654            Way way = (Way)osm;
     655            double area = Geometry.closedWayArea(way);
     656            return (min <= area && area <= max);
     657        }
    631658    }
    632659
     
    701728                    Range range = tokenizer.readRange(tr("Range of numbers expected"));
    702729                    return new NodeCountRange((int)range.getStart(), (int)range.getEnd());
     730                } else if ("areaSize".equals(key)) {
     731                    Range range = tokenizer.readRange(tr("Range of numbers expected"));
     732                    return new Area((int)range.getStart(), (int)range.getEnd());
    703733                } else if ("changeset".equals(key))
    704734                    return new ChangesetId(tokenizer.readNumber(tr("Changeset id expected")));
Note: See TracChangeset for help on using the changeset viewer.