/** * Copyright (C) 2006 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 * Date: 23-Dec-2006 */ package uk.me.parabola.mkgmap.general; import uk.me.parabola.imgfmt.app.Coord; import uk.me.parabola.mkgmap.filters.ShapeMergeFilter; /** * A shape or polygon is just the same as a line really as far as I can tell. * There are some things that you cannot do with them semantically. * * @author Steve Ratcliffe. */ public class MapShape extends MapLine {// So top code can link objects from here private long osmid; //TODO: remove debug aid private long fullArea = Long.MAX_VALUE; // meaning unset public MapShape() { osmid = 0; } public MapShape(long id) { osmid = id; } MapShape(MapShape s) { super(s); this.osmid = s.osmid; this.fullArea = s.getFullArea(); } public MapShape copy() { return new MapShape(this); } public void setDirection(boolean direction) { throw new IllegalArgumentException( "can't set a direction on a polygon"); } public void setOsmid(long osmid) { this.osmid = osmid; } public long getOsmid() { return osmid; } public void setFullArea(long fullArea) { this.fullArea = fullArea; } public long getFullArea() { // this is unadulterated size, +ve if clockwise if (this.fullArea == Long.MAX_VALUE) { java.util.List<Coord> points = this.getPoints(); if (points.size() >= 4 && points.get(0).highPrecEquals(points.get(points.size()-1))) this.fullArea = ShapeMergeFilter.calcAreaSizeTestVal(points); } return this.fullArea; } }