All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.graphhopper.routing.util.parsers.OSMGetOffBikeParser Maven / Gradle / Ivy

package com.graphhopper.routing.util.parsers;

import com.graphhopper.reader.ReaderWay;
import com.graphhopper.routing.ev.BooleanEncodedValue;
import com.graphhopper.routing.ev.EncodedValue;
import com.graphhopper.routing.ev.EncodedValueLookup;
import com.graphhopper.routing.ev.GetOffBike;
import com.graphhopper.storage.IntsRef;

import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

/**
 * This parser scans different OSM tags to identify ways where a cyclist has to get off her bike.
 */
public class OSMGetOffBikeParser implements TagParser {

    private final HashSet pushBikeHighwayTags = new HashSet<>();
    private final List accepted = Arrays.asList("designated", "yes");
    private final BooleanEncodedValue offBikeEnc;

    public OSMGetOffBikeParser() {
        // steps -> special handling
        this(GetOffBike.create(), Arrays.asList("path", "footway", "pedestrian", "platform"));
    }

    public OSMGetOffBikeParser(BooleanEncodedValue enc, List pushBikeTags) {
        offBikeEnc = enc;
        pushBikeHighwayTags.addAll(pushBikeTags);
    }

    @Override
    public void createEncodedValues(EncodedValueLookup lookup, List registerNewEncodedValue) {
        registerNewEncodedValue.add(offBikeEnc);
    }

    @Override
    public IntsRef handleWayTags(IntsRef edgeFlags, ReaderWay way, boolean ferry, IntsRef relationFlags) {
        String highway = way.getTag("highway");
        if (!way.hasTag("bicycle", accepted) && (pushBikeHighwayTags.contains(highway) || way.hasTag("railway", "platform"))
                || "steps".equals(highway) || way.hasTag("bicycle", "dismount")) {
            offBikeEnc.setBool(false, edgeFlags, true);
        }
        return edgeFlags;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy