Subversion Repositories mkgmap

Rev

Rev 4260 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * 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.Coord;
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 boolean namedByIdentifyServiceRoad;
        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 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;
        }

        /**
         * @return the namedByIdentifyServiceRoad
         */

        public boolean isNamedByIdentifyServiceRoad() {
                return namedByIdentifyServiceRoad;
        }

        /**
         * @param namedByIdentifyServiceRoad the namedByIdentifyServiceRoad to set
         */

        public void setNamedByIdentifyServiceRoad(boolean namedByIdentifyServiceRoad) {
                this.namedByIdentifyServiceRoad = namedByIdentifyServiceRoad;
        }

        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 int getLabelPos(String label){
                if (label == null)
                        return -1;
                for (int i = 0; i < labels.length; i++){
                        if (labels[i] == null){
                                return -1;
                        }
                        if (labels[i].equals(label))
                                return i;
                }
                return -1;
        }
       
        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();
               
        }
       
        public int countNodes() {
                int n = 0;
                for (Coord p : getPoints()) {
                        if (p.isNumberNode())
                                n++;
                }
                return n;
        }

       
}