Subversion Repositories mkgmap

Rev

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

/*
 * Copyright (C) 2010, 2012.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 3 or
 * 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.
 */

package uk.me.parabola.mkgmap.reader.polish;

import uk.me.parabola.imgfmt.app.CoordNode;
import uk.me.parabola.imgfmt.app.net.GeneralRouteRestriction;
import uk.me.parabola.mkgmap.general.MapDetails;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * Helps handling turn restrictions for Polish format.
 * Remembers, and later, after reading through the map,
 * adds all restrictions to the map.
 *
 * Use one instance of this class per file.
 *
 * @author Supun Jayathilake
 */

public class RestrictionHelper {

    // Holds all collected restrictions.
    private final List<PolishTurnRestriction> allRestrictions = new ArrayList<PolishTurnRestriction>();

    public void processAndAddRestrictions(RoadHelper roadHelper, MapDetails mapper) {
        Map<Long, CoordNode> allNodes = roadHelper.getNodeCoords();

        for (PolishTurnRestriction tr : allRestrictions) {
                GeneralRouteRestriction grr = new GeneralRouteRestriction("not", tr.getExceptMask(),Long.toString(tr.getNodId()));
                grr.setFromNode(allNodes.get(tr.getFromNodId()));
                grr.setFromWayId(tr.getRoadIdA());
                grr.setToNode(allNodes.get(tr.getToNodId()));
                if (tr.getViaNodId() != 0){
                        grr.setViaNodes(Arrays.asList(allNodes.get(tr.getNodId()),allNodes.get(tr.getViaNodId())));
                        grr.setViaWayIds(Arrays.asList(tr.getRoadIdB()));
                        grr.setToWayId(tr.getRoadIdC());
                } else {
                        grr.setViaNodes(Arrays.asList(allNodes.get(tr.getNodId())));
                        grr.setToWayId(tr.getRoadIdB());
                }
                mapper.addRestriction(grr); // restriction should be part of the map
        }
    }

    /**
     * Restriction collector.
     * @param restriction Restriction to be added to the map.
     */

    public void addRestriction(PolishTurnRestriction restriction) {
        allRestrictions.add(restriction);
    }
}