class Isochrone extends AbstractRoutingAlgorithm {

    public void search(int from, final Callback callback) {
        searchInternal(from);

        final NodeAccess na = graph.getNodeAccess();
        fromMap.forEach(new IntObjectProcedure<IsoLabel>() {

            @Override
            public void apply(int nodeId, IsoLabel label) {
                double lat = na.getLatitude(nodeId);
                double lon = na.getLongitude(nodeId);
                IsoLabelWithCoordinates isoLabelWC = new IsoLabelWithCoordinates(nodeId);
                isoLabelWC.coordinate = new GHPoint(lat, lon);
                isoLabelWC.timeMillis = Math.round(label.time);
                isoLabelWC.distance = (int) Math.round(label.distance);
                isoLabelWC.edgeId = label.edge;
                if (label.parent != null) {
                    IsoLabel prevLabel = (IsoLabel) label.parent;
                    nodeId = prevLabel.adjNode;
                    double prevLat = na.getLatitude(nodeId);
                    double prevLon = na.getLongitude(nodeId);
                    isoLabelWC.prevNodeId = nodeId;
                    isoLabelWC.prevEdgeId = prevLabel.edge;
                    isoLabelWC.prevCoordinate = new GHPoint(prevLat, prevLon);
                    isoLabelWC.prevDistance = (int) Math.round(prevLabel.distance);
                    isoLabelWC.prevTimeMillis = Math.round(prevLabel.time);
                }
                callback.add(isoLabelWC);
            }
        });
    }

    public  Isochrone(Graph g, Weighting weighting, boolean reverseFlow);

}