阻止GraphHopper的某些道路



我想阻止某些道路并在生成路线时避免它。

我正在使用GraphHopper基本地图样本

我找到了这个代码 加权。我相信这是我想要的功能,但我没有运气整合。

我非常感谢任何帮助,以展示如何将两个代码放在一起。示例代码非常感谢。

预先感谢。

所以,我将分享我的代码样本,以显示我如何实现自定义加权,但它们与您提到的示例相似。

首先,您必须扩展类GraphHopper和覆盖方法createWeighting(WeightingMap weightingMap, FlagEncoder encoder)

public class MyGraphHopper extends GraphHopper {
    @Override
    public Weighting createWeighting(WeightingMap weightingMap, FlagEncoder encoder) {
        String weighting = weightingMap.getWeighting();
        if (Consts.CURRENT_TRAFFIC.equalsIgnoreCase(weighting)) {
            return new CurrentTrafficWeighting(encoder);
        } else {
            return super.createWeighting(weightingMap, encoder);
        }
    }
}

然后,您实现自定义加权,在您的情况下,您可以在其中实施阻塞某些道路的逻辑。

public class CurrentTrafficWeighting extends AbstractWeighting {
    protected final static double SPEED_CONV = 3.6;
    public CurrentTrafficWeighting(FlagEncoder encoder) {
        super(encoder);
        System.out.println("Current traffic weighting");
    }
    @Override
    public double getMinWeight(double distance) {
        return distance;
    }
    @Override
    public double calcWeight(EdgeIteratorState edgeState, boolean reverse, int prevOrNextEdgeId) {
        double speed = reverse ? flagEncoder.getReverseSpeed(edgeState.getFlags()) : flagEncoder.getSpeed(edgeState.getFlags());
        if (speed == 0)
            return Double.POSITIVE_INFINITY;
        double time = edgeState.getDistance() / speed * SPEED_CONV;
        return time;
    }
    @Override
    public String getName() {
        return Consts.CURRENT_TRAFFIC;
    }
}

现在,也许是您最重要的部分,它显示了如何加入这两个代码。创建新请求时,必须将权重设置为自定义一个(您实现的一个)。通过这种方式,将使用您在计算最佳路线的同时使用一些阻塞道路的自定义加权。

public static void main(String[] args) {
    MyGraphHopper hopper = new MyGraphHopper();
    hopper.setOSMFile(OSM_FILE_PATH);
    hopper.setGraphHopperLocation(GRAPH_FOLDER);
    hopper.clean();
    hopper.setEncodingManager(new EncodingManager("car"));
    hopper.setCHEnable(false);
    hopper.importOrLoad();
    GHRequest req = new GHRequest(startPoint.getX(), startPoint.getY(), finishPoint.getX(), finishPoint.getY())
            .setWeighting(Consts.CURRENT_TRAFFIC)
            .setVehicle("car")
            .setLocale(Locale.US)
            .setAlgorithm(AlgorithmOptions.DIJKSTRA_BI);
    GHResponse rsp = hopper.route(req);
}

相关内容

  • 没有找到相关文章

最新更新