AbstractEccentricity.java
package org.heigit.ors.fastisochrones;
import com.graphhopper.routing.util.EdgeFilter;
import com.graphhopper.routing.util.FlagEncoder;
import com.graphhopper.routing.weighting.Weighting;
import com.graphhopper.storage.GraphHopperStorage;
import org.heigit.ors.fastisochrones.partitioning.storage.CellStorage;
import org.heigit.ors.fastisochrones.partitioning.storage.IsochroneNodeStorage;
import org.heigit.ors.fastisochrones.storage.BorderNodeDistanceStorage;
import org.heigit.ors.fastisochrones.storage.EccentricityStorage;
import java.util.ArrayList;
import java.util.List;
/**
* Superclass for eccentricity calculations. Stores and orders references to eccentricity and bordernodedistance storages.
* <p>
*
* @author Hendrik Leuschner
*/
public abstract class AbstractEccentricity {
protected GraphHopperStorage ghStorage;
protected IsochroneNodeStorage isochroneNodeStorage;
protected CellStorage cellStorage;
protected List<EccentricityStorage> eccentricityStorages = new ArrayList<>();
protected List<BorderNodeDistanceStorage> borderNodeDistanceStorages = new ArrayList<>();
protected AbstractEccentricity(GraphHopperStorage ghStorage) {
this.ghStorage = ghStorage;
}
public abstract void calcEccentricities(Weighting weighting, EdgeFilter additionalEdgeFilter, FlagEncoder flagEncoder);
public EccentricityStorage getEccentricityStorage(Weighting weighting) {
if (eccentricityStorages.isEmpty())
return null;
for (EccentricityStorage ecc : eccentricityStorages) {
if (ecc.hasWeighting(weighting))
return ecc;
}
return null;
}
public BorderNodeDistanceStorage getBorderNodeDistanceStorage(Weighting weighting) {
if (borderNodeDistanceStorages.isEmpty())
return null;
for (BorderNodeDistanceStorage bnds : borderNodeDistanceStorages) {
if (bnds.hasWeighting(weighting))
return bnds;
}
return null;
}
public boolean loadExisting(Weighting weighting) {
EccentricityStorage eccentricityStorage = new EccentricityStorage(ghStorage.getDirectory(), weighting, isochroneNodeStorage, ghStorage.getBaseGraph().getNodes());
eccentricityStorages.add(eccentricityStorage);
BorderNodeDistanceStorage borderNodeDistanceStorage = new BorderNodeDistanceStorage(ghStorage.getDirectory(), weighting, isochroneNodeStorage, ghStorage.getBaseGraph().getNodes());
borderNodeDistanceStorages.add(borderNodeDistanceStorage);
borderNodeDistanceStorage.loadExisting();
return eccentricityStorage.loadExisting();
}
public boolean isAvailable(Weighting weighting) {
return getEccentricityStorage(weighting) != null;
}
}