/* * Copyright (C) 2008 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: 13-Jul-2008 */ package uk.me.parabola.mkgmap.general; import java.util.List; import uk.me.parabola.imgfmt.app.lbl.City; import uk.me.parabola.imgfmt.app.lbl.Zip; import uk.me.parabola.imgfmt.app.net.Numbers; import uk.me.parabola.imgfmt.app.net.RoadDef; /** * Used to represent a road. A road is a special kind of line in that * it can be used to route down and can have addresses etc. * * A road has several coordinates, and some of those coordinates can be * routing nodes. * * A lot of the information is kept in a {@link RoadDef} this is done * because it needs to be shared between all sections and all levels * of the same road. * * @author Steve Ratcliffe */ public class MapRoad extends MapLine { private final RoadDef roadDef; private boolean segmentsFollowing; private boolean skipHousenumberProcessing; private boolean namedByHousenumberProcessing; private final int roadId; public MapRoad(int roadId, long OSMid, MapLine line) { super(line); this.roadId = roadId; setPoints(line.getPoints()); roadDef = new RoadDef(OSMid, getName()); } private MapRoad(MapRoad r) { super(r); roadId = r.roadId; roadDef = r.roadDef; segmentsFollowing = r.segmentsFollowing; } /** * @return value that can be used to sort MapRoad instances */ public int getRoadId(){ return roadId; } public MapRoad copy() { return new MapRoad(this); } public boolean isRoad() { return true; } public void setRoadClass(int roadClass) { roadDef.setRoadClass(roadClass); } public void setSpeed(int speed) { roadDef.setSpeed(speed); } public void setOneway() { roadDef.setOneway(); } public void setToll() { roadDef.setToll(); } public void paved(boolean p) { roadDef.paved(p); } public void ferry(boolean f) { roadDef.ferry(f); } public void setSynthesised(boolean s) { roadDef.setSynthesised(s); } public void setAccess(byte access) { roadDef.setAccess(access); } public void setCarpoolLane() { roadDef.setCarpoolLane(); } public void setNoThroughRouting() { roadDef.setNoThroughRouting(); } public void setNumbers(List<Numbers> numbers) { roadDef.setNumbersList(numbers); } public List<Numbers> getNumbers() { return roadDef.getNumbersList(); } public RoadDef getRoadDef() { return roadDef; } public void addRoadCity(City c) { roadDef.addCityIfNotPresent(c); } public void addRoadZip(Zip z) { roadDef.addZipIfNotPresent(z); } public void setRoundabout(boolean r) { roadDef.setRoundabout(r); } public void doFlareCheck(boolean fc) { roadDef.doFlareCheck(fc); } public void setLinkRoad(boolean lr) { roadDef.setLinkRoad(lr); } public boolean hasSegmentsFollowing() { return segmentsFollowing; } public void setSegmentsFollowing(boolean segmentsFollowing) { this.segmentsFollowing = segmentsFollowing; } public boolean isSkipHousenumberProcessing() { return skipHousenumberProcessing; } public void setSkipHousenumberProcessing(boolean skipHousenumberProcessing) { this.skipHousenumberProcessing = skipHousenumberProcessing; } public boolean isNamedByHousenumberProcessing() { return namedByHousenumberProcessing; } public void setNamedByHousenumberProcessing(boolean namedByHousenumberProcessing) { this.namedByHousenumberProcessing = namedByHousenumberProcessing; } public boolean skipAddToNOD() { return roadDef.skipAddToNOD(); } public void skipAddToNOD(boolean skip) { roadDef.skipAddToNOD(skip); } public boolean addLabel(String label){ if (label == null) return false; for (int i = 0; i < labels.length; i++){ if (labels[i] == null){ labels[i] = label; return true; } if (labels[i].equals(label)) return false; } return false; } public String toString(){ if ((getName() == null || getName().isEmpty()) && getStreet() != null) return "id="+this.getRoadDef().getId() + ", (" + this.getStreet() + ")"; else return "id="+this.getRoadDef().getId() + ", " + this.getName(); } public void resetImgData() { roadDef.resetImgData(); } }