diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..39eee488 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,45 @@ +# Change Log +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/) +and this project adheres to [Semantic Versioning](http://semver.org/). + +Here we write upgrade notes. It's a team effort to make them as straightforward as possible. +## [13.0.0] - 2024-10-07 + +### Added +- properties edgeid and edge key to isochrone match dto + +### Changed + +### Fixed +- VirtualEdgeIteratorStateReverseExtractor throws class cast exception when VirtualEdgeIteratorState has an IteratorStateImpl member +- QueryGraphWeightingAdapter was blocking non start virtual edges in reverse direction. + +## [12.0.0] - 2024-09-24 + +### Added + +### Changed + +### Fixed +- Correctly consider driving direction in isochrone when start point is on reversed link. Upstream links are now flipped + on the library side instead of nls-routing-api, making this change breaking. + +## [11.1.0] - 2024-09-13 + +### Added +- Add reverse link ID to GraphHopper network for FCD segments + +### Changed + +### Fixed + +## [11.0.1] - 2024-09-06 + +### Added +- MINOR Added this changelog file + +### Changed + +### Fixed diff --git a/azure-pipelines.yml b/azure-pipelines.yml index f73ba909..9208cfc8 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -20,5 +20,5 @@ extends: jdkVersion: 1.21 mavenReleaseGoal: deploy sonarOptionalCoverageExclusions: '**/config/**' - sonarOptionalExclusions: '**/graphhopper/isochrone/ShortestPathTree.java,**/graphhopper/routing/PathRouter.java' + sonarOptionalExclusions: '**/graphhopper/isochrone/ShortestPathTree.java,**/graphhopper/routing/PathRouter.java,**/graphhopper/routing/querygraph/VirtualEdgeIteratorStateReverseExtractor.java' pushToGitHub: true diff --git a/map-matcher-geometry/pom.xml b/map-matcher-geometry/pom.xml index 5f8ae51d..ad90dfb2 100644 --- a/map-matcher-geometry/pom.xml +++ b/map-matcher-geometry/pom.xml @@ -6,7 +6,7 @@ nu.ndw.nls routing-map-matcher-parent - 10.0.3-SNAPSHOT + 13.0.2-SNAPSHOT routing-map-matcher-geometry diff --git a/map-matcher-library/pom.xml b/map-matcher-library/pom.xml index 6a527642..4aa7e21f 100644 --- a/map-matcher-library/pom.xml +++ b/map-matcher-library/pom.xml @@ -4,7 +4,7 @@ nu.ndw.nls routing-map-matcher-parent - 10.0.3-SNAPSHOT + 13.0.2-SNAPSHOT 4.0.0 routing-map-matcher-library diff --git a/map-matcher-library/src/main/java/com/graphhopper/routing/PathRouter.java b/map-matcher-library/src/main/java/com/graphhopper/routing/PathRouter.java index fed26f82..b69d50c1 100644 --- a/map-matcher-library/src/main/java/com/graphhopper/routing/PathRouter.java +++ b/map-matcher-library/src/main/java/com/graphhopper/routing/PathRouter.java @@ -26,7 +26,7 @@ public class PathRouter extends Router { public PathRouter(BaseGraph graph, EncodingManager encodingManager, LocationIndex locationIndex, - Map profilesByName, + Map profilesByName, PathDetailsBuilderFactory pathDetailsBuilderFactory, TranslationMap translationMap, RouterConfig routerConfig, WeightingFactory weightingFactory, diff --git a/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapter.java b/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapter.java index 9313bb2e..c0f707f0 100644 --- a/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapter.java +++ b/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapter.java @@ -18,7 +18,10 @@ package com.graphhopper.routing.querygraph; +import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; + import com.carrotsearch.hppc.IntArrayList; +import com.graphhopper.routing.util.EncodingManager; import com.graphhopper.routing.weighting.QueryGraphWeighting; import com.graphhopper.routing.weighting.Weighting; import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; @@ -34,14 +37,18 @@ public class QueryGraphWeightingAdapter extends QueryGraphWeighting { private final boolean isSearchDirectionReversed; private final EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor; private final int firstVirtualEdgeId; + private final int startSegmentLinkId; + private final EncodingManager encodingManager; public QueryGraphWeightingAdapter(Weighting weighting, int firstVirtualNodeId, int firstVirtualEdgeId, IntArrayList closestEdges, EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor, - boolean isSearchDirectionReversed) { + boolean isSearchDirectionReversed, int startSegmentLinkId, EncodingManager encodingManager) { super(weighting, firstVirtualNodeId, firstVirtualEdgeId, closestEdges); this.isSearchDirectionReversed = isSearchDirectionReversed; this.edgeIteratorStateReverseExtractor = edgeIteratorStateReverseExtractor; this.firstVirtualEdgeId = firstVirtualEdgeId; + this.startSegmentLinkId = startSegmentLinkId; + this.encodingManager = encodingManager; } @Override @@ -49,24 +56,40 @@ public double calcEdgeWeight(EdgeIteratorState edgeState, boolean reverse) { // With bidirectional start segments, the search goes two ways for both down and upstream isochrones. // The branches that are starting in the wrong direction of travelling (as determined by the nearest // match) are filtered out. - if (isVirtualEdge(edgeState.getEdge()) - && edgeIteratorStateReverseExtractor.hasReversed(edgeState) != isSearchDirectionReversed) { + if (isVirtualEdge(edgeState.getEdge()) && searchDirectionIsCorrect(edgeState) && isStartSegment(edgeState)) { return Double.POSITIVE_INFINITY; } return super.calcEdgeWeight(edgeState, reverse); } + private boolean isStartSegment(EdgeIteratorState edgeState) { + return startSegmentLinkId == getLinkId(edgeState); + } + + private boolean searchDirectionIsCorrect(EdgeIteratorState edgeState) { + return edgeIteratorStateReverseExtractor.hasReversed(edgeState) != isSearchDirectionReversed; + } + private boolean isVirtualEdge(int edge) { return edge >= this.firstVirtualEdgeId; } + private int getLinkId(EdgeIteratorState edge) { + return edge.get(encodingManager.getIntEncodedValue(WAY_ID_KEY)); + } + public static QueryGraphWeightingAdapter fromQueryGraph(Weighting baseWeighting, QueryGraph queryGraph, - EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor, boolean reverseFlow) { + EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor, boolean reverseFlow, int matchedLinkId, + EncodingManager encodingManager) { return new QueryGraphWeightingAdapter(baseWeighting, queryGraph.getBaseGraph().getNodes(), - queryGraph.getBaseGraph().getEdges(), queryGraph - .getQueryOverlay() - .getClosestEdges(), - edgeIteratorStateReverseExtractor, reverseFlow); + queryGraph.getBaseGraph().getEdges(), + queryGraph + .getQueryOverlay() + .getClosestEdges(), + edgeIteratorStateReverseExtractor, + reverseFlow, + matchedLinkId, + encodingManager); } } diff --git a/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/VirtualEdgeIteratorStateReverseExtractor.java b/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/VirtualEdgeIteratorStateReverseExtractor.java index d332c06e..cb5e978b 100644 --- a/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/VirtualEdgeIteratorStateReverseExtractor.java +++ b/map-matcher-library/src/main/java/com/graphhopper/routing/querygraph/VirtualEdgeIteratorStateReverseExtractor.java @@ -1,9 +1,12 @@ package com.graphhopper.routing.querygraph; +import static com.graphhopper.storage.EdgeIteratorStateReverseExtractor.getEdgeIteratorStateImpl; + import com.graphhopper.util.EdgeIteratorState; import java.lang.reflect.Field; import java.lang.reflect.Method; import lombok.SneakyThrows; + /** * The geometry direction of the edge iterator wayGeometry does not necessarily reflect the direction of a street or the * original encoded geometry direction. It is just the direction of the exploration of the graph. GraphHopper sometimes @@ -11,25 +14,26 @@ * problems with the bearing and fraction calculation as well as the determination whether the travelling direction is * reversed with respect to the original geometry direction for bidirectional road segments. To fix this an internal * attribute of the edge iterator state is used indicating it has done so or not. Since this attribute is package - * private the same package structure is used. - * The class is for handling specific VirtualEdgeIteratorState and VirtualEdgeIterator implementations - * The VirtualEdgeIterator is package private so this class has to be in com.graphhopper.routing.querygraph - * to access it. + * private the same package structure is used. The class is for handling specific VirtualEdgeIteratorState and + * VirtualEdgeIterator implementations The VirtualEdgeIterator is package private so this class has to be in + * com.graphhopper.routing.querygraph to access it. * * @see Edge direction problem * @see Understanding edge directions */ public final class VirtualEdgeIteratorStateReverseExtractor { - private VirtualEdgeIteratorStateReverseExtractor(){ + + private VirtualEdgeIteratorStateReverseExtractor() { //static class } + @SneakyThrows public static boolean hasReversed(EdgeIteratorState closestEdge) { if (closestEdge instanceof VirtualEdgeIteratorState virtualEdgeIteratorState) { return extractReversedFromVirtualEdge(virtualEdgeIteratorState); } else if (closestEdge instanceof VirtualEdgeIterator virtualEdgeIterator) { return extractReversedFromVirtualEdge(extractEdgeIteratorStateFromVirtualEdgeIterator(virtualEdgeIterator)); - }else { + } else { throw new IllegalArgumentException( "This method can only be called with an EdgeIterable,VirtualEdgeIteratorState " + "or VirtualEdgeIterator" @@ -38,18 +42,30 @@ public static boolean hasReversed(EdgeIteratorState closestEdge) { } } - private static boolean extractReversedFromVirtualEdge(VirtualEdgeIteratorState closestEdge) + private static boolean extractReversedFromVirtualEdge(EdgeIteratorState closestEdge) throws NoSuchFieldException, IllegalAccessException { Field field = closestEdge.getClass().getDeclaredField("reverse"); //NoSuchFieldException field.setAccessible(true); return (boolean) field.get(closestEdge); } + /** + * The virtual-edge iterator is a wrapper class around a list of edgeIterator states and can contain both + * IteratorStateImpl and VirtualEdgeIteratorState in its list. + * + * @param virtualEdgeIterator + * @return EdgeIteratorState + */ @SneakyThrows - private static VirtualEdgeIteratorState extractEdgeIteratorStateFromVirtualEdgeIterator( + private static EdgeIteratorState extractEdgeIteratorStateFromVirtualEdgeIterator( VirtualEdgeIterator virtualEdgeIterator) { Method method = virtualEdgeIterator.getClass().getDeclaredMethod("getCurrentEdge"); method.setAccessible(true); - return (VirtualEdgeIteratorState) method.invoke(virtualEdgeIterator); + EdgeIteratorState edgeIteratorState = (EdgeIteratorState) method.invoke(virtualEdgeIterator); + if (edgeIteratorState instanceof VirtualEdgeIteratorState virtualEdgeIteratorState) { + return virtualEdgeIteratorState; + } else { + return getEdgeIteratorStateImpl(edgeIteratorState); + } } } diff --git a/map-matcher-library/src/main/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractor.java b/map-matcher-library/src/main/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractor.java index db709276..b1ce1b29 100644 --- a/map-matcher-library/src/main/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractor.java +++ b/map-matcher-library/src/main/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractor.java @@ -26,7 +26,17 @@ public boolean hasReversed(EdgeIteratorState closestEdge) { return edgeIterable.reverse; } else { return VirtualEdgeIteratorStateReverseExtractor.hasReversed(closestEdge); + } + } + + public static EdgeIteratorState getEdgeIteratorStateImpl(EdgeIteratorState closestEdge) { + if (closestEdge instanceof EdgeIteratorStateImpl edgeIterable) { + return edgeIterable; + } else { + throw new IllegalArgumentException( + "This method can only be called with an EdgeIteratorStateImpl instance of EdgeIteratorState %s".formatted( + closestEdge)); } } } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneService.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneService.java index c522d60d..74ab219b 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneService.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneService.java @@ -2,7 +2,6 @@ import static java.util.Comparator.comparing; import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; -import static nu.ndw.nls.routingmapmatcher.util.PathUtil.determineEdgeDirection; import com.graphhopper.config.Profile; import com.graphhopper.routing.ev.DecimalEncodedValue; @@ -11,7 +10,6 @@ import com.graphhopper.routing.util.EncodingManager; import com.graphhopper.routing.util.TraversalMode; import com.graphhopper.storage.BaseGraph; -import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; import com.graphhopper.storage.index.LocationIndexTree; import com.graphhopper.storage.index.Snap; import com.graphhopper.util.EdgeIteratorState; @@ -22,7 +20,6 @@ import nu.ndw.nls.routingmapmatcher.isochrone.algorithm.IsochroneByTimeDistanceAndWeight; import nu.ndw.nls.routingmapmatcher.isochrone.algorithm.ShortestPathTreeFactory; import nu.ndw.nls.routingmapmatcher.isochrone.mappers.IsochroneMatchMapper; -import nu.ndw.nls.routingmapmatcher.model.EdgeIteratorTravelDirection; import nu.ndw.nls.routingmapmatcher.model.IsochroneMatch; import nu.ndw.nls.routingmapmatcher.model.IsochroneUnit; import nu.ndw.nls.routingmapmatcher.model.base.BaseLocation; @@ -37,7 +34,6 @@ public class IsochroneService { private static final int MILLISECONDS = 1000; private final EncodingManager encodingManager; private final BaseGraph baseGraph; - private final EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor; private final IsochroneMatchMapper isochroneMatchMapper; private final ShortestPathTreeFactory shortestPathTreeFactory; private final LocationIndexTree locationIndexTree; @@ -86,24 +82,24 @@ private List getIsochroneMatches(Point startPoint, int matchedLi // It also sets the closestNode of the matchedQueryResult to the virtual node ID. In this way, it creates a // start point for isochrone calculation based on the snapped point coordinates. QueryGraph queryGraph = QueryGraph.create(baseGraph, startSegment); - boolean searchDirectionIsReversed = reversed != reverseFlow; IsochroneByTimeDistanceAndWeight isochrone = shortestPathTreeFactory .createShortestPathTreeByTimeDistanceAndWeight(null, queryGraph, TraversalMode.EDGE_BASED, - isochroneValue, isochroneUnit, searchDirectionIsReversed); + isochroneValue, isochroneUnit, reverseFlow, reversed, matchedLinkId); // Here the closestNode is the virtual node ID created by the queryGraph.lookup. List isoLabels = new ArrayList<>(); isochrone.search(startSegment.getClosestNode(), isoLabels::add); boolean searchDirectionReversed = reversed != reverseFlow; EdgeIteratorState startEdge = startSegment.getClosestEdge(); return isoLabels.stream() - .filter(isoLabel -> ! isoLabel.isRoot()) + .filter(isoLabel -> !isoLabel.isRoot()) .sorted(comparing(IsoLabel::getDistance)) .map(isoLabel -> { // Specify the maximum distance on which to crop the geometries. // In the case of seconds, convert to meters based on the average speed of the iso label. double maxDistance = IsochroneUnit.METERS == isochroneUnit ? isochroneValue : calculateMaxDistance(queryGraph, isochroneValue, isoLabel, searchDirectionReversed); - return isochroneMatchMapper.mapToIsochroneMatch(isoLabel, maxDistance, queryGraph, startEdge); + return isochroneMatchMapper.mapToIsochroneMatch(isoLabel, maxDistance, queryGraph, startEdge, + reverseFlow); }) .toList(); } @@ -135,7 +131,7 @@ private double calculateMaxDistance(QueryGraph queryGraph, double maximumTimeInS private double getAverageSpeedFromEdge(EdgeIteratorState currentEdge, boolean useSpeedFromReversedDirection) { DecimalEncodedValue vehicleSpeedDecimalEncodedValue = encodingManager.getDecimalEncodedValue( - VehicleSpeed.key(profile.getVehicle())); + VehicleSpeed.key(profile.getName())); if (useSpeedFromReversedDirection) { return currentEdge.getReverse(vehicleSpeedDecimalEncodedValue); } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/algorithm/ShortestPathTreeFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/algorithm/ShortestPathTreeFactory.java index 27e70793..c721ce18 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/algorithm/ShortestPathTreeFactory.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/algorithm/ShortestPathTreeFactory.java @@ -2,6 +2,7 @@ import com.graphhopper.routing.querygraph.QueryGraph; import com.graphhopper.routing.querygraph.QueryGraphWeightingAdapter; +import com.graphhopper.routing.util.EncodingManager; import com.graphhopper.routing.util.TraversalMode; import com.graphhopper.routing.weighting.Weighting; import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; @@ -15,21 +16,16 @@ public class ShortestPathTreeFactory { private static final int MILLISECONDS = 1000; private final Weighting defaultWeighting; + private final EncodingManager encodingManager; public IsochroneByTimeDistanceAndWeight createShortestPathTreeByTimeDistanceAndWeight(Weighting weighting, - QueryGraph queryGraph, - TraversalMode traversalMode, - double isochroneValue, - IsochroneUnit isochroneUnit, - boolean isSearchDirectionReversed - ) { - + QueryGraph queryGraph, TraversalMode traversalMode, double isochroneValue, IsochroneUnit isochroneUnit, + boolean reverseFlow, boolean reversed, int matchedLinkId) { Weighting baseWeighting = weighting == null ? this.defaultWeighting : weighting; Weighting queryGraphWeighting = QueryGraphWeightingAdapter.fromQueryGraph(baseWeighting, queryGraph, - new EdgeIteratorStateReverseExtractor(),isSearchDirectionReversed); + new EdgeIteratorStateReverseExtractor(), reverseFlow != reversed, matchedLinkId, encodingManager); IsochroneByTimeDistanceAndWeight isochrone = new IsochroneByTimeDistanceAndWeight(queryGraph, - queryGraphWeighting, isSearchDirectionReversed, - traversalMode); + queryGraphWeighting, reverseFlow, traversalMode); if (isochroneUnit == IsochroneUnit.METERS) { isochrone.setDistanceLimit(isochroneValue); } else if (isochroneUnit == IsochroneUnit.SECONDS) { @@ -39,5 +35,4 @@ public IsochroneByTimeDistanceAndWeight createShortestPathTreeByTimeDistanceAndW } return isochrone; } - } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapper.java index 53fa41cf..27e529a4 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapper.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapper.java @@ -1,9 +1,9 @@ package nu.ndw.nls.routingmapmatcher.isochrone.mappers; +import static nu.ndw.nls.routingmapmatcher.network.model.Link.REVERSED_LINK_ID; import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; -import com.graphhopper.routing.ev.IntEncodedValue; import com.graphhopper.routing.querygraph.QueryGraph; import com.graphhopper.routing.util.EncodingManager; import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; @@ -29,17 +29,17 @@ public class IsochroneMatchMapper { * Maps an IsoLabel to an IsochroneMatch with cropped geometries aligned to travelling direction and respective * start and end fractions. * - * @param isoLabel the iso label to map + * @param isoLabel the iso label to map + * @param reverseFlow whether the isochrone path is upstream (true) or downstream (false) * @return an instance of IsochroneMatch */ public IsochroneMatch mapToIsochroneMatch(IsoLabel isoLabel, double maxDistance, QueryGraph queryGraph, - EdgeIteratorState startEdge) { + EdgeIteratorState startEdge, boolean reverseFlow) { EdgeIteratorState currentEdge = queryGraph.getEdgeIteratorState(isoLabel.getEdge(), isoLabel.getNode()); // Here, the reversed boolean indicates the direction of travelling along the edge with respect to the original // alignment of the geometry (can be backward for bidirectional edges or for upstream isochrone searches). boolean reversed = edgeIteratorStateReverseExtractor.hasReversed(currentEdge); - IntEncodedValue idEnc = encodingManager.getIntEncodedValue(WAY_ID_KEY); - int matchedLinkId = currentEdge.get(idEnc); + int matchedLinkId = getLinkIdInDirection(currentEdge, reversed, reverseFlow); double totalDistanceTravelled = isoLabel.getDistance(); // This is the entire way geometry, except for the start segment, which is split up at the start point. LineString isoLabelWayGeometry = pointListUtil.toLineString(currentEdge.fetchWayGeometry(FetchMode.ALL)); @@ -48,7 +48,7 @@ public IsochroneMatch mapToIsochroneMatch(IsoLabel isoLabel, double maxDistance, // directions as indicated by the edgeDirection. // Here the fractions are calculated based on the entire start-segment geometry with respect to the partial // edges. - boolean isStartSegment = isStartSegment(matchedLinkId, startEdge); + boolean isStartSegment = isStartSegment(matchedLinkId, startEdge, reverseFlow); LineString fullGeometry = isStartSegment ? getStartSegmentWayGeometryInTravelDirection(reversed, startEdge) : isoLabelWayGeometry; @@ -65,36 +65,61 @@ public IsochroneMatch mapToIsochroneMatch(IsoLabel isoLabel, double maxDistance, ? fractionAndDistanceCalculator.calculateFractionAndDistance(fullGeometry, partialGeometry.getEndPoint().getCoordinate()).getFraction() : 1.0; + // Invert values for upstream. + double correctedStartFraction = reverseFlow ? (1 - endFraction) : startFraction; + double correctedEndFraction = reverseFlow ? (1 - startFraction) : endFraction; + boolean correctedReversed = (reversed != reverseFlow) && !hasReversedLinkId(currentEdge); + LineString correctedGeometry = reverseFlow ? partialGeometry.reverse() : partialGeometry; + return IsochroneMatch .builder() + .edge(currentEdge) .matchedLinkId(matchedLinkId) - .startFraction(startFraction) - .endFraction(endFraction) - .reversed(reversed) - .parentLink(createParentLink(isoLabel, queryGraph)) - .geometry(partialGeometry) + .startFraction(correctedStartFraction) + .endFraction(correctedEndFraction) + .reversed(correctedReversed) + .parentLink(createParentLink(isoLabel, queryGraph, reverseFlow)) + .geometry(correctedGeometry) .build(); } - private IsochroneParentLink createParentLink(IsoLabel isoLabel, QueryGraph queryGraph) { - if (!isoLabel.parentIsRoot()) { - IntEncodedValue idEnc = encodingManager.getIntEncodedValue(WAY_ID_KEY); - EdgeIteratorState parentEdge = queryGraph.getEdgeIteratorState(isoLabel.getParent().getEdge(), - isoLabel.getParent().getNode()); - boolean reversed = edgeIteratorStateReverseExtractor.hasReversed(parentEdge); - return IsochroneParentLink - .builder() - .linkId(parentEdge.get(idEnc)) - .reversed(reversed) - .build(); - } else { + private IsochroneParentLink createParentLink(IsoLabel isoLabel, QueryGraph queryGraph, boolean reverseFlow) { + if (isoLabel.parentIsRoot()) { return null; } + + EdgeIteratorState parentEdge = queryGraph.getEdgeIteratorState(isoLabel.getParent().getEdge(), + isoLabel.getParent().getNode()); + boolean reversed = edgeIteratorStateReverseExtractor.hasReversed(parentEdge); + int linkId = getLinkIdInDirection(parentEdge, reversed, reverseFlow); + return IsochroneParentLink + .builder() + .linkId(linkId) + .reversed((reversed != reverseFlow) && !hasReversedLinkId(parentEdge)) + .build(); + } + + private int getLinkId(EdgeIteratorState edge) { + return edge.get(encodingManager.getIntEncodedValue(WAY_ID_KEY)); + } + + private int getReversedLinkId(EdgeIteratorState edge) { + return edge.get(encodingManager.getIntEncodedValue(REVERSED_LINK_ID)); + } + + private boolean hasReversedLinkId(EdgeIteratorState edge) { + return getReversedLinkId(edge) > 0; + } + + private int getLinkIdInDirection(EdgeIteratorState startEdge, boolean reversed, boolean reverseFlow) { + return (reversed != reverseFlow) && hasReversedLinkId(startEdge) + ? getReversedLinkId(startEdge) + : getLinkId(startEdge); } - public boolean isStartSegment(int roadSectionId, EdgeIteratorState startEdge) { - IntEncodedValue idEnc = encodingManager.getIntEncodedValue(WAY_ID_KEY); - int startSegmentId = startEdge.get(idEnc); + private boolean isStartSegment(int roadSectionId, EdgeIteratorState startEdge, boolean reverseFlow) { + boolean reversed = edgeIteratorStateReverseExtractor.hasReversed(startEdge); + int startSegmentId = getLinkIdInDirection(startEdge, reversed, reverseFlow); return roadSectionId == startSegmentId; } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/mappers/MatchedLinkMapper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/mappers/MatchedLinkMapper.java index b0ab2e88..0b1d3914 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/mappers/MatchedLinkMapper.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/mappers/MatchedLinkMapper.java @@ -9,8 +9,8 @@ /** * {@link MatchedLinkMapper} maps a {@link List} of {@link MatchedEdgeLink} that describes a Leg/Path into a * {@link List of {@link MatchedLink}. The start fraction of the leg is applied to the first link and the end fraction - * is applied to the last link. All other fractions are either 0 for start and 1 for end as they are fully routed - * from start to end. + * is applied to the last link. All other fractions are either 0 for start and 1 for end as they are fully routed from + * start to end. */ @Component public class MatchedLinkMapper { @@ -22,7 +22,7 @@ public class MatchedLinkMapper { public List map(List matchedEdgeLinks, double firstStartFraction, double lastEndFraction) { - final int indexLast = matchedEdgeLinks.size()-1; + final int indexLast = matchedEdgeLinks.size() - 1; int i = 0; List matchedLinks = new ArrayList<>(); @@ -54,5 +54,4 @@ public List map(List matchedEdgeLinks, double firs return matchedLinks; } - } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/IsochroneMatch.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/IsochroneMatch.java index 62453a3f..60e4df77 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/IsochroneMatch.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/IsochroneMatch.java @@ -1,5 +1,6 @@ package nu.ndw.nls.routingmapmatcher.model; +import com.graphhopper.util.EdgeIteratorState; import lombok.Builder; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -13,6 +14,7 @@ @ToString public class IsochroneMatch { + private final EdgeIteratorState edge; private final IsochroneParentLink parentLink; private final int matchedLinkId; @ToString.Exclude diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/MatchedQueryResult.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/MatchedQueryResult.java index 83c4f628..c4c65186 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/MatchedQueryResult.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/MatchedQueryResult.java @@ -23,6 +23,7 @@ public class MatchedQueryResult { private final Point inputPoint; private final int matchedLinkId; + private final int matchedReversedLinkId; private final BearingFilter bearingFilter; private final LineString originalGeometry; private final EdgeIteratorTravelDirection travelDirection; diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedEdgeLink.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedEdgeLink.java index 358adbe5..40c86867 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedEdgeLink.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedEdgeLink.java @@ -10,6 +10,7 @@ @EqualsAndHashCode @ToString public class MatchedEdgeLink { + private final int linkId; private final boolean reversed; } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedLink.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedLink.java index 8472ac6e..c14db2ef 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedLink.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/linestring/MatchedLink.java @@ -1,6 +1,5 @@ package nu.ndw.nls.routingmapmatcher.model.linestring; - import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; @@ -8,8 +7,6 @@ import lombok.With; import lombok.experimental.SuperBuilder; - - @With @Getter @ToString @@ -17,6 +14,7 @@ @EqualsAndHashCode @AllArgsConstructor public class MatchedLink { + private final int linkId; private final boolean reversed; private final double startFraction; diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/singlepoint/MatchedPoint.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/singlepoint/MatchedPoint.java index 2d405c55..b10c3dd0 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/singlepoint/MatchedPoint.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/model/singlepoint/MatchedPoint.java @@ -13,10 +13,19 @@ public class MatchedPoint { private final int matchedLinkId; + private final int matchedReversedLinkId; private final boolean reversed; private final Point snappedPoint; private final double fraction; private final double distance; private final double bearing; private final double reliability; + + public int getLinkIdInDirection() { + return isReversed() && hasReversedLinkId() ? getMatchedReversedLinkId() : getMatchedLinkId(); + } + + public boolean hasReversedLinkId() { + return getMatchedReversedLinkId() > 0; + } } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/GraphHopperNetworkService.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/GraphHopperNetworkService.java index 5f2a6d66..2192ef0e 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/GraphHopperNetworkService.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/GraphHopperNetworkService.java @@ -4,24 +4,26 @@ import static nu.ndw.nls.routingmapmatcher.util.GraphHopperNetworkPathUtils.formatNormalizedPath; import com.graphhopper.config.Profile; -import com.graphhopper.routing.util.VehicleTagParserFactory; +import com.graphhopper.routing.ev.DefaultImportRegistry; +import com.graphhopper.routing.ev.ImportRegistry; import java.nio.file.Path; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; +import java.util.stream.Stream; import lombok.RequiredArgsConstructor; import nu.ndw.nls.routingmapmatcher.exception.GraphHopperNotImportedException; import nu.ndw.nls.routingmapmatcher.network.annotations.mappers.EncodedValuesMapper; import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.AnnotatedEncodedMapperFactory; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.AnnotatedEncodedValueFactory; import nu.ndw.nls.routingmapmatcher.network.init.annotation.EncodedMapperFactoryRegistry; import nu.ndw.nls.routingmapmatcher.network.init.annotation.EncodedValueFactoryRegistry; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.CustomVehicleEncodedValuesFactory; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.LinkVehicleParserFactory; +import nu.ndw.nls.routingmapmatcher.network.init.vehicle.LinkImportRegistry; +import nu.ndw.nls.routingmapmatcher.network.mappers.CustomModelMapper; +import nu.ndw.nls.routingmapmatcher.network.mappers.ProfileAccessAndSpeedAttributesMapper; import nu.ndw.nls.routingmapmatcher.network.model.Link; import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; +import nu.ndw.nls.routingmapmatcher.network.model.ProfileAccessAndSpeedAttributes; import nu.ndw.nls.routingmapmatcher.network.model.RoutingNetworkSettings; import org.springframework.stereotype.Service; @@ -38,10 +40,11 @@ public class GraphHopperNetworkService { private static final String NO_NETWORK_MSG = "GraphHopper network %s is not imported on disk"; private final LinkVehicleMapperProvider linkVehicleMapperProvider; - private final EncodedMapperFactoryRegistry encodedMapperFactoryRegistry; private final EncodedValueFactoryRegistry encodedValueFactoryRegistry; - private final CustomVehicleEncodedValuesFactory vehicleEncodedValuesFactory; private final EncodedValuesMapper encodedValuesMapper; + private final EncodedMapperFactoryRegistry encodedMapperFactoryRegistry; + private final CustomModelMapper customModelMapper; + private final ProfileAccessAndSpeedAttributesMapper profileAccessAndSpeedAttributesMapper; /** @@ -52,9 +55,11 @@ public class GraphHopperNetworkService { */ public NetworkGraphHopper inMemory(RoutingNetworkSettings networkSettings) { NetworkGraphHopper graphHopper = new NetworkGraphHopper(networkSettings); + + Map> providers = linkVehicleMapperProvider.getLinksForType( + networkSettings.getLinkType()); + validateVehicles(networkSettings.getProfiles(), providers, networkSettings.getLinkType()); configureGraphHopper(networkSettings.getLinkType(), networkSettings.getProfiles(), graphHopper); - // defines for each vehicle the values of the above, deducted from the network and other logic - graphHopper.setVehicleTagParserFactory(getVehicleTagParserFactory(networkSettings)); graphHopper.setStoreOnFlush(false); // Required even though we explicitly set store on flush to false @@ -65,6 +70,7 @@ public NetworkGraphHopper inMemory(RoutingNetworkSettings ne return graphHopper; } + /*** * In order to separate reads and writes to/form disk cache this method only loads existing networks from disk. * Use this method to load a previously stored network. @@ -101,11 +107,10 @@ public void storeOnDisk(RoutingNetworkSettings networkSettin Path path = requireNonNull(networkSettings.getGraphhopperRootPath(), NO_PATH_MSG_WRITE); String nameAndVersion = requireNonNull(networkSettings.getNetworkNameAndVersion(), NO_NAME_MSG_WRITE); graphHopper.setGraphHopperLocation(formatNormalizedPath(path, nameAndVersion).toString()); - + Map> providers = linkVehicleMapperProvider.getLinksForType( + networkSettings.getLinkType()); + validateVehicles(networkSettings.getProfiles(), providers, networkSettings.getLinkType()); configureGraphHopper(networkSettings.getLinkType(), networkSettings.getProfiles(), graphHopper); - // defines for each vehicle the values of the above, deducted from the network and other logic - graphHopper.setVehicleTagParserFactory(getVehicleTagParserFactory(networkSettings)); - graphHopper.clean(); graphHopper.setStoreOnFlush(true); graphHopper.importAndClose(); @@ -122,39 +127,40 @@ public void storeOnDisk(RoutingNetworkSettings networkSettin private void configureGraphHopper(Class linkClass, List profiles, NetworkGraphHopper networkGraphHopper) { networkGraphHopper.setElevation(false); - // defines for each vehicle how data is encoded - networkGraphHopper.setVehicleEncodedValuesFactory(vehicleEncodedValuesFactory); EncodedValuesByTypeDto encodedValuesByTypeDto = encodedValuesMapper.map(linkClass); - AnnotatedEncodedValueFactory encodedvalueFactory = new AnnotatedEncodedValueFactory<>( - encodedValueFactoryRegistry, encodedValuesByTypeDto); - AnnotatedEncodedMapperFactory tagParserFactory = new AnnotatedEncodedMapperFactory<>( - encodedMapperFactoryRegistry, encodedValuesByTypeDto); - - //How to set a value in a link - networkGraphHopper.setEncodedValueFactory(encodedvalueFactory); - - //How to get back a value from a link - networkGraphHopper.setTagParserFactory(tagParserFactory); - - networkGraphHopper.setEncodedValuesString(String.join(DELIMITER, encodedValuesByTypeDto.keySet())); - + Map> providers = linkVehicleMapperProvider.getLinksForType( + linkClass); + ProfileAccessAndSpeedAttributes profileAccessAndSpeedAttributes = profileAccessAndSpeedAttributesMapper.map( + profiles); + String encodedValuesString = getEncodedValuesString(profileAccessAndSpeedAttributes.getAll(), + encodedValuesByTypeDto); + ImportRegistry importRegistry = new LinkImportRegistry<>(encodedValuesByTypeDto, + encodedValueFactoryRegistry, encodedMapperFactoryRegistry, + providers, + new DefaultImportRegistry(), + profileAccessAndSpeedAttributes); + addSpeedAndAccessRestrictionsToProfiles(profiles); + networkGraphHopper.setImportRegistry(importRegistry); + networkGraphHopper.setEncodedValuesString(encodedValuesString); networkGraphHopper.setProfiles(profiles); networkGraphHopper.setMinNetworkSize(0); } - private VehicleTagParserFactory getVehicleTagParserFactory(RoutingNetworkSettings - networkSettings) { - Map> providers = linkVehicleMapperProvider.getLinksForType( - networkSettings.getLinkType()); - validateVehicles(networkSettings.getProfiles(), providers, networkSettings.getLinkType()); - return new LinkVehicleParserFactory<>(providers); + private String getEncodedValuesString(List accessAndSpeedAttributes, + EncodedValuesByTypeDto encodedValuesByTypeDto) { + return Stream.concat( + encodedValuesByTypeDto.keySet().stream(), + accessAndSpeedAttributes.stream() + ) + .collect(Collectors.joining(DELIMITER)); } + private void validateVehicles(List profiles, Map> providers, Class linkClass) { Set missingVehicles = profiles.stream() - .map(Profile::getVehicle) + .map(Profile::getName) .filter(vehicle -> !providers.containsKey(vehicle)) .collect(Collectors.toSet()); if (!missingVehicles.isEmpty()) { @@ -164,4 +170,8 @@ private void validateVehicles(List profiles, Map profiles) { + profiles.forEach(profile -> profile.setCustomModel(customModelMapper.mapToCustomModel(profile))); + } + } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProvider.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProvider.java index e452d696..819f9829 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProvider.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProvider.java @@ -7,6 +7,7 @@ import java.util.stream.Collectors; import nu.ndw.nls.routingmapmatcher.network.model.Link; import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; +import nu.ndw.nls.routingmapmatcher.util.Constants; import org.springframework.stereotype.Component; @Component @@ -46,6 +47,9 @@ private Optional validate(Class linkClass, } } + + + public Map> getLinksForType(Class linkType) { return Optional.ofNullable(vehiclesByLinkType.get(linkType)).orElse(List.of()).stream() .collect(Collectors.toMap( diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/NetworkGraphHopper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/NetworkGraphHopper.java index a99878bb..49e6469d 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/NetworkGraphHopper.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/NetworkGraphHopper.java @@ -81,7 +81,7 @@ protected void importOSM() { if (this.dataDate != null) { putDateProperty(DATAREADER_DATA_DATE, this.dataDate); } - this.writeEncodingManagerToProperties(); + } @Override diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapper.java index c0c692e8..520a5873 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapper.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapper.java @@ -2,9 +2,11 @@ import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; +import java.util.Optional; import nu.ndw.nls.routingmapmatcher.network.model.DirectionalDto; import nu.ndw.nls.routingmapmatcher.network.model.Link; import org.springframework.stereotype.Component; +import org.springframework.util.ReflectionUtils; /** * Retrieves the generic type argument from a field of type {@link DirectionalDto} @@ -21,16 +23,13 @@ public class DirectionalFieldGenericTypeArgumentMapper { * @return {@link Class } which is the generic type argument of {@link DirectionalDto} */ public Class map(Class annotatedClassType, String fieldName) { - - Field directionalField; - - try { - directionalField = annotatedClassType.getDeclaredField(fieldName); - } catch (NoSuchFieldException e) { - throw new IllegalStateException("Direction field by name " + fieldName + " should exist!", e); - } + Field directionalField = getDirectionalField(annotatedClassType, fieldName); return (Class) ((ParameterizedType) directionalField.getGenericType()).getActualTypeArguments()[0]; } + private Field getDirectionalField(Class clazz, String fieldName) { + return Optional.ofNullable(ReflectionUtils.findField(clazz, fieldName)) + .orElseThrow(() -> new IllegalArgumentException("No such field %s in %s".formatted(fieldName, clazz))); + } } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedMapperFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedMapperFactory.java deleted file mode 100644 index cf356a8b..00000000 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedMapperFactory.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Licensed to GraphHopper GmbH under one or more contributor - * license agreements. See the NOTICE file distributed with this work for - * additional information regarding copyright ownership. - * - * GraphHopper GmbH licenses this file to you under the Apache License, - * Version 2.0 (the "License"); you may not use this file except in - * compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package nu.ndw.nls.routingmapmatcher.network.init.annotation; - -import com.graphhopper.routing.ev.EncodedValueLookup; -import com.graphhopper.routing.util.parsers.TagParser; -import com.graphhopper.routing.util.parsers.TagParserFactory; -import com.graphhopper.util.PMap; -import lombok.extern.slf4j.Slf4j; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.mappers.AbstractEncodedMapper; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedMapperFactory; -import nu.ndw.nls.routingmapmatcher.network.model.Link; - - -/** - * Is a tag parser factory that wires all {@link nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedMapperFactory}s that are available in the spring - * context and uses the field meta-data to resolve the correct {@link nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedMapperFactory} and instantiates an - * instance of {@link AbstractEncodedMapper}, which is a GraphHopper {@link TagParser} - * - * @param Link type - */ -@Slf4j -public class AnnotatedEncodedMapperFactory implements TagParserFactory { - - private final EncodedValuesByTypeDto encodedValuesByTypeDto; - - private final EncodedMapperFactoryRegistry classToEncodedMapperFactory; - - public AnnotatedEncodedMapperFactory(EncodedMapperFactoryRegistry classToEncodedMapperFactory, - EncodedValuesByTypeDto encodedValuesByTypeDto) { - this.classToEncodedMapperFactory = classToEncodedMapperFactory ; - this.encodedValuesByTypeDto = encodedValuesByTypeDto; - } - - @Override - public AbstractEncodedMapper create(EncodedValueLookup lookup, String name, PMap properties) { - Class type = encodedValuesByTypeDto.getValueTypeByKey(name).orElseThrow(() -> - new IllegalStateException("No annotate encoded value configuration found by name: " + name)); - - return createEncodedMapper(lookup, type, name); - } - - private AbstractEncodedMapper createEncodedMapper(EncodedValueLookup lookup, Class valueType, - String name) { - - EncodedMapperFactory encodedMapperFactory = - classToEncodedMapperFactory.lookupEncodedMapperFactory(valueType).orElseThrow( - () -> new IllegalStateException( - "No tag parser found for name: %s with type: %s".formatted(name, valueType))); - - return encodedMapperFactory.create(lookup, encodedValuesByTypeDto.get(valueType, name)); - } - - -} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedValueFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedValueFactory.java deleted file mode 100644 index d3c98106..00000000 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedValueFactory.java +++ /dev/null @@ -1,49 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.annotation; - -import com.graphhopper.routing.ev.EncodedValue; -import com.graphhopper.util.PMap; -import lombok.extern.slf4j.Slf4j; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValueDto; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.encodedvaluefactories.EncodedValueFactory; -import nu.ndw.nls.routingmapmatcher.network.model.Link; - - -/** - * A GraphHopper {@link com.graphhopper.routing.ev.EncodedValueFactory} that uses a list of available {@link EncodedValueFactory} to - * instantiate encoders for annotated values described by {@link EncodedValuesByTypeDto } - * @param Type safe link - */ -@Slf4j -public class AnnotatedEncodedValueFactory implements com.graphhopper.routing.ev.EncodedValueFactory { - - private final EncodedValueFactoryRegistry encodedValueFactoryRegistry; - private final EncodedValuesByTypeDto encodedValuesByTypeDto; - - public AnnotatedEncodedValueFactory(EncodedValueFactoryRegistry encodedValueFactoryRegistry, - EncodedValuesByTypeDto encodedValuesByTypeDto) { - this.encodedValueFactoryRegistry = encodedValueFactoryRegistry; - this.encodedValuesByTypeDto = encodedValuesByTypeDto; - } - - @Override - public EncodedValue create(String name, PMap properties) { - Class type = encodedValuesByTypeDto.getValueTypeByKey(name).orElseThrow(() -> new IllegalStateException( - "Field requested for which there is no encoded value annotation: " + name)); - return create(type, name); - } - - private EncodedValue create(Class type, String name) { - EncodedValueDto encodedValueDto = encodedValuesByTypeDto.get(type, name); - - EncodedValueFactory encodedValueFactory = - encodedValueFactoryRegistry.lookupEncodedValueFactory(type).orElseThrow( - () -> new IllegalStateException( - "No encoded value factory found for name: " + name + " with type: " + type)); - - return encodedValueFactory.encode(encodedValueDto); - } - - - -} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/CustomVehicleEncodedValuesFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/CustomVehicleEncodedValuesFactory.java deleted file mode 100644 index c5f578b7..00000000 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/CustomVehicleEncodedValuesFactory.java +++ /dev/null @@ -1,27 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.vehicle; - -import com.graphhopper.routing.ev.BooleanEncodedValue; -import com.graphhopper.routing.ev.DecimalEncodedValue; -import com.graphhopper.routing.ev.SimpleBooleanEncodedValue; -import com.graphhopper.routing.ev.TurnRestriction; -import com.graphhopper.routing.ev.VehicleAccess; -import com.graphhopper.routing.ev.VehicleSpeed; -import com.graphhopper.routing.util.VehicleEncodedValues; -import com.graphhopper.routing.util.VehicleEncodedValuesFactory; -import com.graphhopper.util.PMap; -import org.springframework.stereotype.Component; - -@Component -public class CustomVehicleEncodedValuesFactory implements VehicleEncodedValuesFactory { - - private static final int DEFAULT_SPEED_BITS = 5; - - @Override - public VehicleEncodedValues createVehicleEncodedValues(String name, PMap properties) { - BooleanEncodedValue accessEnc = VehicleAccess.create(name); - BooleanEncodedValue turnEnc = new SimpleBooleanEncodedValue(TurnRestriction.key(name), true); - DecimalEncodedValue averageSpeedEnc = VehicleSpeed.create(name, DEFAULT_SPEED_BITS, DEFAULT_SPEED_BITS, true); - return new VehicleEncodedValues(name, accessEnc, averageSpeedEnc, null, turnEnc); - } - -} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkImportRegistry.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkImportRegistry.java new file mode 100644 index 00000000..b15e6fb1 --- /dev/null +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkImportRegistry.java @@ -0,0 +1,119 @@ +package nu.ndw.nls.routingmapmatcher.network.init.vehicle; + +import com.graphhopper.routing.ev.DefaultImportRegistry; +import com.graphhopper.routing.ev.EncodedValue; +import com.graphhopper.routing.ev.EncodedValueLookup; +import com.graphhopper.routing.ev.ImportRegistry; +import com.graphhopper.routing.ev.ImportUnit; +import com.graphhopper.routing.ev.VehicleAccess; +import com.graphhopper.routing.ev.VehicleSpeed; +import com.graphhopper.routing.util.parsers.TagParser; +import com.graphhopper.util.PMap; +import java.util.Map; +import java.util.Optional; +import java.util.function.BiFunction; +import lombok.RequiredArgsConstructor; +import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValueDto; +import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.EncodedMapperFactoryRegistry; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.EncodedValueFactoryRegistry; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.encodedvaluefactories.EncodedValueFactory; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.mappers.AbstractEncodedMapper; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedMapperFactory; +import nu.ndw.nls.routingmapmatcher.network.init.vehicle.parsers.LinkAccessParser; +import nu.ndw.nls.routingmapmatcher.network.init.vehicle.parsers.LinkAverageSpeedParser; +import nu.ndw.nls.routingmapmatcher.network.model.Link; +import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; +import nu.ndw.nls.routingmapmatcher.network.model.ProfileAccessAndSpeedAttributes; + +@RequiredArgsConstructor +public class LinkImportRegistry implements ImportRegistry { + + private static final int DEFAULT_SPEED_BITS = 5; + + private final EncodedValuesByTypeDto encodedValuesByTypeDto; + private final EncodedValueFactoryRegistry encodedValueFactoryRegistry; + private final EncodedMapperFactoryRegistry classToEncodedMapperFactory; + private final Map> linkMappersByVehicleType; + private final DefaultImportRegistry defaultImportRegistry; + private final ProfileAccessAndSpeedAttributes profileAccessAndSpeedAttributes; + + @Override + public ImportUnit createImportUnit(String attributeName) { + return getAttributeDataType(attributeName) + .map(dataType -> ImportUnit.create(attributeName, + props -> createEncodedValueForAttributeType(dataType, attributeName), + createTagParserFunction(attributeName, dataType))) + // The gh framework always encodes some extra internal attributes on the network + // here the fallback delegates to the gh import registry + .orElseGet(() -> defaultImportRegistry.createImportUnit(attributeName)); + } + + private Optional> getAttributeDataType(String attributeName) { + if (profileAccessAndSpeedAttributes.isSpeedAttribute(attributeName)) { + return Optional.of(Double.class); + } else if (profileAccessAndSpeedAttributes.isAccessAttribute(attributeName)) { + return Optional.of(Boolean.class); + } else { + return encodedValuesByTypeDto.getValueTypeByKey(attributeName); + } + } + + private BiFunction createTagParserFunction(String attributeName, + Class type) { + if (profileAccessAndSpeedAttributes.isSpeedAttribute(attributeName)) { + return (lookup, props) -> createSpeedTagParserForAttributeType(lookup, attributeName); + } + if (profileAccessAndSpeedAttributes.isAccessAttribute(attributeName)) { + return (lookup, props) -> createAccessibleTagParserForAttributeType(lookup, attributeName); + } + return (lookup, props) -> createTagParserForAttributeType(lookup, type, attributeName); + } + + private TagParser createSpeedTagParserForAttributeType(EncodedValueLookup lookup, String attributeName) { + String vehicleName = profileAccessAndSpeedAttributes.getVehicleName(attributeName); + return new LinkAverageSpeedParser<>(lookup, vehicleName, getMapperForAttribute(attributeName)); + } + + private TagParser createAccessibleTagParserForAttributeType(EncodedValueLookup lookup, + String attributeName) { + String vehicleName = profileAccessAndSpeedAttributes.getVehicleName(attributeName); + return new LinkAccessParser<>(lookup, vehicleName, getMapperForAttribute(attributeName)); + } + + private EncodedValue createEncodedValueForAttributeType(Class type, String name) { + String vehicleName = profileAccessAndSpeedAttributes.getVehicleName(name); + if (profileAccessAndSpeedAttributes.isSpeedAttribute(name)) { + return VehicleSpeed.create(vehicleName, DEFAULT_SPEED_BITS, DEFAULT_SPEED_BITS, true); + } else if (profileAccessAndSpeedAttributes.isAccessAttribute(name)) { + return VehicleAccess.create(vehicleName); + } + EncodedValueDto encodedValueDto = encodedValuesByTypeDto.get(type, name); + EncodedValueFactory encodedValueFactory = + encodedValueFactoryRegistry.lookupEncodedValueFactory(type) + .orElseThrow(() -> new IllegalStateException( + "No encoded value factory found for name: %s with type: %s".formatted(name, type))); + + return encodedValueFactory.encode(encodedValueDto); + } + + private AbstractEncodedMapper createTagParserForAttributeType(EncodedValueLookup lookup, + Class valueType, + String name) { + EncodedMapperFactory encodedMapperFactory = + classToEncodedMapperFactory.lookupEncodedMapperFactory(valueType) + .orElseThrow(() -> new IllegalStateException( + "No tag parser found for name: %s with type: %s".formatted(name, valueType))); + + return encodedMapperFactory.create(lookup, encodedValuesByTypeDto.get(valueType, name)); + } + + private LinkVehicleMapper getMapperForAttribute(String attributeName) { + String vehicleName = profileAccessAndSpeedAttributes.getVehicleName(attributeName); + if (linkMappersByVehicleType.containsKey(vehicleName)) { + return linkMappersByVehicleType.get(vehicleName); + } else { + throw new IllegalArgumentException("No link mapper found for name: %s".formatted(vehicleName)); + } + } +} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkVehicleParserFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkVehicleParserFactory.java deleted file mode 100644 index 8da390d7..00000000 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkVehicleParserFactory.java +++ /dev/null @@ -1,31 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.vehicle; - -import com.graphhopper.routing.ev.EncodedValueLookup; -import com.graphhopper.routing.util.VehicleTagParserFactory; -import com.graphhopper.routing.util.VehicleTagParsers; -import com.graphhopper.util.PMap; -import java.util.Map; -import lombok.RequiredArgsConstructor; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.parsers.LinkAccessParser; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.parsers.LinkAverageSpeedParser; -import nu.ndw.nls.routingmapmatcher.network.model.Link; -import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; - -@RequiredArgsConstructor -public class LinkVehicleParserFactory implements VehicleTagParserFactory { - - private final Map> linkVehicleMapperMap; - - @Override - public VehicleTagParsers createParsers(EncodedValueLookup encodedValueLookup, String name, PMap properties) { - - LinkVehicleMapper linkVehicleMapper = linkVehicleMapperMap.get(name); - - LinkAccessParser accessParser = new LinkAccessParser<>(encodedValueLookup, name, linkVehicleMapper); - LinkAverageSpeedParser averageSpeedParser = new LinkAverageSpeedParser<>(encodedValueLookup, name, - linkVehicleMapper); - - return new VehicleTagParsers(accessParser, averageSpeedParser, null); - } - -} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/CustomModelMapper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/CustomModelMapper.java new file mode 100644 index 00000000..55f9103f --- /dev/null +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/CustomModelMapper.java @@ -0,0 +1,25 @@ +package nu.ndw.nls.routingmapmatcher.network.mappers; + +import com.graphhopper.config.Profile; +import com.graphhopper.json.Statement; +import com.graphhopper.json.Statement.Op; +import com.graphhopper.util.CustomModel; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class CustomModelMapper { + + private final SpeedAndAccessAttributeMapper speedAndAccessAttributeMapper; + + public CustomModel mapToCustomModel(Profile profile) { + String accessibleAttribute = speedAndAccessAttributeMapper.mapToAccessAttribute(profile); + String speedAttribute = speedAndAccessAttributeMapper.mapToSpeedAttribute(profile); + Statement priorityStatement = Statement.If(accessibleAttribute + " == false", Op.MULTIPLY, "0"); + Statement speedStatement = Statement.If("true", Op.LIMIT, speedAttribute); + return new CustomModel() + .addToPriority(priorityStatement) + .addToSpeed(speedStatement); + } +} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/ProfileAccessAndSpeedAttributesMapper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/ProfileAccessAndSpeedAttributesMapper.java new file mode 100644 index 00000000..a0c1fbff --- /dev/null +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/ProfileAccessAndSpeedAttributesMapper.java @@ -0,0 +1,29 @@ +package nu.ndw.nls.routingmapmatcher.network.mappers; + +import com.graphhopper.config.Profile; +import java.util.List; +import lombok.RequiredArgsConstructor; +import nu.ndw.nls.routingmapmatcher.network.model.ProfileAccessAndSpeedAttributes; +import org.springframework.stereotype.Component; + +@Component +@RequiredArgsConstructor +public class ProfileAccessAndSpeedAttributesMapper { + + private final SpeedAndAccessAttributeMapper speedAndAccessAttributeMapper; + + public ProfileAccessAndSpeedAttributes map(List profiles) { + List accessAttributes = profiles.stream() + .map(speedAndAccessAttributeMapper::mapToAccessAttribute) + .toList(); + List speedAttributes = profiles.stream() + .map(speedAndAccessAttributeMapper::mapToSpeedAttribute) + .toList(); + return ProfileAccessAndSpeedAttributes + .builder() + .accessAttributes(accessAttributes) + .speedAttributes(speedAttributes) + .build(); + } + +} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/SpeedAndAccessAttributeMapper.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/SpeedAndAccessAttributeMapper.java new file mode 100644 index 00000000..74cdb36a --- /dev/null +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/mappers/SpeedAndAccessAttributeMapper.java @@ -0,0 +1,18 @@ +package nu.ndw.nls.routingmapmatcher.network.mappers; + +import com.graphhopper.config.Profile; +import com.graphhopper.routing.ev.VehicleAccess; +import com.graphhopper.routing.ev.VehicleSpeed; +import org.springframework.stereotype.Component; + +@Component +public class SpeedAndAccessAttributeMapper { + + public String mapToSpeedAttribute(Profile profile) { + return VehicleSpeed.key(profile.getName()); + } + + public String mapToAccessAttribute(Profile profile) { + return VehicleAccess.key(profile.getName()); + } +} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/Link.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/Link.java index cc6e4e79..7e780167 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/Link.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/Link.java @@ -11,18 +11,28 @@ public class Link extends ReaderWay { public static final String WAY_ID_KEY = "way_id"; + public static final String REVERSED_LINK_ID = "reversed_link_id"; private final long fromNodeId; private final long toNodeId; private final double distanceInMeters; private final LineString geometry; + @EncodedValue(key = REVERSED_LINK_ID, bits = 31) + private final long linkIdReversed; + protected Link(long id, long fromNodeId, long toNodeId, double distanceInMeters, LineString geometry) { + this(id, fromNodeId, toNodeId, distanceInMeters, geometry, null); + } + + protected Link(long id, long fromNodeId, long toNodeId, double distanceInMeters, LineString geometry, + Long linkIdReversed) { super(id); this.fromNodeId = fromNodeId; this.toNodeId = toNodeId; this.distanceInMeters = distanceInMeters; this.geometry = geometry; + this.linkIdReversed = linkIdReversed != null ? linkIdReversed : 0L; } @Override @@ -30,5 +40,4 @@ protected Link(long id, long fromNodeId, long toNodeId, double distanceInMeters, public long getId() { return super.getId(); } - } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/ProfileAccessAndSpeedAttributes.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/ProfileAccessAndSpeedAttributes.java new file mode 100644 index 00000000..bd8dc9ac --- /dev/null +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/network/model/ProfileAccessAndSpeedAttributes.java @@ -0,0 +1,36 @@ +package nu.ndw.nls.routingmapmatcher.network.model; + +import java.util.ArrayList; +import java.util.List; +import lombok.Builder; + +/** + * In gh 9xx we need to add average speed and access attributes per profile we need to generate speed and access + * attribute names. This class is responsible for this logic. + */ +@Builder +public record ProfileAccessAndSpeedAttributes(List accessAttributes, + List speedAttributes) { + + public List getAll() { + List result = new ArrayList<>(accessAttributes); + result.addAll(speedAttributes); + return result; + } + + public boolean isSpeedAttribute(String attributeName) { + return speedAttributes.contains(attributeName); + } + + public boolean isAccessAttribute(String attributeName) { + return accessAttributes.contains(attributeName); + } + + public String getVehicleName(String attributeName) { + return attributeName + .replace("_average_speed", "") + .replace("_access", ""); + } + + +} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/routing/RouterFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/routing/RouterFactory.java index 3b5dc094..b2b48e40 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/routing/RouterFactory.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/routing/RouterFactory.java @@ -18,6 +18,7 @@ public class RouterFactory implements MapMatcherFactory { @Override public Router createMapMatcher(NetworkGraphHopper preInitializedNetwork, String profileName) { - return new Router(preInitializedNetwork, matchedLinkMapper, geometryFactoryWgs84,fractionAndDistanceCalculator); + return new Router(preInitializedNetwork, matchedLinkMapper, geometryFactoryWgs84, + fractionAndDistanceCalculator); } } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/PointMatchingService.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/PointMatchingService.java index 53ce1ddf..472bcf8d 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/PointMatchingService.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/PointMatchingService.java @@ -40,6 +40,7 @@ public List calculateMatches(MatchedQueryResult matchedQueryResult LineString originalGeometry = matchedQueryResult.getOriginalGeometry(); EdgeIteratorTravelDirection travelDirection = matchedQueryResult.getTravelDirection(); int matchedLinkId = matchedQueryResult.getMatchedLinkId(); + int matchedReversedLinkId = matchedQueryResult.getMatchedReversedLinkId(); matchedQueryResult.getCutoffGeometryAsLineStrings() .forEach(cutOffGeometry -> { Coordinate[] coordinates = cutOffGeometry.getCoordinates(); @@ -48,6 +49,7 @@ public List calculateMatches(MatchedQueryResult matchedQueryResult MatchedPoint matchedPoint = createMatchedPoint( inputCoordinate, matchedLinkId, + matchedReversedLinkId, originalGeometry, false, lineString, @@ -64,6 +66,7 @@ public List calculateMatches(MatchedQueryResult matchedQueryResult MatchedPoint matchedPoint = createMatchedPoint( inputCoordinate, matchedLinkId, + matchedReversedLinkId, originalGeometry, true, lineString, @@ -79,7 +82,8 @@ public List calculateMatches(MatchedQueryResult matchedQueryResult return matchedPoints; } - private MatchedPoint createMatchedPoint(Coordinate input, int matchedLinkId, LineString originalGeometry, + private MatchedPoint createMatchedPoint(Coordinate input, int matchedLinkId, int matchedReversedLinkId, + LineString originalGeometry, boolean reversed, LineString aggregatedGeometry, BearingFilter bearingFilter, double cutoffDistance) { ClosestPointResult projectionResult = closestPointService.closestPoint( Arrays.asList(aggregatedGeometry.getCoordinates()), input); @@ -89,6 +93,7 @@ private MatchedPoint createMatchedPoint(Coordinate input, int matchedLinkId, Lin return MatchedPoint .builder() .matchedLinkId(matchedLinkId) + .matchedReversedLinkId(matchedReversedLinkId) .reversed(reversed) .snappedPoint(geometryFactory.createPoint(projectionResult.point())) .fraction(reversed ? (1 - fraction) : fraction) diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcher.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcher.java index be44a5b5..fc89708f 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcher.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcher.java @@ -1,6 +1,7 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; import static nu.ndw.nls.routingmapmatcher.model.singlepoint.MatchFilter.ALL; +import static nu.ndw.nls.routingmapmatcher.network.model.Link.REVERSED_LINK_ID; import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; import static nu.ndw.nls.routingmapmatcher.util.MatchUtil.getQueryResults; import static nu.ndw.nls.routingmapmatcher.util.PathUtil.determineEdgeDirection; @@ -15,6 +16,7 @@ import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; import com.graphhopper.storage.index.LocationIndexTree; import com.graphhopper.storage.index.Snap; +import com.graphhopper.util.CustomModel; import com.graphhopper.util.EdgeIteratorState; import com.graphhopper.util.FetchMode; import com.graphhopper.util.PMap; @@ -37,6 +39,7 @@ import nu.ndw.nls.routingmapmatcher.model.singlepoint.SinglePointMatch; import nu.ndw.nls.routingmapmatcher.model.singlepoint.SinglePointMatch.CandidateMatch; import nu.ndw.nls.routingmapmatcher.network.NetworkGraphHopper; +import nu.ndw.nls.routingmapmatcher.util.Constants; import nu.ndw.nls.routingmapmatcher.util.PointListUtil; import org.locationtech.jts.geom.Geometry; import org.locationtech.jts.geom.LineString; @@ -68,19 +71,25 @@ public SinglePointMapMatcher(DiameterToPolygonMapper diameterToPolygonMapper, this.locationIndexTree = network.getLocationIndex(); BaseGraph baseGraph = network.getBaseGraph(); EncodingManager encodingManager = network.getEncodingManager(); - Weighting weighting = network.createWeighting(profile, new PMap()); + Weighting shortestWeightingForIsochrone = network.createWeighting(profile, createShortestDistanceHints()); this.edgeIteratorStateReverseExtractor = new EdgeIteratorStateReverseExtractor(); this.pointListUtil = new PointListUtil(); - this.isochroneService = new IsochroneService(encodingManager, baseGraph, edgeIteratorStateReverseExtractor, + this.isochroneService = new IsochroneService(encodingManager, baseGraph, new IsochroneMatchMapper(encodingManager, edgeIteratorStateReverseExtractor, pointListUtil, fractionAndDistanceCalculator), - new ShortestPathTreeFactory(weighting), this.locationIndexTree, profile); + new ShortestPathTreeFactory(shortestWeightingForIsochrone, network.getEncodingManager()), + this.locationIndexTree, profile); this.pointMatchingService = new PointMatchingService(geometryFactoryWgs84, bearingCalculator, - fractionAndDistanceCalculator,closestPointService); + fractionAndDistanceCalculator, closestPointService); } + private PMap createShortestDistanceHints() { + return new PMap() + .putObject(CustomModel.KEY, Constants.SHORTEST_CUSTOM_MODEL); + } + public SinglePointMatch match(SinglePointLocation singlePointLocation) { Preconditions.checkNotNull(singlePointLocation); Weighting matchWeighting = network.createWeighting(profile, new PMap()); @@ -116,8 +125,8 @@ private CandidateMatch mapToCandidateMatch(SinglePointLocation singlePointLocati return CandidateMatch .builder() - .matchedLinkId(matchedPoint.getMatchedLinkId()) - .reversed(matchedPoint.isReversed()) + .matchedLinkId(matchedPoint.getLinkIdInDirection()) + .reversed(matchedPoint.isReversed() && !matchedPoint.hasReversedLinkId()) .upstream(upstream) .downstream(downstream) .snappedPoint(matchedPoint.getSnappedPoint()) @@ -135,7 +144,7 @@ private List getMatchedPoints(SinglePointLocation singlePointLocat .filter(e -> intersects(circle, e)) .flatMap(e -> calculateMatches(e, circle, singlePointLocation) .stream()) - .sorted(singlePointLocation.getMatchSort().getSort()) + .sorted(singlePointLocation.getMatchSort().getSort().thenComparing(MatchedPoint::getLinkIdInDirection)) .toList(); if (sorted.isEmpty() || singlePointLocation.getMatchFilter() == ALL) { return sorted; @@ -181,10 +190,12 @@ private List calculateMatches(EdgeIteratorState edge, Polygon circ edgeIteratorStateReverseExtractor.hasReversed(edge) ? wayGeometry.reverse() : wayGeometry; Geometry cutoffGeometry = circle.intersection(originalGeometry); EdgeIteratorTravelDirection travelDirection = determineEdgeDirection(edge, network.getEncodingManager(), - profile.getVehicle()); + profile.getName()); int matchedLinkId = edge.get(network.getEncodingManager().getIntEncodedValue(WAY_ID_KEY)); + int matchedReversedLinkId = edge.get(network.getEncodingManager().getIntEncodedValue(REVERSED_LINK_ID)); var matchedQueryResult = MatchedQueryResult.builder() .matchedLinkId(matchedLinkId) + .matchedReversedLinkId(matchedReversedLinkId) .inputPoint(singlePointLocation.getPoint()) .cutoffDistance(singlePointLocation.getCutoffDistance()) .bearingFilter(singlePointLocation.getBearingFilter()) diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFactory.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFactory.java index 9b94d7b8..80634b5d 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFactory.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFactory.java @@ -27,4 +27,5 @@ public SinglePointMapMatcher createMapMatcher(NetworkGraphHopper preInitializedN geometryFactoryWgs84, fractionAndDistanceCalculator, preInitializedNetwork, profileName, closestPointService); } + } diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcher.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcher.java index 60113f47..1872a5ab 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcher.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcher.java @@ -18,6 +18,7 @@ import com.graphhopper.storage.BaseGraph; import com.graphhopper.storage.index.LocationIndexTree; import com.graphhopper.storage.index.Snap; +import com.graphhopper.util.CustomModel; import com.graphhopper.util.PMap; import java.util.ArrayList; import java.util.Comparator; @@ -30,6 +31,7 @@ import nu.ndw.nls.routingmapmatcher.model.linestring.LineStringLocation; import nu.ndw.nls.routingmapmatcher.model.linestring.LineStringMatch; import nu.ndw.nls.routingmapmatcher.network.NetworkGraphHopper; +import nu.ndw.nls.routingmapmatcher.util.Constants; import nu.ndw.nls.routingmapmatcher.util.LineStringMatchUtil; import nu.ndw.nls.routingmapmatcher.util.LineStringScoreUtil; import org.locationtech.jts.geom.Point; @@ -62,7 +64,12 @@ public StartToEndMapMatcher(NetworkGraphHopper networkGraphHopper, String profil this.locationIndexTree = networkGraphHopper.getLocationIndex(); this.lineStringMatchUtil = new LineStringMatchUtil(networkGraphHopper, profile, fractionAndDistanceCalculator); this.lineStringScoreUtil = new LineStringScoreUtil(fractionAndDistanceCalculator); - this.weighting = networkGraphHopper.createWeighting(profile, new PMap()); + this.weighting = networkGraphHopper.createWeighting(profile, createShortestDistanceHints()); + } + + private PMap createShortestDistanceHints() { + return new PMap() + .putObject(CustomModel.KEY, Constants.SHORTEST_CUSTOM_MODEL); } public LineStringMatch match(LineStringLocation lineStringLocation) { diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/Constants.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/Constants.java new file mode 100644 index 00000000..825b41cc --- /dev/null +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/Constants.java @@ -0,0 +1,12 @@ +package nu.ndw.nls.routingmapmatcher.util; + +import com.graphhopper.util.CustomModel; +import lombok.experimental.UtilityClass; + +@UtilityClass +public class Constants { + + public static final double WEIGHTING_SHORTEST_DISTANCE_INFLUENCE = 10_000D; + public static final CustomModel SHORTEST_CUSTOM_MODEL = new CustomModel() + .setDistanceInfluence(WEIGHTING_SHORTEST_DISTANCE_INFLUENCE); +} diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/LineStringMatchUtil.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/LineStringMatchUtil.java index bab9e509..5780f893 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/LineStringMatchUtil.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/LineStringMatchUtil.java @@ -1,21 +1,18 @@ package nu.ndw.nls.routingmapmatcher.util; +import static nu.ndw.nls.routingmapmatcher.util.Constants.SHORTEST_CUSTOM_MODEL; + import com.graphhopper.config.Profile; import com.graphhopper.routing.Path; -import com.graphhopper.routing.ev.BooleanEncodedValue; -import com.graphhopper.routing.ev.DecimalEncodedValue; -import com.graphhopper.routing.ev.VehicleAccess; -import com.graphhopper.routing.ev.VehicleSpeed; import com.graphhopper.routing.querygraph.QueryGraph; import com.graphhopper.routing.util.EncodingManager; -import com.graphhopper.routing.weighting.ShortestWeighting; import com.graphhopper.routing.weighting.Weighting; -import com.graphhopper.storage.BaseGraph; import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; -import com.graphhopper.storage.index.LocationIndexTree; +import com.graphhopper.util.CustomModel; import com.graphhopper.util.EdgeIteratorState; import com.graphhopper.util.FetchMode; import com.graphhopper.util.Helper; +import com.graphhopper.util.PMap; import com.graphhopper.util.PathSimplification; import com.graphhopper.util.PointList; import com.graphhopper.util.RamerDouglasPeucker; @@ -47,28 +44,32 @@ public class LineStringMatchUtil { private final MatchedLinkMapper matchedLinkMapper = new MatchedLinkMapper(); private final FractionAndDistanceCalculator fractionAndDistanceCalculator; - private LineStringMatchUtil(LocationIndexTree locationIndexTree, BaseGraph baseGraph, - EncodingManager encodingManager, Profile profile, + public LineStringMatchUtil(NetworkGraphHopper networkGraphHopper, Profile profile, FractionAndDistanceCalculator fractionAndDistanceCalculator) { - this.encodingManager = encodingManager; + + PMap requestHints = createShortestDistanceHints(); + Weighting shortestWeighting = networkGraphHopper.createWeighting(profile, requestHints); + + this.encodingManager = networkGraphHopper.getEncodingManager(); this.fractionAndDistanceCalculator = fractionAndDistanceCalculator; - BooleanEncodedValue accessEnc = encodingManager.getBooleanEncodedValue(VehicleAccess.key(profile.getVehicle())); - DecimalEncodedValue speedEnc = encodingManager.getDecimalEncodedValue(VehicleSpeed.key(profile.getVehicle())); - Weighting weighting = new ShortestWeighting(accessEnc, speedEnc); EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor = new EdgeIteratorStateReverseExtractor(); this.pointListUtil = new PointListUtil(); IsochroneMatchMapper isochroneMatchMapper = new IsochroneMatchMapper(encodingManager, - edgeIteratorStateReverseExtractor, pointListUtil,fractionAndDistanceCalculator); - this.isochroneService = new IsochroneService(encodingManager, baseGraph, edgeIteratorStateReverseExtractor, - isochroneMatchMapper, new ShortestPathTreeFactory(weighting), locationIndexTree, profile); + edgeIteratorStateReverseExtractor, pointListUtil, fractionAndDistanceCalculator); + this.isochroneService = new IsochroneService(encodingManager, + networkGraphHopper.getBaseGraph(), + isochroneMatchMapper, + new ShortestPathTreeFactory(shortestWeighting, networkGraphHopper.getEncodingManager()), + networkGraphHopper.getLocationIndex(), + profile); } - public LineStringMatchUtil(NetworkGraphHopper networkGraphHopper, Profile profile, - FractionAndDistanceCalculator fractionAndDistanceCalculator) { - this(networkGraphHopper.getLocationIndex(), networkGraphHopper.getBaseGraph(), - networkGraphHopper.getEncodingManager(), profile, fractionAndDistanceCalculator); + private PMap createShortestDistanceHints() { + return new PMap() + .putObject(CustomModel.KEY, SHORTEST_CUSTOM_MODEL); } + public LineStringMatch createMatch(LineStringLocation lineStringLocation, Path path, QueryGraph queryGraph, double reliability) { List edges = path.calcEdges(); diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/PathUtil.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/PathUtil.java index 7eed4832..79d52411 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/PathUtil.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/util/PathUtil.java @@ -1,5 +1,6 @@ package nu.ndw.nls.routingmapmatcher.util; +import static nu.ndw.nls.routingmapmatcher.network.model.Link.REVERSED_LINK_ID; import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; import com.graphhopper.routing.ev.VehicleAccess; @@ -32,18 +33,33 @@ public static List determineMatchedLinks(EncodingManager encodi Collection edges) { List matchedEdgeLinks = new ArrayList<>(); for (EdgeIteratorState edge : edges) { - int matchedLinkId = edge.get(encodingManager.getIntEncodedValue(WAY_ID_KEY)); + boolean reversed = EDGE_ITERATOR_STATE_REVERSE_EXTRACTOR.hasReversed(edge); + int matchedLinkId = reversed && hasReversedLinkId(encodingManager, edge) + ? getReversedLinkId(encodingManager, edge) + : getLinkId(encodingManager, edge); if (matchedEdgeLinks.isEmpty() || matchedEdgeLinks.getLast().getLinkId() != matchedLinkId) { matchedEdgeLinks.add(MatchedEdgeLink.builder() .linkId(matchedLinkId) - .reversed(EDGE_ITERATOR_STATE_REVERSE_EXTRACTOR.hasReversed(edge)) + .reversed(reversed && !hasReversedLinkId(encodingManager, edge)) .build()); } } return matchedEdgeLinks; } + private static int getLinkId(EncodingManager encodingManager, EdgeIteratorState edge) { + return edge.get(encodingManager.getIntEncodedValue(WAY_ID_KEY)); + } + + private static int getReversedLinkId(EncodingManager encodingManager, EdgeIteratorState edge) { + return edge.get(encodingManager.getIntEncodedValue(REVERSED_LINK_ID)); + } + + private static boolean hasReversedLinkId(EncodingManager encodingManager, EdgeIteratorState edge) { + return getReversedLinkId(encodingManager, edge) > 0L; + } + /** * This method determines the direction on which one can travel over a path. We always need to validate the travel * direction because of the way how graphhopper creates node indexes and always wants to store edges with the lower @@ -101,8 +117,6 @@ public static double determineEndLinkFraction(EdgeIteratorState lastEdge, QueryG .getEndPoint().getCoordinate(); return fractionAndDistanceCalculator.calculateFractionAndDistance(originalGeometry, coordinate) .getFraction(); - - } private static EdgeIteratorState findOriginalEdge(EdgeIteratorState edge, QueryGraph queryGraph) { diff --git a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcher.java b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcher.java index 5b4c9e9c..87f3a2c4 100644 --- a/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcher.java +++ b/map-matcher-library/src/main/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcher.java @@ -1,5 +1,6 @@ package nu.ndw.nls.routingmapmatcher.viterbi; +import static nu.ndw.nls.routingmapmatcher.util.Constants.WEIGHTING_SHORTEST_DISTANCE_INFLUENCE; import static nu.ndw.nls.routingmapmatcher.util.MatchUtil.getQueryResults; import com.google.common.base.Preconditions; @@ -15,6 +16,7 @@ import com.graphhopper.routing.weighting.Weighting; import com.graphhopper.storage.index.LocationIndexTree; import com.graphhopper.storage.index.Snap; +import com.graphhopper.util.CustomModel; import com.graphhopper.util.PMap; import com.graphhopper.util.Parameters; import com.graphhopper.util.PathSimplification; @@ -31,6 +33,7 @@ import nu.ndw.nls.routingmapmatcher.model.linestring.LineStringLocation; import nu.ndw.nls.routingmapmatcher.model.linestring.LineStringMatch; import nu.ndw.nls.routingmapmatcher.network.NetworkGraphHopper; +import nu.ndw.nls.routingmapmatcher.util.Constants; import nu.ndw.nls.routingmapmatcher.util.LineStringMatchUtil; import nu.ndw.nls.routingmapmatcher.util.LineStringScoreUtil; import nu.ndw.nls.routingmapmatcher.util.PointListUtil; @@ -135,6 +138,7 @@ private MapMatching createMapMatching(LineStringLocation lineStringLocation, PMa private PMap createHints() { PMap hints = new PMap(); + hints.putObject(CustomModel.KEY, Constants.SHORTEST_CUSTOM_MODEL); hints.putObject(PROFILE_KEY, this.profile.getName()); hints.putObject(Parameters.CH.DISABLE, true); return hints; diff --git a/map-matcher-library/src/test/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapterTest.java b/map-matcher-library/src/test/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapterTest.java index de183755..b9ad5bbd 100644 --- a/map-matcher-library/src/test/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapterTest.java +++ b/map-matcher-library/src/test/java/com/graphhopper/routing/querygraph/QueryGraphWeightingAdapterTest.java @@ -1,12 +1,14 @@ package com.graphhopper.routing.querygraph; +import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.InstanceOfAssertFactories.DOUBLE; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; import com.carrotsearch.hppc.IntArrayList; +import com.graphhopper.routing.ev.IntEncodedValue; +import com.graphhopper.routing.util.EncodingManager; import com.graphhopper.routing.weighting.Weighting; import com.graphhopper.storage.EdgeIteratorStateReverseExtractor; import com.graphhopper.util.EdgeIteratorState; @@ -19,17 +21,24 @@ @ExtendWith(MockitoExtension.class) class QueryGraphWeightingAdapterTest { - public static final int FIRST_VIRTUAL_NODE_ID = 3; - public static final int FIRST_VIRTUAL_EDGE_ID = 4; - public static final double WEIGHT = 1D; + private static final int FIRST_VIRTUAL_NODE_ID = 3; + private static final int FIRST_VIRTUAL_EDGE_ID = 4; + private static final int START_LINK_ID = 10; + private static final double WEIGHT = 1D; + private static final int NORMAL_EDGE_ID = 2; + private static final int VIRTUAL_EDGE_ID = 5; @Mock private Weighting weighting; @Mock private EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor; @Mock + private EncodingManager encodingManager; + @Mock private EdgeIteratorState edgeState; @Mock private IntArrayList closestEdges; + @Mock + private IntEncodedValue encodedValue; private QueryGraphWeightingAdapter adapter; @@ -39,26 +48,58 @@ void setup() { FIRST_VIRTUAL_EDGE_ID, closestEdges, edgeIteratorStateReverseExtractor, - false); + false, START_LINK_ID, encodingManager); + } + + @Test + void calcEdgeWeight_ok_virtual_edge_no_start_segment() { + when(edgeIteratorStateReverseExtractor.hasReversed(edgeState)).thenReturn(true); + when(edgeState.get(encodedValue)).thenReturn(0); + when(weighting.calcEdgeWeight(edgeState, false)).thenReturn(WEIGHT); + when(encodingManager.getIntEncodedValue(WAY_ID_KEY)).thenReturn(encodedValue); + when(edgeState.getEdge()).thenReturn(VIRTUAL_EDGE_ID); + + double weight = adapter.calcEdgeWeight(edgeState, false); + + assertThat(weight).isEqualTo(WEIGHT); + verify(weighting).calcEdgeWeight(edgeState, false); + } + + @Test + void calcEdgeWeight_ok_virtual_edge_search_direction_nok() { + when(edgeIteratorStateReverseExtractor.hasReversed(edgeState)).thenReturn(false); + when(weighting.calcEdgeWeight(edgeState, false)).thenReturn(WEIGHT); + when(edgeState.getEdge()).thenReturn(VIRTUAL_EDGE_ID); + double weight = adapter.calcEdgeWeight(edgeState, false); + + assertThat(weight).isEqualTo(WEIGHT); + + verify(weighting).calcEdgeWeight(edgeState, false); } @Test void calcEdgeWeight_ok_no_virtual_edge() { - when(weighting.calcEdgeWeight(edgeState, false)) - .thenReturn(WEIGHT); - when(edgeState.getEdge()).thenReturn(2); + when(weighting.calcEdgeWeight(edgeState, false)).thenReturn(WEIGHT); + when(edgeState.getEdge()).thenReturn(NORMAL_EDGE_ID); double weight = adapter.calcEdgeWeight(edgeState, false); assertThat(weight).isEqualTo(WEIGHT); + verify(weighting).calcEdgeWeight(edgeState, false); + verifyNoInteractions(edgeIteratorStateReverseExtractor); } @Test void calcEdgeWeight_ok_virtual_edge_no_access() { - when(edgeState.getEdge()).thenReturn(5); + when(edgeState.getEdge()).thenReturn(VIRTUAL_EDGE_ID); when(edgeIteratorStateReverseExtractor.hasReversed(edgeState)).thenReturn(true); + when(encodingManager.getIntEncodedValue(WAY_ID_KEY)).thenReturn(encodedValue); + when(edgeState.get(encodedValue)).thenReturn(START_LINK_ID); + double weight = adapter.calcEdgeWeight(edgeState, false); + assertThat(weight).isEqualTo(Double.POSITIVE_INFINITY); verifyNoInteractions(weighting); } + } diff --git a/map-matcher-library/src/test/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractorTest.java b/map-matcher-library/src/test/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractorTest.java new file mode 100644 index 00000000..a69af7ed --- /dev/null +++ b/map-matcher-library/src/test/java/com/graphhopper/storage/EdgeIteratorStateReverseExtractorTest.java @@ -0,0 +1,40 @@ +package com.graphhopper.storage; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; +import static org.mockito.Mockito.when; + +import com.graphhopper.storage.BaseGraph.EdgeIteratorStateImpl; +import com.graphhopper.util.EdgeIteratorState; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class EdgeIteratorStateReverseExtractorTest { + + @Mock + private EdgeIteratorStateImpl edgeIteratorStateImpl; + + @Mock + private EdgeIteratorState otherEdgeIteratorState; + + @Test + void getEdgeIteratorStateImpl_ok() { + + assertThat(EdgeIteratorStateReverseExtractor.getEdgeIteratorStateImpl(edgeIteratorStateImpl)).isEqualTo(edgeIteratorStateImpl); + } + + @Test + void getEdgeIteratorStateImpl_invalidObjectType() { + + when(otherEdgeIteratorState.toString()).thenReturn("object_toStringValue"); + + assertThat(catchThrowable( + () -> EdgeIteratorStateReverseExtractor.getEdgeIteratorStateImpl(otherEdgeIteratorState))) + .isExactlyInstanceOf(IllegalArgumentException.class) + .hasMessage( + "This method can only be called with an EdgeIteratorStateImpl instance of EdgeIteratorState object_toStringValue"); + } +} \ No newline at end of file diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneServiceTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneServiceTest.java index 85090e11..9c18ac92 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneServiceTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/IsochroneServiceTest.java @@ -12,7 +12,6 @@ import static org.mockito.Mockito.when; import com.graphhopper.config.Profile; -import com.graphhopper.routing.ev.BooleanEncodedValue; import com.graphhopper.routing.ev.DecimalEncodedValue; import com.graphhopper.routing.ev.VehicleSpeed; import com.graphhopper.routing.querygraph.QueryGraph; @@ -86,8 +85,7 @@ class IsochroneServiceTest { private EdgeIteratorState currentEdge; @Mock private DecimalEncodedValue decimalEncodedValue; - @Mock - private BooleanEncodedValue booleanEncodedValue; + @Captor private ArgumentCaptor maxDistanceArgumentCaptor; @@ -105,20 +103,29 @@ void getUpstreamIsochroneMatches_ok_meters() { when(location.getUpstreamIsochrone()).thenReturn(ISOCHRONE_VALUE_METERS); when(location.getUpstreamIsochroneUnit()).thenReturn(IsochroneUnit.METERS); - when(isochroneMatchMapper.mapToIsochroneMatch(isoLabel, ISOCHRONE_VALUE_METERS, queryGraph, startEdge)) + when(isochroneMatchMapper.mapToIsochroneMatch(isoLabel, ISOCHRONE_VALUE_METERS, queryGraph, startEdge, + true)) .thenReturn(IsochroneMatch.builder().build()); + wrapWithStaticMock(() -> isochroneService.getUpstreamIsochroneMatches(point, LINK_ID, REVERSED, location)); - verify(shortestPathTreeFactory).createShortestPathTreeByTimeDistanceAndWeight(null, queryGraph, - TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_METERS, IsochroneUnit.METERS, true); - } + verify(shortestPathTreeFactory).createShortestPathTreeByTimeDistanceAndWeight( + null, + queryGraph, + TraversalMode.EDGE_BASED, + ISOCHRONE_VALUE_METERS, + IsochroneUnit.METERS, + true, + REVERSED, + LINK_ID); + } @Test void getUpstreamIsochroneMatches_ok_seconds() { IsoLabel endLabel = createIsoLabel(200, 10800, 1, 2, 10800); setupFixture(); doSearchWithMockConsumer(endLabel); - when(profile.getVehicle()).thenReturn(VEHICLE_CAR); + when(profile.getName()).thenReturn(VEHICLE_CAR); when(location.getUpstreamIsochrone()).thenReturn(ISOCHRONE_VALUE_SECONDS); when(location.getUpstreamIsochroneUnit()).thenReturn(IsochroneUnit.SECONDS); @@ -128,9 +135,9 @@ void getUpstreamIsochroneMatches_ok_seconds() { when(currentEdge.getReverse(decimalEncodedValue)).thenReturn(REVERSE_SPEED); wrapWithStaticMock(() -> isochroneService.getUpstreamIsochroneMatches(point, LINK_ID, REVERSED, location)); verify(isochroneMatchMapper).mapToIsochroneMatch(eq(endLabel), maxDistanceArgumentCaptor.capture(), - eq(queryGraph), eq(startEdge)); + eq(queryGraph), eq(startEdge), eq(true)); verify(shortestPathTreeFactory).createShortestPathTreeByTimeDistanceAndWeight(null, queryGraph, - TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_SECONDS, IsochroneUnit.SECONDS, true); + TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_SECONDS, IsochroneUnit.SECONDS, true, REVERSED, LINK_ID); Double maxDistance = maxDistanceArgumentCaptor.getValue(); // The max distance based on 8 seconds will be around 200 - ((10.8-8) * 13.89 meters/second) ~ 161.1 meters assertThat(maxDistance).isCloseTo(161.1, Percentage.withPercentage(0.1)); @@ -141,7 +148,7 @@ void getDownstreamIsochroneMatches_ok_seconds() { IsoLabel endLabel = createIsoLabel(200, 10800, 1, 2, 10800); setupFixture(); doSearchWithMockConsumer(endLabel); - when(profile.getVehicle()).thenReturn(VEHICLE_CAR); + when(profile.getName()).thenReturn(VEHICLE_CAR); when(location.getDownstreamIsochrone()).thenReturn(ISOCHRONE_VALUE_SECONDS); when(location.getDownstreamIsochroneUnit()).thenReturn(IsochroneUnit.SECONDS); when(queryGraph.getEdgeIteratorState(anyInt(), anyInt())).thenReturn(currentEdge); @@ -150,9 +157,9 @@ void getDownstreamIsochroneMatches_ok_seconds() { when(currentEdge.get(decimalEncodedValue)).thenReturn(SPEED); wrapWithStaticMock(() -> isochroneService.getDownstreamIsochroneMatches(point, LINK_ID, REVERSED, location)); verify(isochroneMatchMapper).mapToIsochroneMatch(eq(endLabel), maxDistanceArgumentCaptor.capture(), - eq(queryGraph), eq(startEdge)); + eq(queryGraph), eq(startEdge), eq(false)); verify(shortestPathTreeFactory).createShortestPathTreeByTimeDistanceAndWeight(null, queryGraph, - TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_SECONDS, IsochroneUnit.SECONDS, false); + TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_SECONDS, IsochroneUnit.SECONDS, false, REVERSED, LINK_ID); Double maxDistance = maxDistanceArgumentCaptor.getValue(); // The max distance based on 8 seconds will be around 200 - ((10.8-8) * 27.77 meters/second) ~ 122.2 meters assertThat(maxDistance).isCloseTo(122.2, Percentage.withPercentage(0.1)); @@ -165,11 +172,12 @@ void getDownstreamIsochroneMatches_ok_meters() { doSearchWithMockConsumer(isoLabel); when(location.getDownstreamIsochrone()).thenReturn(ISOCHRONE_VALUE_METERS); when(location.getDownstreamIsochroneUnit()).thenReturn(IsochroneUnit.METERS); - when(isochroneMatchMapper.mapToIsochroneMatch(isoLabel, ISOCHRONE_VALUE_METERS, queryGraph, startEdge)) + when(isochroneMatchMapper.mapToIsochroneMatch(isoLabel, ISOCHRONE_VALUE_METERS, queryGraph, startEdge, + false)) .thenReturn(IsochroneMatch.builder().build()); wrapWithStaticMock(() -> isochroneService.getDownstreamIsochroneMatches(point, LINK_ID, REVERSED, location)); verify(shortestPathTreeFactory).createShortestPathTreeByTimeDistanceAndWeight(null, queryGraph, - TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_METERS, IsochroneUnit.METERS, false); + TraversalMode.EDGE_BASED, ISOCHRONE_VALUE_METERS, IsochroneUnit.METERS, false, REVERSED, LINK_ID); } private void wrapWithStaticMock(Runnable function) { @@ -182,7 +190,7 @@ private void wrapWithStaticMock(Runnable function) { private void doSearchWithMockConsumer(IsoLabel isoLabel) { when(startSegment.getClosestEdge()).thenReturn(startEdge); when(shortestPathTreeFactory.createShortestPathTreeByTimeDistanceAndWeight(any(), any(), any(), anyDouble(), - any(), anyBoolean())).thenReturn(isochroneByTimeDistanceAndWeight); + any(), anyBoolean(), anyBoolean(), eq(LINK_ID))).thenReturn(isochroneByTimeDistanceAndWeight); doAnswer(ans -> { Consumer callback = ans.getArgument(1, Consumer.class); callback.accept(isoLabel); @@ -190,7 +198,6 @@ private void doSearchWithMockConsumer(IsoLabel isoLabel) { }).when(isochroneByTimeDistanceAndWeight).search(eq(START_NODE_ID), any()); } - private void setupFixture() { when(point.getY()).thenReturn(Y_COORDINATE); when(point.getX()).thenReturn(X_COORDINATE); diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapperTest.java index 0dac8aa5..a20a2cfd 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapperTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/isochrone/mappers/IsochroneMatchMapperTest.java @@ -2,6 +2,7 @@ import static nu.ndw.nls.routingmapmatcher.isochrone.IsochroneTestHelper.createIsoLabel; import static nu.ndw.nls.routingmapmatcher.isochrone.IsochroneTestHelper.createIsoLabelWithNonRootParent; +import static nu.ndw.nls.routingmapmatcher.network.model.Link.REVERSED_LINK_ID; import static nu.ndw.nls.routingmapmatcher.network.model.Link.WAY_ID_KEY; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; @@ -43,6 +44,7 @@ class IsochroneMatchMapperTest { private static final Coordinate COORDINATE_3 = new Coordinate(5.430860, 52.174151); private static final int MATCHED_LINK_ID_ONE = 1; private static final int PARENT_LINK_ID = 2; + private static final int MATCHED_REVERSED_LINK_ID = 42; @Mock private QueryGraph queryGraph; @@ -53,19 +55,21 @@ class IsochroneMatchMapperTest { @Mock private EdgeIteratorState currentEdge; - @Mock private EdgeIteratorState parentEdge; - @Mock private EdgeIteratorState startEdge; + @Mock private EdgeIteratorStateReverseExtractor edgeIteratorStateReverseExtractor; @Mock private PointList pointList; @Mock - private IntEncodedValue intEncodedValue; + private IntEncodedValue matchedLinkIdEncodedValue; + @Mock + private IntEncodedValue matchedReversedLinkIdEncodedValue; + @Autowired private FractionAndDistanceCalculator fractionAndDistanceCalculator; @@ -75,9 +79,9 @@ class IsochroneMatchMapperTest { private IsochroneMatchMapper isochroneMatchMapper; - @BeforeEach void setup() { + GeometryFactory geometryFactory = new GeometryFactoryWgs84(); startSegmentWayGeometry = geometryFactory.createLineString(new Coordinate[]{ COORDINATE_1, @@ -94,92 +98,202 @@ void setup() { @Test void mapToIsochroneMatch_ok_parent() { + IsoLabel isoLabel = createIsoLabelWithNonRootParent(0, 0); - setupFixture(false, 0, isoLabel); + setupFixture(0, isoLabel); + when(pointListUtil.toLineString(pointList)).thenReturn(isoLabelWayGeometry); when(queryGraph.getEdgeIteratorState(isoLabel.getParent().getEdge(), isoLabel.getParent().getNode())) .thenReturn(parentEdge); - when(parentEdge.get(intEncodedValue)).thenReturn(PARENT_LINK_ID); + when(parentEdge.get(matchedLinkIdEncodedValue)).thenReturn(PARENT_LINK_ID); + when(edgeIteratorStateReverseExtractor.hasReversed(startEdge)).thenReturn(false); when(edgeIteratorStateReverseExtractor.hasReversed(parentEdge)).thenReturn(false); - IsochroneMatch result = isochroneMatchMapper.mapToIsochroneMatch(isoLabel, MAX_DISTANCE, queryGraph, startEdge); - assertThat(result.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); - assertThat(result.getStartFraction()).isEqualTo(0); - assertThat(result.getEndFraction()).isEqualTo(1.0); - assertThat(result.isReversed()).isFalse(); - assertThat(result.getGeometry()).isEqualTo(isoLabelWayGeometry); - assertThat(result.getParentLink().getLinkId()).isEqualTo(PARENT_LINK_ID); - assertThat(result.getParentLink().isReversed()).isFalse(); + + IsochroneMatch isochroneMatch = isochroneMatchMapper.mapToIsochroneMatch( + isoLabel, + MAX_DISTANCE, + queryGraph, + startEdge, + false); + + assertThat(isochroneMatch.getEdge()).isEqualTo(currentEdge); + assertThat(isochroneMatch.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); + assertThat(isochroneMatch.getStartFraction()).isEqualTo(0); + assertThat(isochroneMatch.getEndFraction()).isEqualTo(1.0); + assertThat(isochroneMatch.isReversed()).isFalse(); + assertThat(isochroneMatch.getGeometry()).isEqualTo(isoLabelWayGeometry); + assertThat(isochroneMatch.getParentLink().getLinkId()).isEqualTo(PARENT_LINK_ID); + assertThat(isochroneMatch.getParentLink().isReversed()).isFalse(); } @Test void mapToIsochroneMatch_ok_startSegment() { + IsoLabel isoLabel = createIsoLabel(0, 0); - setupFixtureStartSegment(false, isoLabel); - IsochroneMatch result = isochroneMatchMapper.mapToIsochroneMatch(isoLabel, MAX_DISTANCE, queryGraph, startEdge); - assertThat(result.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); - assertThat(result.getStartFraction()).isEqualTo(0); - assertThat(result.getEndFraction()).isEqualTo(0.6337610596812917); - assertThat(result.isReversed()).isFalse(); - assertThat(result.getGeometry()).isEqualTo(isoLabelWayGeometry); + setupFixtureStartSegment(isoLabel); + IsochroneMatch isochroneMatch = isochroneMatchMapper.mapToIsochroneMatch( + isoLabel, + MAX_DISTANCE, + queryGraph, + startEdge, + false); + + assertThat(isochroneMatch.getEdge()).isEqualTo(currentEdge); + assertThat(isochroneMatch.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); + assertThat(isochroneMatch.getStartFraction()).isEqualTo(0); + assertThat(isochroneMatch.getEndFraction()).isEqualTo(0.6337610596812917); + assertThat(isochroneMatch.isReversed()).isFalse(); + assertThat(isochroneMatch.getGeometry()).isEqualTo(isoLabelWayGeometry); } @Test void mapToIsochroneMatch_ok_startSegment_reversed() { + IsoLabel isoLabel = createIsoLabel(0, 0); - setupFixtureStartSegment(true, isoLabel); - IsochroneMatch result = isochroneMatchMapper.mapToIsochroneMatch(isoLabel, MAX_DISTANCE, queryGraph, startEdge); - assertThat(result.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); - assertThat(result.getStartFraction()).isEqualTo(0.3662389403187084); - assertThat(result.getEndFraction()).isEqualTo(1); - assertThat(result.isReversed()).isTrue(); - assertThat(result.getGeometry()).isEqualTo(isoLabelWayGeometry.reverse()); + setupFixtureReversedStartSegment(isoLabel); + IsochroneMatch isochroneMatch = isochroneMatchMapper.mapToIsochroneMatch( + isoLabel, + MAX_DISTANCE, + queryGraph, + startEdge, + false); + + assertThat(isochroneMatch.getEdge()).isEqualTo(currentEdge); + assertThat(isochroneMatch.getMatchedLinkId()).isEqualTo(MATCHED_REVERSED_LINK_ID); + assertThat(isochroneMatch.getStartFraction()).isEqualTo(0.6337610596812917); + assertThat(isochroneMatch.getEndFraction()).isEqualTo(0); + assertThat(isochroneMatch.isReversed()).isFalse(); + assertThat(isochroneMatch.getGeometry()).isEqualTo(isoLabelWayGeometry.reverse()); + } + + @Test + void mapToIsochroneMatch_ok_startSegment_reverseFlow() { + + IsoLabel isoLabel = createIsoLabel(0, 0); + setupFixtureReversedFlowStartSegment(isoLabel); + + IsochroneMatch isochroneMatch = isochroneMatchMapper.mapToIsochroneMatch( + isoLabel, + MAX_DISTANCE, + queryGraph, + startEdge, + true); + + assertThat(isochroneMatch.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); + assertThat(isochroneMatch.getStartFraction()).isEqualTo(0.3662389403187083); + assertThat(isochroneMatch.getEndFraction()).isEqualTo(1); + assertThat(isochroneMatch.isReversed()).isFalse(); + assertThat(isochroneMatch.getGeometry()).isEqualTo(isoLabelWayGeometry.reverse()); } @Test void mapToIsochroneMatch_ok_startSegment_croppedGeometry() { + IsoLabel isoLabel = createIsoLabel(250.30366999283603, 0); Geometry originalGeometry = isoLabelWayGeometry.copy(); - setupFixtureStartSegment(false, isoLabel); - IsochroneMatch result = isochroneMatchMapper.mapToIsochroneMatch(isoLabel, MAX_DISTANCE, queryGraph, startEdge); - assertThat(result.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); - assertThat(result.getStartFraction()).isEqualTo(0.0); - assertThat(result.getEndFraction()).isEqualTo(0.5063949887068743); - assertThat(result.isReversed()).isFalse(); - assertThat(result.getGeometry().getLength()).isLessThan(originalGeometry.getLength()); - double lengthInMeters = fractionAndDistanceCalculator.calculateLengthInMeters(result.getGeometry()); + setupFixtureStartSegment(isoLabel); + + IsochroneMatch isochroneMatch = isochroneMatchMapper.mapToIsochroneMatch( + isoLabel, + MAX_DISTANCE, + queryGraph, + startEdge, + false); + + assertThat(isochroneMatch.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); + assertThat(isochroneMatch.getStartFraction()).isEqualTo(0.0); + assertThat(isochroneMatch.getEndFraction()).isEqualTo(0.5063949887068743); + assertThat(isochroneMatch.isReversed()).isFalse(); + assertThat(isochroneMatch.getGeometry().getLength()).isLessThan(originalGeometry.getLength()); + + double lengthInMeters = fractionAndDistanceCalculator.calculateLengthInMeters(isochroneMatch.getGeometry()); assertThat(lengthInMeters).isCloseTo(MAX_DISTANCE, Percentage.withPercentage(0.0001)); } @Test void mapToIsochroneMatch_ok_croppedGeometry() { + Geometry originalGeometry = isoLabelWayGeometry.copy(); IsoLabel isoLabel = createIsoLabel(250.30366999283603, 0); - setupFixture(false, 2, isoLabel); + setupFixture(2, isoLabel); + when(pointListUtil.toLineString(pointList)).thenReturn(isoLabelWayGeometry); - IsochroneMatch result = isochroneMatchMapper.mapToIsochroneMatch(isoLabel, MAX_DISTANCE, queryGraph, startEdge); - assertThat(result.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); - assertThat(result.getStartFraction()).isEqualTo(0.0); - assertThat(result.getEndFraction()).isEqualTo(0.7990314030362362); - assertThat(result.isReversed()).isFalse(); - assertThat(result.getGeometry().getLength()).isLessThan(originalGeometry.getLength()); - double lengthInMeters = fractionAndDistanceCalculator.calculateLengthInMeters(result.getGeometry()); + + IsochroneMatch isochroneMatch = isochroneMatchMapper.mapToIsochroneMatch( + isoLabel, + MAX_DISTANCE, + queryGraph, + startEdge, + false); + + assertThat(isochroneMatch.getMatchedLinkId()).isEqualTo(MATCHED_LINK_ID_ONE); + assertThat(isochroneMatch.getStartFraction()).isEqualTo(0.0); + assertThat(isochroneMatch.getEndFraction()).isEqualTo(0.7990314030362362); + assertThat(isochroneMatch.isReversed()).isFalse(); + assertThat(isochroneMatch.getGeometry().getLength()).isLessThan(originalGeometry.getLength()); + + double lengthInMeters = fractionAndDistanceCalculator.calculateLengthInMeters(isochroneMatch.getGeometry()); assertThat(lengthInMeters).isCloseTo(MAX_DISTANCE, Percentage.withPercentage(0.0001)); } - private void setupFixtureStartSegment(boolean reversed, IsoLabel isoLabel) { + private void setupFixtureStartSegment(IsoLabel isoLabel) { + + // If reversed EdgeIterator returns reversed geometry + LineString wayGeometry = isoLabelWayGeometry; + setupFixture(MATCHED_LINK_ID_ONE, isoLabel); + when(edgeIteratorStateReverseExtractor.hasReversed(startEdge)).thenReturn(false); + when(startEdge.fetchWayGeometry(FetchMode.ALL)).thenReturn(pointList); + when(pointListUtil.toLineString(pointList)).thenReturn(wayGeometry, startSegmentWayGeometry); + } + + private void setupFixtureReversedStartSegment(IsoLabel isoLabel) { + // If reversed EdgeIterator returns reversed geometry - LineString wayGeometry = reversed ? isoLabelWayGeometry.reverse() : isoLabelWayGeometry; - setupFixture(reversed, MATCHED_LINK_ID_ONE, isoLabel); + LineString wayGeometry = isoLabelWayGeometry.reverse(); + setupFixtureReversed(MATCHED_REVERSED_LINK_ID, isoLabel); + when(edgeIteratorStateReverseExtractor.hasReversed(startEdge)).thenReturn(true); when(startEdge.fetchWayGeometry(FetchMode.ALL)).thenReturn(pointList); when(pointListUtil.toLineString(pointList)).thenReturn(wayGeometry, startSegmentWayGeometry); } - private void setupFixture(boolean reversed, int startSegmentId, IsoLabel isoLabel) { + private void setupFixtureReversedFlowStartSegment(IsoLabel isoLabel) { + + // If reversed EdgeIterator returns reversed geometry + LineString wayGeometry = isoLabelWayGeometry; + setupFixtureReversedFlow(MATCHED_LINK_ID_ONE, isoLabel); + when(edgeIteratorStateReverseExtractor.hasReversed(currentEdge)).thenReturn(true); + when(edgeIteratorStateReverseExtractor.hasReversed(startEdge)).thenReturn(true); + when(startEdge.fetchWayGeometry(FetchMode.ALL)).thenReturn(pointList); + when(pointListUtil.toLineString(pointList)).thenReturn(wayGeometry, startSegmentWayGeometry); + } + + private void setupFixture(int linkId, IsoLabel isoLabel) { + + when(queryGraph.getEdgeIteratorState(isoLabel.getEdge(), isoLabel.getNode())).thenReturn(currentEdge); + when(edgeIteratorStateReverseExtractor.hasReversed(currentEdge)).thenReturn(false); + when(encodingManager.getIntEncodedValue(WAY_ID_KEY)).thenReturn(matchedLinkIdEncodedValue); + when(currentEdge.get(matchedLinkIdEncodedValue)).thenReturn(MATCHED_LINK_ID_ONE); + when(startEdge.get(matchedLinkIdEncodedValue)).thenReturn(linkId); + when(currentEdge.fetchWayGeometry(FetchMode.ALL)).thenReturn(pointList); + } + + private void setupFixtureReversed(int linkId, IsoLabel isoLabel) { + + when(queryGraph.getEdgeIteratorState(isoLabel.getEdge(), isoLabel.getNode())).thenReturn(currentEdge); + when(edgeIteratorStateReverseExtractor.hasReversed(currentEdge)).thenReturn(true); + when(encodingManager.getIntEncodedValue(REVERSED_LINK_ID)).thenReturn(matchedReversedLinkIdEncodedValue); + when(currentEdge.get(matchedReversedLinkIdEncodedValue)).thenReturn(MATCHED_REVERSED_LINK_ID); + when(startEdge.get(matchedReversedLinkIdEncodedValue)).thenReturn(linkId); + when(currentEdge.fetchWayGeometry(FetchMode.ALL)).thenReturn(pointList); + } + + private void setupFixtureReversedFlow(int linkId, IsoLabel isoLabel) { + when(queryGraph.getEdgeIteratorState(isoLabel.getEdge(), isoLabel.getNode())).thenReturn(currentEdge); - when(edgeIteratorStateReverseExtractor.hasReversed(currentEdge)).thenReturn(reversed, false); - when(encodingManager.getIntEncodedValue(WAY_ID_KEY)).thenReturn(intEncodedValue); - when(currentEdge.get(intEncodedValue)).thenReturn(MATCHED_LINK_ID_ONE); - when(startEdge.get(intEncodedValue)).thenReturn(startSegmentId); + when(edgeIteratorStateReverseExtractor.hasReversed(currentEdge)).thenReturn(true); + when(encodingManager.getIntEncodedValue(WAY_ID_KEY)).thenReturn(matchedLinkIdEncodedValue); + when(currentEdge.get(matchedLinkIdEncodedValue)).thenReturn(MATCHED_LINK_ID_ONE); + when(startEdge.get(matchedLinkIdEncodedValue)).thenReturn(linkId); when(currentEdge.fetchWayGeometry(FetchMode.ALL)).thenReturn(pointList); } } diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/CustomRoutingWithRestrictionsTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/CustomRoutingWithRestrictionsTest.java index 5834f276..42cc15f2 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/CustomRoutingWithRestrictionsTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/CustomRoutingWithRestrictionsTest.java @@ -1,5 +1,6 @@ package nu.ndw.nls.routingmapmatcher.network; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.HGV_ACCESSIBLE_KEY; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.getTestNetwork; import static org.assertj.core.api.Assertions.assertThat; @@ -24,8 +25,6 @@ @Slf4j public class CustomRoutingWithRestrictionsTest { - private static final String CAR_FASTEST = "car_fastest"; - private static final Coordinate START_NODE = new Coordinate(5.108409, 52.081079); private static final Coordinate NODE_A = new Coordinate(5.1099461, 52.0794303); private static final Coordinate NODE_B = new Coordinate(5.1110934, 52.0782690); @@ -100,7 +99,7 @@ private static void liftHgvRestriction(NetworkGraphHopper graphHopper) { private static GHRequest getRequest(GHPoint from, GHPoint to) { return new GHRequest() - .setProfile(CAR_FASTEST) + .setProfile(CAR) .addPoint(from) .addPoint(to); } diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProviderTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProviderTest.java index 80f4b19f..b8f8959e 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProviderTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/LinkVehicleMapperProviderTest.java @@ -88,22 +88,21 @@ private LinkVehicleMapper mockVehicle(Class linkClass, St private static class TestALink extends Link { public TestALink() { - super(0, 1, 2, 5.0, null); + super(0, 1, 2, 5.0, null, null); } } private static class TestBLink extends Link { public TestBLink() { - super(0, 1, 2, 5.0, null); + super(0, 1, 2, 5.0, null, null); } } private static class TestCLink extends Link { public TestCLink() { - super(0, 1, 2, 5.0, null); + super(0, 1, 2, 5.0, null, null); } } - -} \ No newline at end of file +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapperTest.java index 8578e91c..4b6f4dcd 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapperTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/DirectionalFieldGenericTypeArgumentMapperTest.java @@ -14,7 +14,6 @@ class DirectionalFieldGenericTypeArgumentMapperTest { private final DirectionalFieldGenericTypeArgumentMapper directionalFieldGenericTypeArgumentMapper = new DirectionalFieldGenericTypeArgumentMapper(); - @Getter @Setter private static class TestDto extends Link { @@ -24,7 +23,7 @@ private static class TestDto extends Link { private DirectionalDto integerField; protected TestDto(long id, long fromNodeId, long toNodeId, double distanceInMeters, LineString geometry) { - super(id, fromNodeId, toNodeId, distanceInMeters, geometry); + super(id, fromNodeId, toNodeId, distanceInMeters, geometry, null); } } @@ -33,7 +32,4 @@ void map() { assertEquals(String.class, directionalFieldGenericTypeArgumentMapper.map(TestDto.class, "stringField")); assertEquals(Integer.class, directionalFieldGenericTypeArgumentMapper.map(TestDto.class, "integerField")); } - - - -} \ No newline at end of file +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/EncodedValuesMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/EncodedValuesMapperTest.java index e5613693..1d295da4 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/EncodedValuesMapperTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/annotations/mappers/EncodedValuesMapperTest.java @@ -21,7 +21,6 @@ class EncodedValuesMapperTest { private final EncodedValuesMapper encodedValuesMapper = new EncodedValuesMapper(new AnnotationMapper(), new DirectionalFieldGenericTypeArgumentMapper()); - @Getter public static class MyLink extends Link { @@ -29,12 +28,11 @@ public static class MyLink extends Link { protected MyLink(long id, long fromNodeId, long toNodeId, double distanceInMeters, LineString geometry, Boolean booleanField, DirectionalDto directionalInteger) { super(id, fromNodeId, toNodeId, distanceInMeters, - geometry); + geometry, null); this.booleanField = booleanField; this.directionalInteger = directionalInteger; } - @EncodedValue(key = "booleanField") private final Boolean booleanField; @@ -74,8 +72,6 @@ void map() { assertNull(id.valueReverseSupplier()); assertEquals(1L, id.valueSupplier().apply(myLinkInstance)); - - EncodedValueDto booleanField = map.get(Boolean.class, "booleanField"); assertEquals("booleanField", booleanField.key()); assertEquals( Boolean.class, booleanField.valueType()); @@ -85,7 +81,6 @@ void map() { assertNull(booleanField.valueReverseSupplier()); assertTrue(booleanField.valueSupplier().apply(myLinkInstance)); - EncodedValueDto directionalIntegerField = map.get(Integer.class, "directionalInteger"); assertEquals("directionalInteger", directionalIntegerField.key()); assertEquals( Integer.class, directionalIntegerField.valueType()); @@ -95,6 +90,5 @@ void map() { assertNotNull(directionalIntegerField.valueReverseSupplier()); assertEquals(10, directionalIntegerField.valueSupplier().apply(myLinkInstance)); assertEquals(20, directionalIntegerField.valueReverseSupplier().apply(myLinkInstance)); - } -} \ No newline at end of file +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedMapperFactoryTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedMapperFactoryTest.java deleted file mode 100644 index 5b1dd750..00000000 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedMapperFactoryTest.java +++ /dev/null @@ -1,132 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.annotation; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.when; - -import com.graphhopper.routing.ev.EncodedValueLookup; -import com.graphhopper.util.PMap; -import java.util.Optional; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValueDto; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.mappers.AbstractEncodedMapper; -import nu.ndw.nls.routingmapmatcher.network.model.Link; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.locationtech.jts.geom.LineString; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class AnnotatedEncodedMapperFactoryTest { - - public static final String FIELD_KEY_BOOLEAN = "field_key_boolean"; - public static final String FIELD_KEY_STRING = "field_key_string"; - - private static class MyLink extends Link { - - public MyLink(long id, long fromNodeId, long toNodeId, double distanceInMeters, LineString geometry) { - super(id, fromNodeId, toNodeId, distanceInMeters, geometry); - } - } - - @Mock - private EncodedMapperFactoryRegistry encodedMapperFactoryRegistry; - @Mock - private nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedMapperFactory booleanEncodedMapperFactory; - - @Mock - private nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedMapperFactory stringEncodedMapperFactory; - - @Mock - private EncodedValuesByTypeDto encodedValuesByTypeDto; - - @Mock - private EncodedValueLookup encodedValueLookup; - - @Mock - private PMap map; - - @Mock - private AbstractEncodedMapper booleanEncodedMapper; - - @Mock - private AbstractEncodedMapper stringEncodedMapper; - - @Mock - private EncodedValueDto fieldKeyBooleanEncodedValueInstance; - @Mock - private EncodedValueDto fieldKeyStringEncodedValueInstance; - - - @Test - void create_ok_createsEncodedMappers() { - when(encodedMapperFactoryRegistry.lookupEncodedMapperFactory(Boolean.class)) - .thenReturn(Optional.of(booleanEncodedMapperFactory)); - - when(encodedMapperFactoryRegistry.lookupEncodedMapperFactory(String.class)) - .thenReturn(Optional.of(stringEncodedMapperFactory)); - - when(encodedValuesByTypeDto.getValueTypeByKey(FIELD_KEY_BOOLEAN)).thenReturn(Optional.of(Boolean.class)); - when(encodedValuesByTypeDto.get(Boolean.class, FIELD_KEY_BOOLEAN)).thenReturn( - fieldKeyBooleanEncodedValueInstance); - when(encodedValuesByTypeDto.getValueTypeByKey(FIELD_KEY_STRING)).thenReturn(Optional.of(String.class)); - when(encodedValuesByTypeDto.get(String.class, FIELD_KEY_STRING)).thenReturn(fieldKeyStringEncodedValueInstance); - - when(booleanEncodedMapperFactory.create(encodedValueLookup, fieldKeyBooleanEncodedValueInstance)).thenReturn( - booleanEncodedMapper); - - when(stringEncodedMapperFactory.create(encodedValueLookup, fieldKeyStringEncodedValueInstance)).thenReturn( - stringEncodedMapper); - - AnnotatedEncodedMapperFactory annotatedEncodedMapperFactory = - new AnnotatedEncodedMapperFactory<>(encodedMapperFactoryRegistry, encodedValuesByTypeDto); - - assertEquals(booleanEncodedMapper, - annotatedEncodedMapperFactory.create(encodedValueLookup, FIELD_KEY_BOOLEAN, map)); - assertEquals(stringEncodedMapper, annotatedEncodedMapperFactory.create(encodedValueLookup, FIELD_KEY_STRING, map)); - } - - /** - * This scenario can occur when an {@link nu.ndw.nls.routingmapmatcher.network.annotations.EncodedValue} is applied - * on a type for which there is no encoded mapper factory in the spring boot context - */ - @Test - void create_fail_missingEncodedFactoryForType() { - when(encodedMapperFactoryRegistry.lookupEncodedMapperFactory(Boolean.class)) - .thenReturn(Optional.empty()); - - when(encodedValuesByTypeDto.getValueTypeByKey(FIELD_KEY_BOOLEAN)).thenReturn(Optional.of(Boolean.class)); - - AnnotatedEncodedMapperFactory annotatedEncodedMapperFactory = - new AnnotatedEncodedMapperFactory<>(encodedMapperFactoryRegistry, encodedValuesByTypeDto); - - IllegalStateException illegalStateException = assertThrows(IllegalStateException.class, () -> { - annotatedEncodedMapperFactory.create(encodedValueLookup, FIELD_KEY_BOOLEAN, map); - }); - - - assertEquals("No tag parser found for name: field_key_boolean with type: class java.lang.Boolean", - illegalStateException.getMessage()); - } - - /** - * This scenario should never occur, because it means that GraphHopper tries to encode a value for which there - * is no annotated configuration. If there is no annotated configuration, then the field shouldn't be encoded in - * the first place. - */ - @Test - void create_fail_incorrectState() { - when(encodedValuesByTypeDto.getValueTypeByKey(FIELD_KEY_BOOLEAN)).thenReturn(Optional.empty()); - - AnnotatedEncodedMapperFactory annotatedEncodedMapperFactory = - new AnnotatedEncodedMapperFactory<>(encodedMapperFactoryRegistry, encodedValuesByTypeDto); - - IllegalStateException illegalStateException = assertThrows(IllegalStateException.class, () -> { - annotatedEncodedMapperFactory.create(encodedValueLookup, FIELD_KEY_BOOLEAN, map); - }); - - assertEquals("No annotate encoded value configuration found by name: field_key_boolean", - illegalStateException.getMessage()); - } -} \ No newline at end of file diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedValueFactoryTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedValueFactoryTest.java deleted file mode 100644 index ecb365c4..00000000 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/AnnotatedEncodedValueFactoryTest.java +++ /dev/null @@ -1,99 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.annotation; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import com.graphhopper.util.PMap; -import java.util.Optional; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValueDto; -import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; -import nu.ndw.nls.routingmapmatcher.network.init.annotation.encodedvaluefactories.EncodedValueFactory; -import nu.ndw.nls.routingmapmatcher.network.model.Link; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.locationtech.jts.geom.LineString; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class AnnotatedEncodedValueFactoryTest { - - public static final String VALUE_KEY_A = "value_key_a"; - - private static class MyLink extends Link { - protected MyLink(long id, long fromNodeId, long toNodeId, double distanceInMeters, - LineString geometry) { - super(id, fromNodeId, toNodeId, distanceInMeters, geometry); - } - } - - @Mock - private EncodedValueFactoryRegistry encodedValueFactoryRegistry; - - @Mock - private EncodedValuesByTypeDto encodedValuesByTypeDto; - - @Mock - private EncodedValueDto encodedValueDtoString; - - @Mock - private EncodedValueFactory stringEncodedValueFactory; - - @Mock - private PMap map; - - @InjectMocks - private AnnotatedEncodedValueFactory annotatedEncodedValueFactory; - - - @Test - void create_ok_encodesType() { - when(encodedValuesByTypeDto.getValueTypeByKey(VALUE_KEY_A)) - .thenReturn(Optional.of(String.class)); - when(encodedValuesByTypeDto.get(String.class, VALUE_KEY_A)).thenReturn(encodedValueDtoString); - - when(encodedValueFactoryRegistry.lookupEncodedValueFactory(String.class)) - .thenReturn(Optional.of(stringEncodedValueFactory)); - - annotatedEncodedValueFactory.create(VALUE_KEY_A, map); - - verify(stringEncodedValueFactory).encode(encodedValueDtoString); - } - - @Test - void create_fail_noEncodedValueDtoFound() { - when(encodedValuesByTypeDto.getValueTypeByKey(VALUE_KEY_A)) - .thenReturn(Optional.empty()); - - IllegalStateException illegalStateException = assertThrows(IllegalStateException.class, - () -> annotatedEncodedValueFactory.create(VALUE_KEY_A, map)); - - assertEquals("Field requested for which there is no encoded value annotation: value_key_a", - illegalStateException.getMessage()); - - verify(stringEncodedValueFactory, never()).encode(encodedValueDtoString); - } - - @Test - void create_fail_noEncodedValueFactoryFoundForType() { - when(encodedValuesByTypeDto.getValueTypeByKey(VALUE_KEY_A)) - .thenReturn(Optional.of(String.class)); - when(encodedValuesByTypeDto.get(String.class, VALUE_KEY_A)).thenReturn(encodedValueDtoString); - - when(encodedValueFactoryRegistry.lookupEncodedValueFactory(String.class)) - .thenReturn(Optional.empty()); - - IllegalStateException illegalStateException = assertThrows(IllegalStateException.class, - () -> annotatedEncodedValueFactory.create(VALUE_KEY_A, map)); - - assertEquals("No encoded value factory found for name: value_key_a with type: class java.lang.String", - illegalStateException.getMessage()); - - - verify(stringEncodedValueFactory,never()).encode(encodedValueDtoString); - } -} \ No newline at end of file diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/mappers/AbstractEncodedValueMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/mappers/AbstractEncodedValueMapperTest.java index d3ed3f97..b63797e3 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/mappers/AbstractEncodedValueMapperTest.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/annotation/mappers/AbstractEncodedValueMapperTest.java @@ -26,7 +26,7 @@ class AbstractEncodedValueMapperTest { private static class MyLink extends Link { protected MyLink(long id, long fromNodeId, long toNodeId, double distanceInMeters, LineString geometry) { - super(id, fromNodeId, toNodeId, distanceInMeters, geometry); + super(id, fromNodeId, toNodeId, distanceInMeters, geometry, null); } } @@ -176,4 +176,4 @@ private void assertReverseSetNotInvoked(EncodedValueMapper annotatedParser) { assertNull(annotatedParser.getEdgeIntAccessReverse()); assertNull(annotatedParser.getValueReverse()); } -} \ No newline at end of file +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/CustomVehicleEncodedValuesFactoryTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/CustomVehicleEncodedValuesFactoryTest.java deleted file mode 100644 index 4ab147e2..00000000 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/CustomVehicleEncodedValuesFactoryTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.vehicle; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNull; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import com.graphhopper.routing.util.VehicleEncodedValues; -import com.graphhopper.util.PMap; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class CustomVehicleEncodedValuesFactoryTest { - - @Mock - PMap properties; - - @InjectMocks - CustomVehicleEncodedValuesFactory factory; - - @Test - void createVehicleEncodedValues_ok() { - - VehicleEncodedValues result = factory.createVehicleEncodedValues("vehicle_name", properties); - - assertEquals("vehicle_name", result.getName()); - assertEquals("vehicle_name_access", result.getAccessEnc().getName()); - assertEquals("vehicle_name_average_speed", result.getAverageSpeedEnc().getName()); - assertEquals("vehicle_name_turn_restriction", result.getTurnRestrictionEnc().getName()); - - } - -} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkImportRegistryTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkImportRegistryTest.java new file mode 100644 index 00000000..7ed22c3c --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkImportRegistryTest.java @@ -0,0 +1,90 @@ +package nu.ndw.nls.routingmapmatcher.network.init.vehicle; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +import com.graphhopper.routing.ev.DefaultImportRegistry; +import com.graphhopper.routing.ev.ImportUnit; +import java.util.Map; +import java.util.Optional; +import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValueDto; +import nu.ndw.nls.routingmapmatcher.network.annotations.model.EncodedValuesByTypeDto; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.EncodedMapperFactoryRegistry; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.EncodedValueFactoryRegistry; +import nu.ndw.nls.routingmapmatcher.network.init.annotation.encodedvaluefactories.EncodedValueFactory; +import nu.ndw.nls.routingmapmatcher.network.model.Link; +import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; +import nu.ndw.nls.routingmapmatcher.network.model.ProfileAccessAndSpeedAttributes; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class LinkImportRegistryTest { + + public static final String TEST_ATTRIBUTE = "test_attribute"; + @Mock + private EncodedValuesByTypeDto encodedValuesByTypeDto; + @Mock + private EncodedValueFactoryRegistry encodedValueFactoryRegistry; + @Mock + private EncodedMapperFactoryRegistry classToEncodedMapperFactory; + @Mock + private Map> linkMappersByVehicleType; + @Mock + private DefaultImportRegistry defaultImportRegistry; + @Mock + private ProfileAccessAndSpeedAttributes profileAccessAndSpeedAttributes; + @Mock + private ImportUnit importUnit; + @Mock + private EncodedValueDto encodedValueDto; + @Mock + private EncodedValueFactory encodedValueFactory; + + @InjectMocks + private LinkImportRegistry linkImportRegistry; + + @Test + void createImportUnit_ok() { + when(profileAccessAndSpeedAttributes.isSpeedAttribute(TEST_ATTRIBUTE)) + .thenReturn(false); + when(profileAccessAndSpeedAttributes.isAccessAttribute(TEST_ATTRIBUTE)) + .thenReturn(false); + when(encodedValuesByTypeDto.getValueTypeByKey(TEST_ATTRIBUTE)) + .thenReturn(Optional.of(String.class)); + ImportUnit result = linkImportRegistry.createImportUnit(TEST_ATTRIBUTE); + assertThat(result).isNotNull(); + } + + @Test + void createImportUnit_ok_access_attribute() { + when(profileAccessAndSpeedAttributes.isSpeedAttribute(TEST_ATTRIBUTE)) + .thenReturn(false); + when(profileAccessAndSpeedAttributes.isAccessAttribute(TEST_ATTRIBUTE)) + .thenReturn(true); + ImportUnit result = linkImportRegistry.createImportUnit(TEST_ATTRIBUTE); + assertThat(result).isNotNull(); + } + + @Test + void createImportUnit_ok_speed_attribute() { + when(profileAccessAndSpeedAttributes.isSpeedAttribute(TEST_ATTRIBUTE)) + .thenReturn(true); + ImportUnit result = linkImportRegistry.createImportUnit(TEST_ATTRIBUTE); + assertThat(result).isNotNull(); + } + + @Test + void createImportUnit_ok_default_import_registry() { + when(profileAccessAndSpeedAttributes.isSpeedAttribute(TEST_ATTRIBUTE)) + .thenReturn(false); + when(profileAccessAndSpeedAttributes.isAccessAttribute(TEST_ATTRIBUTE)) + .thenReturn(false); + when(defaultImportRegistry.createImportUnit(TEST_ATTRIBUTE)).thenReturn(importUnit); + ImportUnit result = linkImportRegistry.createImportUnit(TEST_ATTRIBUTE); + assertThat(result).isEqualTo(importUnit); + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkVehicleParserFactoryTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkVehicleParserFactoryTest.java deleted file mode 100644 index 27172e46..00000000 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/init/vehicle/LinkVehicleParserFactoryTest.java +++ /dev/null @@ -1,62 +0,0 @@ -package nu.ndw.nls.routingmapmatcher.network.init.vehicle; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertInstanceOf; -import static org.mockito.Mockito.when; - -import com.graphhopper.routing.ev.BooleanEncodedValue; -import com.graphhopper.routing.ev.DecimalEncodedValue; -import com.graphhopper.routing.ev.EncodedValueLookup; -import com.graphhopper.routing.util.VehicleTagParsers; -import com.graphhopper.util.PMap; -import java.util.Map; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.parsers.LinkAccessParser; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.parsers.LinkAverageSpeedParser; -import nu.ndw.nls.routingmapmatcher.network.model.Link; -import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.InjectMocks; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -@ExtendWith(MockitoExtension.class) -class LinkVehicleParserFactoryTest { - - private static final String NAME = "vehicle_name"; - - @Mock - private Map> linkVehicleMapperMap; - @Mock - private LinkVehicleMapper linkVehicleMapper; - @Mock - private EncodedValueLookup encodedValueLookup; - @Mock - private BooleanEncodedValue encodedAccess; - @Mock - private DecimalEncodedValue encodedSpeed; - @Mock - PMap properties; - - @InjectMocks - private LinkVehicleParserFactory linkVehicleParserFactory; - - @Test - void createParsers_ok() { - when(linkVehicleMapperMap.get(NAME)).thenReturn(linkVehicleMapper); - when(encodedValueLookup.getBooleanEncodedValue("vehicle_name_access")).thenReturn(encodedAccess); - when(encodedValueLookup.getDecimalEncodedValue("vehicle_name_average_speed")).thenReturn(encodedSpeed); - - VehicleTagParsers result = linkVehicleParserFactory.createParsers(encodedValueLookup, NAME, properties); - - LinkAccessParser accessParser = assertInstanceOf(LinkAccessParser.class, result.getAccessParser()); - assertEquals(linkVehicleMapper, accessParser.getLinkVehicleMapper()); - assertEquals(encodedAccess, accessParser.getAccessEnc()); - - LinkAverageSpeedParser averageSpeedParser = assertInstanceOf(LinkAverageSpeedParser.class, - result.getSpeedParser()); - assertEquals(linkVehicleMapper, averageSpeedParser.getLinkVehicleMapper()); - assertEquals(encodedSpeed, averageSpeedParser.getAverageSpeedEnc()); - } - -} \ No newline at end of file diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/CustomModelMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/CustomModelMapperTest.java new file mode 100644 index 00000000..3bd716cb --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/CustomModelMapperTest.java @@ -0,0 +1,42 @@ +package nu.ndw.nls.routingmapmatcher.network.mappers; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +import com.graphhopper.config.Profile; +import com.graphhopper.json.Statement; +import com.graphhopper.util.CustomModel; +import java.util.List; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class CustomModelMapperTest { + + @Mock + private SpeedAndAccessAttributeMapper speedAndAccessAttributeMapper; + @Mock + private Profile profile; + @InjectMocks + private CustomModelMapper customModelMapper; + + @Test + void mapToCustomModel_ok() { + when(speedAndAccessAttributeMapper.mapToAccessAttribute(profile)) + .thenReturn("car_access"); + when(speedAndAccessAttributeMapper.mapToSpeedAttribute(profile)) + .thenReturn("car_average_speed"); + CustomModel customModel = customModelMapper.mapToCustomModel(profile); + List speedStatements = customModel.getSpeed(); + List accessStatements = customModel.getPriority(); + assertThat(speedStatements).hasSize(1); + assertThat(accessStatements).hasSize(1); + assertThat(speedStatements.getFirst().toString()) + .isEqualTo("{\"if\": \"true\", \"limit_to\": car_average_speed}"); + assertThat(accessStatements.getFirst().toString()) + .isEqualTo("{\"if\": \"car_access == false\", \"multiply_by\": 0}"); + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/ProfileAccessAndSpeedAttributesMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/ProfileAccessAndSpeedAttributesMapperTest.java new file mode 100644 index 00000000..43baa76c --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/ProfileAccessAndSpeedAttributesMapperTest.java @@ -0,0 +1,42 @@ +package nu.ndw.nls.routingmapmatcher.network.mappers; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +import com.graphhopper.config.Profile; +import java.util.List; +import nu.ndw.nls.routingmapmatcher.network.model.ProfileAccessAndSpeedAttributes; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class ProfileAccessAndSpeedAttributesMapperTest { + + private static final String CAR_ACCESS = "car_access"; + private static final String CAR_AVERAGE_SPEED = "car_average_speed"; + @Mock + private SpeedAndAccessAttributeMapper speedAndAccessAttributeMapper; + @Mock + private Profile profile; + @InjectMocks + private ProfileAccessAndSpeedAttributesMapper mapper; + + @Test + void map_ok() { + when(speedAndAccessAttributeMapper.mapToAccessAttribute(profile)) + .thenReturn(CAR_ACCESS); + when(speedAndAccessAttributeMapper.mapToSpeedAttribute(profile)) + .thenReturn(CAR_AVERAGE_SPEED); + ProfileAccessAndSpeedAttributes result = mapper.map(List.of(profile)); + ProfileAccessAndSpeedAttributes expected = ProfileAccessAndSpeedAttributes + .builder() + .speedAttributes(List.of(CAR_AVERAGE_SPEED)) + .accessAttributes(List.of(CAR_ACCESS)) + .build(); + assertThat(result).isEqualTo(expected); + + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/SpeedAndAccessAttributeMapperTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/SpeedAndAccessAttributeMapperTest.java new file mode 100644 index 00000000..43a789b3 --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/mappers/SpeedAndAccessAttributeMapperTest.java @@ -0,0 +1,39 @@ +package nu.ndw.nls.routingmapmatcher.network.mappers; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; + +import com.graphhopper.config.Profile; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; + +@ExtendWith(MockitoExtension.class) +class SpeedAndAccessAttributeMapperTest { + + private static final String CAR = "car"; + @Mock + private Profile profile; + private SpeedAndAccessAttributeMapper mapper; + + @BeforeEach + void setUp() { + mapper = new SpeedAndAccessAttributeMapper(); + } + + @Test + void mapToSpeedAttribute() { + when(profile.getName()).thenReturn(CAR); + assertThat(mapper.mapToSpeedAttribute(profile)) + .isEqualTo("car_average_speed"); + } + + @Test + void mapToAccessAttribute() { + when(profile.getName()).thenReturn(CAR); + assertThat(mapper.mapToAccessAttribute(profile)) + .isEqualTo("car_access"); + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/model/ProfileAccessAndSpeedAttributesTest.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/model/ProfileAccessAndSpeedAttributesTest.java new file mode 100644 index 00000000..9fa46a94 --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/network/model/ProfileAccessAndSpeedAttributesTest.java @@ -0,0 +1,61 @@ +package nu.ndw.nls.routingmapmatcher.network.model; + +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class ProfileAccessAndSpeedAttributesTest { + + private static final String CAR_ACCESS = "car_access"; + private static final String CAR_AVERAGE_SPEED = "car_average_speed"; + private static final String CAR = "car"; + private ProfileAccessAndSpeedAttributes profileAccessAndSpeedAttributes; + + @BeforeEach + void setUp() { + profileAccessAndSpeedAttributes = ProfileAccessAndSpeedAttributes + .builder() + .accessAttributes(List.of(CAR_ACCESS)) + .speedAttributes(List.of(CAR_AVERAGE_SPEED)) + .build(); + } + + @Test + void getAll_ok() { + List result = profileAccessAndSpeedAttributes.getAll(); + assertThat(result).contains(CAR_ACCESS, CAR_AVERAGE_SPEED); + } + + @Test + void isSpeedAttribute_ok() { + assertThat(profileAccessAndSpeedAttributes.isSpeedAttribute(CAR_AVERAGE_SPEED)).isTrue(); + } + + @Test + void isAccessAttribute_ok() { + assertThat(profileAccessAndSpeedAttributes.isAccessAttribute(CAR_ACCESS)).isTrue(); + } + + @Test + void getVehicleName_ok() { + assertThat(profileAccessAndSpeedAttributes.getVehicleName(CAR_ACCESS)) + .isEqualTo(CAR); + assertThat(profileAccessAndSpeedAttributes.getVehicleName(CAR_AVERAGE_SPEED)) + .isEqualTo(CAR); + + } + + @Test + void getAccessAttributes_ok() { + List result = profileAccessAndSpeedAttributes.accessAttributes(); + assertThat(result).contains(CAR_ACCESS); + } + + @Test + void getSpeedAttributes_ok() { + List result = profileAccessAndSpeedAttributes.speedAttributes(); + assertThat(result).contains(CAR_AVERAGE_SPEED); + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/BikeRouterIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/BikeRouterIT.java index be94c03a..f3c55b1a 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/BikeRouterIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/BikeRouterIT.java @@ -31,7 +31,7 @@ @ContextConfiguration(classes = {TestConfig.class}) class BikeRouterIT { - private static final Profile BIKE_PROFILE = new Profile("bike").setVehicle("bike"); + private static final Profile BIKE_PROFILE = new Profile("bike"); @Autowired private RouterFactory routerFactory; @Autowired @@ -39,7 +39,6 @@ class BikeRouterIT { private Router router; - @Getter public static class BikeLink extends Link { @@ -48,7 +47,7 @@ protected BikeLink(long id, long fromNodeId, long toNodeId, double speedInKilome double reverseSpeedInKilometersPerHour, double distanceInMeters, LineString geometry, Boolean bicycleAccessible) { super(id, fromNodeId, toNodeId, distanceInMeters, - geometry); + geometry, null); this.bicycleAccessible = bicycleAccessible; this.speed = DirectionalDto.builder() .forward(speedInKilometersPerHour) @@ -56,7 +55,6 @@ protected BikeLink(long id, long fromNodeId, long toNodeId, double speedInKilome .build(); } - @EncodedValue(key = "bicycle_accessible") private final Boolean bicycleAccessible; @@ -80,7 +78,6 @@ public DirectionalDto getAccessibility(BikeLink link) { public DirectionalDto getSpeed(BikeLink link) { return DirectionalDto.builder().forward(0.0).reverse(0.0).build(); } - } public static class BikeLinkBikeMapper extends LinkVehicleMapper { @@ -173,6 +170,4 @@ void route_newWay_linkNotAccessible() { assertEquals("Invalid routing request: Connection between locations not found", routingRequestException.getMessage()); } - - } diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RouterIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RouterIT.java index 48eb07ad..2c93d4b1 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RouterIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RouterIT.java @@ -1,5 +1,6 @@ package nu.ndw.nls.routingmapmatcher.routing; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; @@ -35,7 +36,7 @@ class RouterIT { @SneakyThrows private void setupNetwork() { router = routerFactory.createMapMatcher(TestNetworkProvider.getTestNetworkFromFile("/test-data/links.json"), - "car"); + CAR); } @SneakyThrows @@ -46,7 +47,7 @@ void route_ok() { Point end = geometryFactory.createPoint(new Coordinate(5.428436, 52.175901)); List wayPoints = List.of(start, end); var result = router.route(RoutingRequest.builder() - .routingProfile("car_fastest") + .routingProfile(CAR) .wayPoints(wayPoints) .build()); assertSuccess(result, new Coordinate[]{new Coordinate(5.430483, 52.177693), @@ -61,7 +62,7 @@ void route_ok_noSimplify() { Point end = geometryFactory.createPoint(new Coordinate(5.428436, 52.175901)); List wayPoints = List.of(start, end); var result = router.route(RoutingRequest.builder() - .routingProfile("car_fastest") + .routingProfile(CAR) .wayPoints(wayPoints) .simplifyResponseGeometry(false) .build()); diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingBidirectionalLinkIdIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingBidirectionalLinkIdIT.java new file mode 100644 index 00000000..04f03e87 --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingBidirectionalLinkIdIT.java @@ -0,0 +1,221 @@ + +package nu.ndw.nls.routingmapmatcher.routing; + +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.getTestNetwork; +import static org.assertj.core.api.Assertions.assertThat; + +import java.util.List; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import nu.ndw.nls.geometry.factories.GeometryFactoryWgs84; +import nu.ndw.nls.routingmapmatcher.TestConfig; +import nu.ndw.nls.routingmapmatcher.model.routing.RoutingRequest; +import nu.ndw.nls.routingmapmatcher.model.routing.RoutingResponse; +import nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.TestLink; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.LineString; +import org.locationtech.jts.geom.Point; +import org.locationtech.jts.io.WKTReader; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@Slf4j +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = {TestConfig.class}) +class RoutingBidirectionalLinkIdIT { + + @Autowired + private RouterFactory routerFactory; + + @Autowired + private GeometryFactoryWgs84 geometryFactoryWgs84; + + private Router router; + + @SneakyThrows + void setupReversedGeometry() { + router = routerFactory.createMapMatcher(getTestNetwork(createLinksNoCorrectAlignment()), + CAR); + } + + @SneakyThrows + void setupNormalisedNetwork() { + router = routerFactory.createMapMatcher(getTestNetwork(createLinksCorrectAlignment()), + CAR); + } + + /** + * returns 4 unidirectional links with incorrect geometric alignment + */ + private List createLinksNoCorrectAlignment() { + return List.of( + createLineLink(0, 10, 20, 50, 0, 1, 0, 2), + createLineLink(1, 20, 10, 50, 0, 2, 0, 1), + createLineLink(2, 20, 30, 50, 0, 2, 0, 3), + createLineLink(3, 30, 20, 50, 0, 3, 0, 2) + ); + } + + /** + * returns 2 bidirectional links with correct geometric alignment and directional link id + */ + private List createLinksCorrectAlignment() { + return List.of( + createBiDirectionalLineLink(1, 2, 10, 20, 50, 50, 0, 1, 0, 2), + createBiDirectionalLineLink(3, 4, 20, 30, 50, 50, 0, 2, 0, 3) + ); + } + + private TestLink createLineLink(long id, long fromNodeId, long toNodeId, double speed, double... coordinates) { + return TestLink.builder() + .id(id) + .fromNodeId(fromNodeId) + .toNodeId(toNodeId) + .speedInKilometersPerHour(speed) + .reverseSpeedInKilometersPerHour(0) + .distanceInMeters(100) + .geometry(createLineStringWktReader(coordinates)) + .build(); + } + + private TestLink createBiDirectionalLineLink(long id, long reverseLinkId, long fromNodeId, long toNodeId, + double speed, double reverseSpeed, double... coordinates) { + return TestLink.builder() + .id(id) + .linkIdReversed(reverseLinkId) + .fromNodeId(fromNodeId) + .toNodeId(toNodeId) + .speedInKilometersPerHour(speed) + .reverseSpeedInKilometersPerHour(reverseSpeed) + .distanceInMeters(100) + .geometry(createLineStringWktReader(coordinates)) + .build(); + } + + @SneakyThrows + private LineString createLineStringWktReader(double... coordinates) { + if (coordinates == null || coordinates.length % 2 != 0) { + throw new IllegalStateException("Must have coordinates and must come in pairs of two (x, y)"); + } + + StringBuilder lineStringSb = new StringBuilder("LINESTRING("); + for (int i = 0; i < coordinates.length; i += 2) { + if (i > 0) { + lineStringSb.append(", "); + } + lineStringSb.append(coordinates[i]); + lineStringSb.append(" "); + lineStringSb.append(coordinates[i + 1]); + } + + lineStringSb.append(")"); + + log.debug("Loading line string: {}", lineStringSb); + WKTReader wktReader = new WKTReader(geometryFactoryWgs84); + return (LineString) wktReader.read(lineStringSb.toString()); + } + + @SneakyThrows + @Test + void route_ok_reverse() { + setupReversedGeometry(); + Point start = geometryFactoryWgs84.createPoint(new Coordinate(0, 3)); + Point end = geometryFactoryWgs84.createPoint(new Coordinate(0, 1)); + List wayPoints = List.of(start, end); + RoutingResponse response = router.route(RoutingRequest.builder() + .routingProfile(CAR) + .wayPoints(wayPoints) + .build()); + assertThat(response.getMatchedLinks()) + .hasSize(2) + .satisfiesExactly( + first -> { + assertThat(first.getLinkId()).isEqualTo(3); + assertThat(first.isReversed()).isFalse(); + }, + last -> { + assertThat(last.getLinkId()).isEqualTo(1); + assertThat(last.isReversed()).isFalse(); + } + ); + } + + @SneakyThrows + @Test + void route_ok_forward() { + setupReversedGeometry(); + Point start = geometryFactoryWgs84.createPoint(new Coordinate(0, 1)); + Point end = geometryFactoryWgs84.createPoint(new Coordinate(0, 3)); + List wayPoints = List.of(start, end); + RoutingResponse response = router.route(RoutingRequest.builder() + .routingProfile(CAR) + .wayPoints(wayPoints) + .build()); + assertThat(response.getMatchedLinks()) + .hasSize(2) + .satisfiesExactly( + first -> { + assertThat(first.getLinkId()).isEqualTo(0); + assertThat(first.isReversed()).isFalse(); + }, + last -> { + assertThat(last.getLinkId()).isEqualTo(2); + assertThat(last.isReversed()).isFalse(); + } + ); + } + + @SneakyThrows + @Test + void route_ok_normalised_reversed() { + setupNormalisedNetwork(); + Point start = geometryFactoryWgs84.createPoint(new Coordinate(0, 3)); + Point end = geometryFactoryWgs84.createPoint(new Coordinate(0, 1)); + List wayPoints = List.of(start, end); + RoutingResponse result = router.route(RoutingRequest.builder() + .routingProfile(CAR) + .wayPoints(wayPoints) + .build()); + assertThat(result.getMatchedLinks()) + .hasSize(2) + .satisfiesExactly( + first -> { + assertThat(first.getLinkId()).isEqualTo(4); + assertThat(first.isReversed()).isFalse(); + }, + last -> { + assertThat(last.getLinkId()).isEqualTo(2); + assertThat(last.isReversed()).isFalse(); + } + ); + } + + @SneakyThrows + @Test + void route_ok_normalised_forward() { + setupNormalisedNetwork(); + Point start = geometryFactoryWgs84.createPoint(new Coordinate(0, 1)); + Point end = geometryFactoryWgs84.createPoint(new Coordinate(0, 3)); + List wayPoints = List.of(start, end); + RoutingResponse result = router.route(RoutingRequest.builder() + .routingProfile(CAR) + .wayPoints(wayPoints) + .build()); + assertThat(result.getMatchedLinks()) + .hasSize(2) + .satisfiesExactly( + first -> { + assertThat(first.getLinkId()).isEqualTo(1); + assertThat(first.isReversed()).isFalse(); + }, + last -> { + assertThat(last.getLinkId()).isEqualTo(3); + assertThat(last.isReversed()).isFalse(); + } + ); + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingFractionsIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingFractionsIT.java index 0a3691a2..628d4678 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingFractionsIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/routing/RoutingFractionsIT.java @@ -35,8 +35,8 @@ class RoutingFractionsIT { private static final String VEHICLE = "car"; - private static final String PROFILE_NAME = "profile"; - private static final Profile PROFILE = new Profile(PROFILE_NAME).setVehicle(VEHICLE); + private static final String PROFILE_NAME = "car"; + private static final Profile PROFILE = new Profile(VEHICLE); private static final String NETWORK_NAME = "test_network"; @Autowired private RouterFactory routerFactory; diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFilterNonAccessibleIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFilterNonAccessibleIT.java index 19355d4d..2f4c987c 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFilterNonAccessibleIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFilterNonAccessibleIT.java @@ -1,6 +1,6 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.getTestNetwork; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -42,7 +42,7 @@ class SinglePointMapMatcherFilterNonAccessibleIT { @BeforeEach void setup() { singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher(getTestNetwork(createLinks()), - CAR_FASTEST); + CAR); } /** diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFixUTurnsIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFixUTurnsIT.java index 3629ee8e..84a5dc85 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFixUTurnsIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFixUTurnsIT.java @@ -1,8 +1,7 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST_NO_U_TURNS; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_NO_U_TURNS; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.getTestNetwork; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -48,7 +47,7 @@ class SinglePointMapMatcherFixUTurnsIT { @BeforeEach void setup() { singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher(getTestNetwork(createLinks()), - CAR_FASTEST_NO_U_TURNS); + CAR_NO_U_TURNS); } /** diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFractionIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFractionIT.java index 7cf6b1b5..f0f5b5f6 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFractionIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherFractionIT.java @@ -1,6 +1,6 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.getTestNetwork; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -43,7 +43,7 @@ class SinglePointMapMatcherFractionIT { @BeforeEach void setup() { singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher(getTestNetwork(createLinks()), - CAR_FASTEST); + CAR); } /** diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherIT.java index 8ac1d1c2..acb09fd4 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherIT.java @@ -1,6 +1,6 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.containsInAnyOrder; @@ -52,7 +52,7 @@ public class SinglePointMapMatcherIT { @SneakyThrows private void setupNetwork(String resource) { singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher( - TestNetworkProvider.getTestNetworkFromFile(resource), CAR_FASTEST); + TestNetworkProvider.getTestNetworkFromFile(resource), CAR); } diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBearingIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBearingIT.java index 9e58edc5..9b2e18f3 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBearingIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBearingIT.java @@ -1,6 +1,6 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; @@ -41,7 +41,7 @@ public class SinglePointMapMatcherWithBearingIT { @SneakyThrows private void setupNetwork() { singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher( - TestNetworkProvider.getTestNetworkFromFile(LINKS_RESOURCE), CAR_FASTEST); + TestNetworkProvider.getTestNetworkFromFile(LINKS_RESOURCE), CAR); } @BeforeAll diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBidirectionalIsochroneIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBidirectionalIsochroneIT.java new file mode 100644 index 00000000..76ac3309 --- /dev/null +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithBidirectionalIsochroneIT.java @@ -0,0 +1,154 @@ +package nu.ndw.nls.routingmapmatcher.singlepoint; + +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; +import static org.assertj.core.api.Assertions.assertThat; + +import lombok.SneakyThrows; +import nu.ndw.nls.geometry.factories.GeometryFactoryWgs84; +import nu.ndw.nls.routingmapmatcher.TestConfig; +import nu.ndw.nls.routingmapmatcher.model.IsochroneMatch; +import nu.ndw.nls.routingmapmatcher.model.IsochroneUnit; +import nu.ndw.nls.routingmapmatcher.model.singlepoint.BearingFilter; +import nu.ndw.nls.routingmapmatcher.model.singlepoint.MatchFilter; +import nu.ndw.nls.routingmapmatcher.model.singlepoint.MatchSort; +import nu.ndw.nls.routingmapmatcher.model.singlepoint.SinglePointLocation; +import nu.ndw.nls.routingmapmatcher.model.singlepoint.SinglePointMatch; +import nu.ndw.nls.routingmapmatcher.model.singlepoint.SinglePointMatch.CandidateMatch; +import nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.locationtech.jts.geom.Coordinate; +import org.locationtech.jts.geom.Point; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@ContextConfiguration(classes = {TestConfig.class}) +public class SinglePointMapMatcherWithBidirectionalIsochroneIT { + + private static final String LINKS_RESOURCE = "/test-data/links_bidirectional.json"; + private static final Coordinate START_POINT = new Coordinate(5.4303030, 52.1804201); + private static final int ISOCHRONE_METERS = 100; + private static final BearingFilter BEARING_FILTER_FORWARD = new BearingFilter(105, 10); + private static final BearingFilter BEARING_FILTER_REVERSE = new BearingFilter(285, 10); + private static final int CUTOFF_DISTANCE = 20; + private static final int ID = 1; + + @Autowired + private SinglePointMapMatcherFactory singlePointMapMatcherFactory; + @Autowired + private GeometryFactoryWgs84 geometryFactory; + + private SinglePointMapMatcher singlePointMapMatcher; + + @SneakyThrows + private void setupNetwork() { + singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher( + TestNetworkProvider.getTestNetworkFromFile(LINKS_RESOURCE), + CAR); + } + + @SneakyThrows + @Test + void match_ok_bidirectionalForwardDownstream() { + setupNetwork(); + Point point = geometryFactory.createPoint(START_POINT); + var request = SinglePointLocation + .builder() + .id(ID) + .point(point) + .matchSort(MatchSort.SHORTEST_DISTANCE) + .matchFilter(MatchFilter.FIRST) + .downstreamIsochrone(ISOCHRONE_METERS) + .downstreamIsochroneUnit(IsochroneUnit.METERS) + .bearingFilter(BEARING_FILTER_FORWARD) + .cutoffDistance(CUTOFF_DISTANCE) + .build(); + SinglePointMatch result = singlePointMapMatcher.match(request); + assertThat(result.getCandidateMatches()).hasSize(1); + CandidateMatch match = result.getCandidateMatches().getFirst(); + assertThat(match.getDownstream()).hasSize(4); + // Here, we expect the one-way segments not to be matched, because they are in the wrong driving direction. + assertThat(match.getDownstream()).map(IsochroneMatch::getMatchedLinkId) + .containsExactly(6405235, 6405226, 6405225, 6405227); + assertThat(match.getDownstream()).noneMatch(IsochroneMatch::isReversed); + } + + @SneakyThrows + @Test + void match_ok_bidirectionalReverseUpstream() { + setupNetwork(); + Point point = geometryFactory.createPoint(START_POINT); + var request = SinglePointLocation + .builder() + .id(ID) + .point(point) + .matchSort(MatchSort.SHORTEST_DISTANCE) + .matchFilter(MatchFilter.FIRST) + .upstreamIsochrone(ISOCHRONE_METERS) + .upstreamIsochroneUnit(IsochroneUnit.METERS) + .bearingFilter(BEARING_FILTER_REVERSE) + .cutoffDistance(CUTOFF_DISTANCE) + .build(); + SinglePointMatch result = singlePointMapMatcher.match(request); + assertThat(result.getCandidateMatches()).hasSize(1); + CandidateMatch match = result.getCandidateMatches().getFirst(); + assertThat(match.getUpstream()).hasSize(6); + // Here, we expect the one-way segments to be matched, because they are in the correct driving direction. + assertThat(match.getUpstream()).map(IsochroneMatch::getMatchedLinkId) + .containsExactly(6405234, 6405225, 6405239, 6405224, 6405226, 6405238); + assertThat(match.getUpstream()).noneMatch(IsochroneMatch::isReversed); + } + + @SneakyThrows + @Test + void match_ok_bidirectionalReverseDownstream() { + setupNetwork(); + Point point = geometryFactory.createPoint(START_POINT); + var request = SinglePointLocation + .builder() + .id(ID) + .point(point) + .matchSort(MatchSort.SHORTEST_DISTANCE) + .matchFilter(MatchFilter.FIRST) + .downstreamIsochrone(ISOCHRONE_METERS) + .downstreamIsochroneUnit(IsochroneUnit.METERS) + .bearingFilter(BEARING_FILTER_REVERSE) + .cutoffDistance(CUTOFF_DISTANCE) + .build(); + SinglePointMatch result = singlePointMapMatcher.match(request); + assertThat(result.getCandidateMatches()).hasSize(1); + CandidateMatch match = result.getCandidateMatches().getFirst(); + assertThat(match.getDownstream()).hasSize(7); + assertThat(match.getDownstream()).map(IsochroneMatch::getMatchedLinkId) + .containsExactly(6405234, 6405240, 6405251, 6405241, 6405247, 6405250, 6405252); + assertThat(match.getDownstream()).noneMatch(IsochroneMatch::isReversed); + } + + @SneakyThrows + @Test + void match_ok_bidirectionalForwardUpstream() { + setupNetwork(); + Point point = geometryFactory.createPoint(START_POINT); + var request = SinglePointLocation + .builder() + .id(ID) + .point(point) + .matchSort(MatchSort.SHORTEST_DISTANCE) + .matchFilter(MatchFilter.FIRST) + .upstreamIsochrone(ISOCHRONE_METERS) + .upstreamIsochroneUnit(IsochroneUnit.METERS) + .bearingFilter(BEARING_FILTER_FORWARD) + .cutoffDistance(CUTOFF_DISTANCE) + .build(); + SinglePointMatch result = singlePointMapMatcher.match(request); + assertThat(result.getCandidateMatches()).hasSize(1); + CandidateMatch match = result.getCandidateMatches().getFirst(); + assertThat(match.getUpstream()).hasSize(7); + // These are the same 7 segments as in bidirectionalReverseDownstream, but each their reverse link ID. + assertThat(match.getUpstream()).map(IsochroneMatch::getMatchedLinkId) + .containsExactly(6405235, 6405247, 6405250, 6405246, 6405240, 6405251, 6405249); + assertThat(match.getUpstream()).noneMatch(IsochroneMatch::isReversed); + } +} diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithIsochroneIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithIsochroneIT.java index 1bd0a5c7..3f268c0e 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithIsochroneIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/singlepoint/SinglePointMapMatcherWithIsochroneIT.java @@ -1,16 +1,14 @@ package nu.ndw.nls.routingmapmatcher.singlepoint; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.closeTo; -import static org.hamcrest.Matchers.hasSize; -import static org.hamcrest.Matchers.is; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.data.Offset.offset; import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertTrue; import lombok.SneakyThrows; import nu.ndw.nls.geometry.factories.GeometryFactoryWgs84; import nu.ndw.nls.routingmapmatcher.TestConfig; +import nu.ndw.nls.routingmapmatcher.model.IsochroneMatch; import nu.ndw.nls.routingmapmatcher.model.IsochroneUnit; import nu.ndw.nls.routingmapmatcher.model.singlepoint.BearingFilter; import nu.ndw.nls.routingmapmatcher.model.singlepoint.MatchFilter; @@ -31,10 +29,11 @@ @ContextConfiguration(classes = {TestConfig.class}) public class SinglePointMapMatcherWithIsochroneIT { - private static final String LINKS_RESOURCE = "/test-data/links.json"; + private static final String LINKS_RESOURCE = "/test-data/links_bidirectional.json"; private static final Coordinate START_POINT = new Coordinate(5.4267250, 52.1767242); - private static final int UPSTREAM_ISOCHRONE_METERS = 200; - private static final BearingFilter BEARING_FILTER = new BearingFilter(135, 10); + private static final int ISOCHRONE_METERS = 200; + private static final int ISOCHRONE_SECONDS = 20; + private static final BearingFilter BEARING_FILTER = new BearingFilter(140, 10); private static final int CUTOFF_DISTANCE = 20; private static final int ID = 1; @@ -45,17 +44,16 @@ public class SinglePointMapMatcherWithIsochroneIT { private SinglePointMapMatcher singlePointMapMatcher; - @SneakyThrows private void setupNetwork() { singlePointMapMatcher = singlePointMapMatcherFactory.createMapMatcher( TestNetworkProvider.getTestNetworkFromFile(LINKS_RESOURCE), - CAR_FASTEST); + CAR); } @SneakyThrows @Test - void matchWithDownstreamIsochrone_ok_meters() { + void match_ok_downstreamIsochroneMeters() { setupNetwork(); Point point = geometryFactory.createPoint(START_POINT); var request = SinglePointLocation @@ -64,24 +62,24 @@ void matchWithDownstreamIsochrone_ok_meters() { .point(point) .matchSort(MatchSort.SHORTEST_DISTANCE) .matchFilter(MatchFilter.FIRST) - .downstreamIsochrone(UPSTREAM_ISOCHRONE_METERS) - .bearingFilter(BEARING_FILTER) + .downstreamIsochrone(ISOCHRONE_METERS) .downstreamIsochroneUnit(IsochroneUnit.METERS) + .bearingFilter(BEARING_FILTER) .cutoffDistance(CUTOFF_DISTANCE) .build(); SinglePointMatch result = singlePointMapMatcher.match(request); - assertThat(result.getCandidateMatches(), hasSize(ID)); + assertThat(result.getCandidateMatches()).hasSize(1); CandidateMatch match = result.getCandidateMatches().getFirst(); - assertThat(match.getDownstream(), hasSize(5)); - var startPoint = match.getDownstream().getFirst(); - assertThat(startPoint.getStartFraction(), closeTo(match.getFraction(), 0.000001)); - assertThat(startPoint.getEndFraction(), is(1.0)); + assertThat(match.getDownstream()).hasSize(5); + IsochroneMatch startPoint = match.getDownstream().getFirst(); + assertThat(startPoint.getStartFraction()).isCloseTo(match.getFraction(), offset(0.000001)); + assertThat(startPoint.getEndFraction()).isEqualTo(1.0); assertFalse(startPoint.isReversed()); } @SneakyThrows @Test - void matchWithDownstreamIsochrone_ok_seconds() { + void match_ok_downstreamIsochroneSeconds() { setupNetwork(); Point point = geometryFactory.createPoint(START_POINT); var request = SinglePointLocation @@ -90,24 +88,24 @@ void matchWithDownstreamIsochrone_ok_seconds() { .point(point) .matchSort(MatchSort.SHORTEST_DISTANCE) .matchFilter(MatchFilter.FIRST) - .downstreamIsochrone(20) - .bearingFilter(BEARING_FILTER) + .downstreamIsochrone(ISOCHRONE_SECONDS) .downstreamIsochroneUnit(IsochroneUnit.SECONDS) + .bearingFilter(BEARING_FILTER) .cutoffDistance(CUTOFF_DISTANCE) .build(); SinglePointMatch result = singlePointMapMatcher.match(request); - assertThat(result.getCandidateMatches(), hasSize(ID)); + assertThat(result.getCandidateMatches()).hasSize(1); CandidateMatch match = result.getCandidateMatches().getFirst(); - assertThat(match.getDownstream(), hasSize(14)); - var startPoint = match.getDownstream().getFirst(); - assertThat(startPoint.getStartFraction(), closeTo(match.getFraction(), 0.000001)); - assertThat(startPoint.getEndFraction(), is(1.0)); + assertThat(match.getDownstream()).hasSize(14); + IsochroneMatch startPoint = match.getDownstream().getFirst(); + assertThat(startPoint.getStartFraction()).isCloseTo(match.getFraction(), offset(0.000001)); + assertThat(startPoint.getEndFraction()).isEqualTo(1.0); assertFalse(startPoint.isReversed()); } @SneakyThrows @Test - void matchWithUpstreamIsochrone_ok_meters() { + void match_ok_upstreamIsochroneMeters() { setupNetwork(); Point point = geometryFactory.createPoint(START_POINT); var request = SinglePointLocation @@ -116,24 +114,24 @@ void matchWithUpstreamIsochrone_ok_meters() { .point(point) .matchSort(MatchSort.SHORTEST_DISTANCE) .matchFilter(MatchFilter.FIRST) - .upstreamIsochrone(UPSTREAM_ISOCHRONE_METERS) - .bearingFilter(BEARING_FILTER) + .upstreamIsochrone(ISOCHRONE_METERS) .upstreamIsochroneUnit(IsochroneUnit.METERS) + .bearingFilter(BEARING_FILTER) .cutoffDistance(CUTOFF_DISTANCE) .build(); SinglePointMatch result = singlePointMapMatcher.match(request); - assertThat(result.getCandidateMatches(), hasSize(ID)); + assertThat(result.getCandidateMatches()).hasSize(1); CandidateMatch match = result.getCandidateMatches().getFirst(); - assertThat(match.getUpstream(), hasSize(5)); - var startPoint = match.getUpstream().getFirst(); - assertThat(startPoint.getStartFraction(), closeTo(1 - match.getFraction(), 0.000001)); - assertThat(startPoint.getEndFraction(), is(1.0)); - assertTrue(startPoint.isReversed()); + assertThat(match.getUpstream()).hasSize(5); + IsochroneMatch startPoint = match.getUpstream().getFirst(); + assertThat(startPoint.getStartFraction()).isEqualTo(0.0); + assertThat(startPoint.getEndFraction()).isCloseTo(match.getFraction(), offset(0.000001)); + assertFalse(startPoint.isReversed()); } @SneakyThrows @Test - void matchWithUpstreamIsochrone_ok_seconds() { + void match_ok_upstreamIsochroneSeconds() { setupNetwork(); Point point = geometryFactory.createPoint(START_POINT); var request = SinglePointLocation @@ -142,18 +140,18 @@ void matchWithUpstreamIsochrone_ok_seconds() { .point(point) .matchSort(MatchSort.SHORTEST_DISTANCE) .matchFilter(MatchFilter.FIRST) - .upstreamIsochrone(20) - .bearingFilter(BEARING_FILTER) + .upstreamIsochrone(ISOCHRONE_SECONDS) .upstreamIsochroneUnit(IsochroneUnit.SECONDS) + .bearingFilter(BEARING_FILTER) .cutoffDistance(CUTOFF_DISTANCE) .build(); SinglePointMatch result = singlePointMapMatcher.match(request); - assertThat(result.getCandidateMatches(), hasSize(ID)); + assertThat(result.getCandidateMatches()).hasSize(1); CandidateMatch match = result.getCandidateMatches().getFirst(); - assertThat(match.getUpstream(), hasSize(11)); - var startPoint = match.getUpstream().getFirst(); - assertThat(startPoint.getStartFraction(), closeTo(1 - match.getFraction(), 0.000001)); - assertThat(startPoint.getEndFraction(), is(1.0)); - assertTrue(startPoint.isReversed()); + assertThat(match.getUpstream()).hasSize(11); + IsochroneMatch startPoint = match.getUpstream().getFirst(); + assertThat(startPoint.getStartFraction()).isEqualTo(0.0); + assertThat(startPoint.getEndFraction()).isCloseTo(match.getFraction(), offset(0.000001)); + assertFalse(startPoint.isReversed()); } } diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcherIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcherIT.java index 94952c0a..02e8e1ee 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcherIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/starttoend/StartToEndMapMatcherIT.java @@ -1,6 +1,6 @@ package nu.ndw.nls.routingmapmatcher.starttoend; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.OBJECT_MAPPER; import static org.assertj.core.api.Assertions.assertThat; @@ -43,7 +43,7 @@ class StartToEndMapMatcherIT { @BeforeEach void setup() { this.startToEndMapMatcher = startToEndMapMatcherFactory.createMapMatcher( - TestNetworkProvider.getTestNetworkFromFile("/test-data/links.json"), CAR_FASTEST); + TestNetworkProvider.getTestNetworkFromFile("/test-data/links.json"), CAR); } @SneakyThrows diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/CreateGeoJsonFromLinksUtil.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/CreateGeoJsonFromLinksUtil.java index f1a3d6f3..c5640110 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/CreateGeoJsonFromLinksUtil.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/CreateGeoJsonFromLinksUtil.java @@ -8,6 +8,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -51,8 +52,9 @@ void createGeoJson() { }); List featuresJson = new ArrayList<>(); links.forEach(l -> { - Map properties = new HashMap<>(); + Map properties = new LinkedHashMap<>(); properties.put("id", l.getId()); + properties.put("linkIdReversed", l.getLinkIdReversed()); properties.put("fromNodeId", l.getFromNodeId()); properties.put("toNodeId", l.getToNodeId()); properties.put("speedInKilometersPerHour", l.getSpeedInKilometersPerHour()); @@ -71,7 +73,7 @@ void createGeoJson() { @SneakyThrows void testIntersection() { - final var shapeFactory = createGeometricShapeFactory(); + var shapeFactory = createGeometricShapeFactory(); Polygon circleA = shapeFactory.createEllipse(); GeoJSONWriter writerCircle = new GeoJSONWriter(); var circleGeometry = writerCircle.write(circleA); @@ -96,8 +98,9 @@ void testIntersection() { var geoms = links.stream() .filter(l -> circleA.intersects(l.getGeometry())) .map(l -> { - Map properties = new HashMap<>(); + Map properties = new LinkedHashMap<>(); properties.put("id", l.getId()); + properties.put("linkIdReversed", l.getLinkIdReversed()); properties.put("fromNodeId", l.getFromNodeId()); properties.put("toNodeId", l.getToNodeId()); properties.put("speedInKilometersPerHour", l.getSpeedInKilometersPerHour()); diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/TestNetworkProvider.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/TestNetworkProvider.java index c04d9af6..f24c02da 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/TestNetworkProvider.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/testutil/TestNetworkProvider.java @@ -4,7 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.module.SimpleModule; import com.graphhopper.config.Profile; -import com.graphhopper.util.CustomModel; +import com.graphhopper.config.TurnCostsConfig; import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -33,7 +33,9 @@ import nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedIntegerMapperFactory; import nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedLongMapperFactory; import nu.ndw.nls.routingmapmatcher.network.init.annotation.parserfactories.EncodedStringMapperFactory; -import nu.ndw.nls.routingmapmatcher.network.init.vehicle.CustomVehicleEncodedValuesFactory; +import nu.ndw.nls.routingmapmatcher.network.mappers.CustomModelMapper; +import nu.ndw.nls.routingmapmatcher.network.mappers.ProfileAccessAndSpeedAttributesMapper; +import nu.ndw.nls.routingmapmatcher.network.mappers.SpeedAndAccessAttributeMapper; import nu.ndw.nls.routingmapmatcher.network.model.DirectionalDto; import nu.ndw.nls.routingmapmatcher.network.model.Link; import nu.ndw.nls.routingmapmatcher.network.model.LinkVehicleMapper; @@ -41,21 +43,45 @@ import nu.ndw.nls.routingmapmatcher.viterbi.LineStringLocationDeserializer; import nu.ndw.nls.routingmapmatcher.viterbi.LinkDeserializer; import org.apache.commons.io.IOUtils; +import org.jetbrains.annotations.NotNull; import org.locationtech.jts.geom.LineString; public class TestNetworkProvider { - private static final double WEIGHTING_SHORTEST_DISTANCE_INFLUENCE = 10_000D; public static final ObjectMapper OBJECT_MAPPER; private static final SimpleModule SIMPLE_MODULE; public static final String HGV_ACCESSIBLE_KEY = "hgv_accessible"; + public static final String CAR = "car"; + public static final String CAR_NO_U_TURNS = "car_no_u_turns"; + public static List TEST_PROFILES = List.of( + new Profile(CAR), + new Profile(CAR_NO_U_TURNS) + .setTurnCostsConfig(new TurnCostsConfig(List.of("motor_vehicle")) + .setUTurnCosts(TurnCostsConfig.INFINITE_U_TURN_COSTS)) + ); - public static GraphHopperNetworkService getNetworkService(List> vehicleProviders) { + public static GraphHopperNetworkService getNetworkService( + List> vehicleProviders) { return new GraphHopperNetworkService( - getLinkVehicleProvider(vehicleProviders), getParserFactories(), getEncoderFactories(), - getVehicleEncodedValuesFactory(), getEncodedValuesMapper()); + getLinkVehicleProvider(vehicleProviders), getEncoderFactories(), getEncodedValuesMapper(), + getParserFactories(), getCustomModelMapper(), getProfileAccessAndSpeedAttributesMapper()); } - public static final GraphHopperNetworkService NETWORK_SERVICE = getNetworkService(List.of(new TestLinkCarMapper())); + + @NotNull + private static ProfileAccessAndSpeedAttributesMapper getProfileAccessAndSpeedAttributesMapper() { + return new ProfileAccessAndSpeedAttributesMapper( + new SpeedAndAccessAttributeMapper()); + } + + @NotNull + private static CustomModelMapper getCustomModelMapper() { + return new CustomModelMapper( + new SpeedAndAccessAttributeMapper()); + } + + public static final GraphHopperNetworkService NETWORK_SERVICE = getNetworkService( + List.of(new TestLinkCarMapper(CAR), + new TestLinkCarMapper(CAR_NO_U_TURNS))); static { SIMPLE_MODULE = new SimpleModule(); @@ -66,26 +92,11 @@ public static GraphHopperNetworkService getNetworkService(List TEST_PROFILES = List.of( - new Profile(CAR_FASTEST) - .setVehicle("car") - , - - new Profile(CAR_FASTEST_NO_U_TURNS) - .setVehicle("car") - .setTurnCosts(true), - - new Profile("car_shortest") - .setVehicle("car") - .setCustomModel(new CustomModel().setDistanceInfluence(WEIGHTING_SHORTEST_DISTANCE_INFLUENCE)) - ); - public static List getTestLinks(String path) throws IOException { InputStream resourceAsStream = TestNetworkProvider.class.getResourceAsStream(path); String linksJson = IOUtils.toString(Objects.requireNonNull(resourceAsStream), StandardCharsets.UTF_8); - return OBJECT_MAPPER.readValue(linksJson, new TypeReference<>() {}); + return OBJECT_MAPPER.readValue(linksJson, new TypeReference<>() { + }); } public static NetworkGraphHopper getTestNetwork(List links) { @@ -132,10 +143,6 @@ private static EncodedValueFactoryRegistry getEncoderFactories() { )); } - private static CustomVehicleEncodedValuesFactory getVehicleEncodedValuesFactory() { - return new CustomVehicleEncodedValuesFactory(); - } - private static LinkVehicleMapperProvider getLinkVehicleProvider(List> vehicles) { return new LinkVehicleMapperProvider(vehicles); } @@ -152,9 +159,8 @@ public static class TestLink extends Link { @Builder protected TestLink(long id, long fromNodeId, long toNodeId, double speedInKilometersPerHour, double reverseSpeedInKilometersPerHour, Boolean hgvAccessible, double distanceInMeters, - LineString geometry) { - super(id, fromNodeId, toNodeId, distanceInMeters, - geometry); + LineString geometry, Long linkIdReversed) { + super(id, fromNodeId, toNodeId, distanceInMeters, geometry, linkIdReversed); this.speedInKilometersPerHour = speedInKilometersPerHour; this.reverseSpeedInKilometersPerHour = reverseSpeedInKilometersPerHour; this.hgvAccessible = Optional.ofNullable(hgvAccessible).orElse(true); @@ -163,6 +169,10 @@ protected TestLink(long id, long fromNodeId, long toNodeId, double speedInKilome public static class TestLinkCarMapper extends LinkVehicleMapper { + public TestLinkCarMapper(String profileName) { + super(profileName, TestLink.class); + } + public TestLinkCarMapper() { super("car", TestLink.class); } @@ -182,7 +192,5 @@ public DirectionalDto getSpeed(TestLink link) { .reverse(link.getReverseSpeedInKilometersPerHour()) .build(); } - } - } diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/LinkDeserializer.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/LinkDeserializer.java index 7ae5a1ff..2fa11bba 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/LinkDeserializer.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/LinkDeserializer.java @@ -25,9 +25,11 @@ protected LinkDeserializer(Class vc) { public TestLink deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException { JsonNode node = jsonParser.getCodec().readTree(jsonParser); - int id = node.get("id").intValue(); - int fromNodeId = node.get("fromNodeId").intValue(); - int toNodeId = node.get("toNodeId").intValue(); + long id = node.get("id").longValue(); + JsonNode node2 = node.get("linkIdReversed"); + Long linkIdReversed = node2 == null || node2.isNull() ? null : node2.longValue(); + long fromNodeId = node.get("fromNodeId").longValue(); + long toNodeId = node.get("toNodeId").longValue(); double speedInKilometersPerHour = node.get("speedInKilometersPerHour").doubleValue(); double reverseSpeedInKilometersPerHour = node.get("reverseSpeedInKilometersPerHour").doubleValue(); double distanceInMeters = node.get("distanceInMeters").doubleValue(); @@ -36,6 +38,7 @@ public TestLink deserialize(JsonParser jsonParser, DeserializationContext deseri return TestLink.builder() .id(id) + .linkIdReversed(linkIdReversed) .fromNodeId(fromNodeId) .toNodeId(toNodeId) .speedInKilometersPerHour(speedInKilometersPerHour) diff --git a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcherIT.java b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcherIT.java index f08b7272..6095865f 100644 --- a/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcherIT.java +++ b/map-matcher-library/src/test/java/nu/ndw/nls/routingmapmatcher/viterbi/ViterbiLineStringMapMatcherIT.java @@ -1,6 +1,6 @@ package nu.ndw.nls.routingmapmatcher.viterbi; -import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR_FASTEST; +import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.CAR; import static nu.ndw.nls.routingmapmatcher.testutil.TestNetworkProvider.OBJECT_MAPPER; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertNull; @@ -43,7 +43,7 @@ class ViterbiLineStringMapMatcherIT { @BeforeEach void setup() { viterbiLineStringMapMatcher = viterbiLinestringMapMatcherFactory.createMapMatcher( - TestNetworkProvider.getTestNetworkFromFile("/test-data/links.json"), CAR_FASTEST); + TestNetworkProvider.getTestNetworkFromFile("/test-data/links.json"), CAR); } @SneakyThrows diff --git a/map-matcher-library/src/test/resources/test-data/links_bidirectional.json b/map-matcher-library/src/test/resources/test-data/links_bidirectional.json new file mode 100644 index 00000000..20685964 --- /dev/null +++ b/map-matcher-library/src/test/resources/test-data/links_bidirectional.json @@ -0,0 +1,3422 @@ +[ + { + "id": 3666076, + "linkIdReversed": null, + "fromNodeId": 596829, + "toNodeId": 3873575, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAACAAAA/67PnPW5FUDRWzy85xZKQAzqW+Z0uRVATSzwFd0WSkA=" + }, + { + "id": 3666077, + "linkIdReversed": null, + "fromNodeId": 3873575, + "toNodeId": 3873576, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAAEAAAADOpb5nS5FUBNLPAV3RZKQC47xD9suRVAZohjXdwWSkCVY7K4/7gVQDMXuDzWFkpAkE/Iztu4FUCB6EmZ1BZKQA==" + }, + { + "id": 3666078, + "linkIdReversed": null, + "fromNodeId": 3873576, + "toNodeId": 3873577, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAAEAAAAkE/Iztu4FUCB6EmZ1BZKQAIs8uuHuBVASFLSw9AWSkBvS+SCM7gVQFslWBzOFkpAaY6s/DK4FUBbJVgczhZKQA==" + }, + { + "id": 3666079, + "linkIdReversed": null, + "fromNodeId": 3873577, + "toNodeId": 3873578, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAADAAAAaY6s/DK4FUBbJVgczhZKQL+c2a7QtxVAtaSjHMwWSkCdY0D2ercVQCdMGM3KFkpA" + }, + { + "id": 3666080, + "linkIdReversed": null, + "fromNodeId": 3873578, + "toNodeId": 3873579, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAAEAAAAnWNA9nq3FUAnTBjNyhZKQEJ23sZmtxVA1PGYgcoWSkAh5pKq7bYVQCLDKt7IFkpAM6mhDcC2FUBwYHKjyBZKQA==" + }, + { + "id": 3666081, + "linkIdReversed": null, + "fromNodeId": 3873579, + "toNodeId": 3873580, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAADAAAAM6mhDcC2FUBwYHKjyBZKQLE08KMathVAdlH0wMcWSkA02T9PA7YVQKbVkLjHFkpA" + }, + { + "id": 3666082, + "linkIdReversed": null, + "fromNodeId": 3873580, + "toNodeId": 3873581, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAADAAAANNk/TwO2FUCm1ZC4xxZKQMk7hzJUtRVA83LYfccWSkAwTKYKRrUVQMTuO4bHFkpA" + }, + { + "id": 3666083, + "linkIdReversed": null, + "fromNodeId": 3873581, + "toNodeId": 3873582, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAAEAAAAMEymCka1FUDE7juGxxZKQIV3uYjvtBVAdlH0wMcWSkBkIToEjrQVQKWhRiHJFkpAv9TPm4q0FUBGmQ0yyRZKQA==" + }, + { + "id": 3666084, + "linkIdReversed": null, + "fromNodeId": 3873582, + "toNodeId": 3873583, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAADAAAAv9TPm4q0FUBGmQ0yyRZKQIeKcf4mtBVAzgAXZMsWSkAsDJHT17MVQHk+A+rNFkpA" + }, + { + "id": 3666085, + "linkIdReversed": null, + "fromNodeId": 3873583, + "toNodeId": 3873584, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAAEAAAALAyR09ezFUB5PgPqzRZKQONV1jbFsxVAH/MBgc4WSkA4gem0brMVQKzj+KHSFkpAHFw65jyzFUDyJyob1hZKQA==" + }, + { + "id": 3666086, + "linkIdReversed": null, + "fromNodeId": 3873584, + "toNodeId": 596830, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.372, + "geometry": "AQIAAAACAAAAHFw65jyzFUDyJyob1hZKQC43GOqwshVAfEj43t8WSkA=" + }, + { + "id": 3666087, + "linkIdReversed": null, + "fromNodeId": 596829, + "toNodeId": 3873585, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAACAAAA/67PnPW5FUDRWzy85xZKQLzqAfOQuRVASG+4j9wWSkA=" + }, + { + "id": 3666088, + "linkIdReversed": null, + "fromNodeId": 3873585, + "toNodeId": 3873586, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAACAAAAvOoB85C5FUBIb7iP3BZKQPsEUIwsuRVA7gbRWtEWSkA=" + }, + { + "id": 3666089, + "linkIdReversed": null, + "fromNodeId": 3873586, + "toNodeId": 3873587, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAACAAAA+wRQjCy5FUDuBtFa0RZKQLhAguLHuBVAZRpNLsYWSkA=" + }, + { + "id": 3666090, + "linkIdReversed": null, + "fromNodeId": 3873587, + "toNodeId": 3873588, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAACAAAAuECC4se4FUBlGk0uxhZKQPda0HtjuBVADLJl+boWSkA=" + }, + { + "id": 3666091, + "linkIdReversed": null, + "fromNodeId": 3873588, + "toNodeId": 3873589, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAADAAAA91rQe2O4FUAMsmX5uhZKQP1MvW4RuBVAyT1d3bEWSkCu2cpL/rcVQFNBRdWvFkpA" + }, + { + "id": 3666092, + "linkIdReversed": null, + "fromNodeId": 3873589, + "toNodeId": 3873590, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAACAAAArtnKS/63FUBTQUXVrxZKQE5k5gKXtxVAC0RPyqQWSkA=" + }, + { + "id": 3666093, + "linkIdReversed": null, + "fromNodeId": 3873590, + "toNodeId": 596831, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.171, + "geometry": "AQIAAAACAAAATmTmApe3FUALRE/KpBZKQO7uAbovtxVAw0ZZv5kWSkA=" + }, + { + "id": 3666094, + "linkIdReversed": null, + "fromNodeId": 596832, + "toNodeId": 3873591, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 38.814, + "geometry": "AQIAAAACAAAAFAmmmlm7FUC+E7NeDBdKQE2DonkAuxVAqyNHOgMXSkA=" + }, + { + "id": 3666095, + "linkIdReversed": null, + "fromNodeId": 3873591, + "toNodeId": 3873592, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 38.814, + "geometry": "AQIAAAACAAAATYOieQC7FUCrI0c6AxdKQArcupunuhVAyLd3DfoWSkA=" + }, + { + "id": 3666096, + "linkIdReversed": null, + "fromNodeId": 3873592, + "toNodeId": 3873593, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 38.814, + "geometry": "AQIAAAACAAAACty6m6e6FUDIt3cN+hZKQENWt3pOuhVAtMcL6fAWSkA=" + }, + { + "id": 3666097, + "linkIdReversed": null, + "fromNodeId": 3873593, + "toNodeId": 596829, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 38.814, + "geometry": "AQIAAAACAAAAQ1a3ek66FUC0xwvp8BZKQP+uz5z1uRVA0Vs8vOcWSkA=" + }, + { + "id": 3666098, + "linkIdReversed": null, + "fromNodeId": 596833, + "toNodeId": 3873594, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAACAAAAyCO4kbK1FUB1dcdimxZKQHrIlA9BtRVATDPd66QWSkA=" + }, + { + "id": 3666099, + "linkIdReversed": null, + "fromNodeId": 3873594, + "toNodeId": 3873595, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAADAAAAesiUD0G1FUBMM93rpBZKQJboLLMItRVAgNjSo6kWSkC5xfzc0LQVQJVkHY6uFkpA" + }, + { + "id": 3666100, + "linkIdReversed": null, + "fromNodeId": 3873595, + "toNodeId": 3873596, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAACAAAAucX83NC0FUCVZB2OrhZKQIYb8PlhtBVATgmISbgWSkA=" + }, + { + "id": 3666101, + "linkIdReversed": null, + "fromNodeId": 3873596, + "toNodeId": 3873597, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAACAAAAhhvw+WG0FUBOCYhJuBZKQNdP/1nzsxVACK7yBMIWSkA=" + }, + { + "id": 3666102, + "linkIdReversed": null, + "fromNodeId": 3873597, + "toNodeId": 3873598, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAADAAAA10//WfOzFUAIrvIEwhZKQJM5lnfVsxVAJF8JpMQWSkDBVgkWh7MVQNO9TurLFkpA" + }, + { + "id": 3666103, + "linkIdReversed": null, + "fromNodeId": 3873598, + "toNodeId": 3873599, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAACAAAAwVYJFoezFUDTvU7qyxZKQDm2niEcsxVAEEHV6NUWSkA=" + }, + { + "id": 3666104, + "linkIdReversed": null, + "fromNodeId": 3873599, + "toNodeId": 596830, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.905, + "geometry": "AQIAAAACAAAAObaeIRyzFUAQQdXo1RZKQC43GOqwshVAfEj43t8WSkA=" + }, + { + "id": 3666105, + "linkIdReversed": null, + "fromNodeId": 596830, + "toNodeId": 3873600, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.702, + "geometry": "AQIAAAACAAAALjcY6rCyFUB8SPje3xZKQLjNVIhHshVAAKyOHOkWSkA=" + }, + { + "id": 3666106, + "linkIdReversed": null, + "fromNodeId": 3873600, + "toNodeId": 3873601, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.702, + "geometry": "AQIAAAACAAAAuM1UiEeyFUAArI4c6RZKQMRCrWnesRVAhA8lWvIWSkA=" + }, + { + "id": 3666107, + "linkIdReversed": null, + "fromNodeId": 3873601, + "toNodeId": 3873602, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.702, + "geometry": "AQIAAAADAAAAxEKtad6xFUCEDyVa8hZKQDz59NiWsRVA+G9enPgWSkDWdD3RdbEVQKlqgqj7FkpA" + }, + { + "id": 3666108, + "linkIdReversed": null, + "fromNodeId": 3873602, + "toNodeId": 3873603, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.702, + "geometry": "AQIAAAACAAAA1nQ90XWxFUCpaoKo+xZKQIF5yJQPsRVAPzkKEAUXSkA=" + }, + { + "id": 3666109, + "linkIdReversed": null, + "fromNodeId": 3873603, + "toNodeId": 596834, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.702, + "geometry": "AQIAAAACAAAAgXnIlA+xFUA/OQoQBRdKQKmfNxWpsBVApYP1fw4XSkA=" + }, + { + "id": 3666110, + "linkIdReversed": null, + "fromNodeId": 596835, + "toNodeId": 3873604, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.328, + "geometry": "AQIAAAACAAAAQIhkyLG1FUBh+l5DcBZKQNSYEHNJtRVAPgeWI2QWSkA=" + }, + { + "id": 3666111, + "linkIdReversed": null, + "fromNodeId": 3873604, + "toNodeId": 3873605, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.328, + "geometry": "AQIAAAACAAAA1JgQc0m1FUA+B5YjZBZKQOyH2GDhtBVAGhTNA1gWSkA=" + }, + { + "id": 3666112, + "linkIdReversed": null, + "fromNodeId": 3873605, + "toNodeId": 3873606, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.328, + "geometry": "AQIAAAADAAAA7IfYYOG0FUAaFM0DWBZKQGlSCrq9tBVAjiPW4lMWSkDKMVncf7QVQKTGhJhLFkpA" + }, + { + "id": 3666113, + "linkIdReversed": null, + "fromNodeId": 3873606, + "toNodeId": 3873607, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.328, + "geometry": "AQIAAAACAAAAyjFZ3H+0FUCkxoSYSxZKQE4oRMAhtBVAS5Ln+j4WSkA=" + }, + { + "id": 3666114, + "linkIdReversed": null, + "fromNodeId": 3873607, + "toNodeId": 596836, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.328, + "geometry": "AQIAAAADAAAATihEwCG0FUBLkuf6PhZKQMb7cfvlsxVAtI8V/DYWSkCCAu/k07MVQL0cdt8xFkpA" + }, + { + "id": 3666115, + "linkIdReversed": null, + "fromNodeId": 596835, + "toNodeId": 3873608, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAEAAAAQIhkyLG1FUBh+l5DcBZKQEaXN4drtRVA56ij42oWSkA17PfEOrUVQDxrt11oFkpAhetRuB61FUChZHJqZxZKQA==" + }, + { + "id": 3666116, + "linkIdReversed": null, + "fromNodeId": 3873608, + "toNodeId": 3873609, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAFAAAAhetRuB61FUChZHJqZxZKQHRd+MH5tBVA5IdKI2YWSkDnVgirsbQVQN7KEp1lFkpABFq6gm20FUBV+3Q8ZhZKQLrA5bFmtBVAN+LJbmYWSkA=" + }, + { + "id": 3666117, + "linkIdReversed": null, + "fromNodeId": 3873609, + "toNodeId": 3873610, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAFAAAAusDlsWa0FUA34sluZhZKQFmis8witBVAPGu3XWgWSkB8nGnC9rMVQFgczvxqFkpA/yPTodOzFUD3qwDfbRZKQMx+3enOsxVAbtxifm4WSkA=" + }, + { + "id": 3666118, + "linkIdReversed": null, + "fromNodeId": 3873610, + "toNodeId": 3873611, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAEAAAAzH7d6c6zFUBu3GJ+bhZKQJ5cUyCzsxVAxouFIXIWSkC1FmahnbMVQMms3uF2FkpAcTrJVpezFUAyk6gXfBZKQA==" + }, + { + "id": 3666119, + "linkIdReversed": null, + "fromNodeId": 3873611, + "toNodeId": 3873612, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAGAAAAcTrJVpezFUAyk6gXfBZKQO5brROXsxVAhe0nY3wWSkALKqp+pbMVQP8+48KBFkpA9G+X/bqzFUAJUb6ghRZKQBvV6UDWsxVAGVQbnIgWSkDzxklh3rMVQJCEfTuJFkpA" + }, + { + "id": 3666120, + "linkIdReversed": null, + "fromNodeId": 3873612, + "toNodeId": 3873613, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAFAAAA88ZJYd6zFUCQhH07iRZKQIF2hxQDtBVA7iQi/IsWSkDRQCybObQVQJliDoKOFkpAPNnNjH60FUAKou4DkBZKQFPNrKWAtBVA2h1SDJAWSkA=" + }, + { + "id": 3666121, + "linkIdReversed": null, + "fromNodeId": 3873613, + "toNodeId": 3873614, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAEAAAAU82spYC0FUDaHVIMkBZKQHqJsUy/tBVAgNJQo5AWSkDgZBu4A7UVQIfD0sCPFkpAhSUeUDa1FUBStkjajRZKQA==" + }, + { + "id": 3666122, + "linkIdReversed": null, + "fromNodeId": 3873614, + "toNodeId": 596837, + "speedInKilometersPerHour": 79, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.247, + "geometry": "AQIAAAAEAAAAhSUeUDa1FUBStkjajRZKQG5OJQNAtRVAXmQCfo0WSkDUY1sGnLUVQDKwjuOHFkpAbarukc21FUBFgxQ8hRZKQA==" + }, + { + "id": 3666123, + "linkIdReversed": null, + "fromNodeId": 596838, + "toNodeId": 596835, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 37.896, + "geometry": "AQIAAAACAAAAzas6qwW2FUCkbmdfeRZKQECIZMixtRVAYfpeQ3AWSkA=" + }, + { + "id": 3666124, + "linkIdReversed": null, + "fromNodeId": 596839, + "toNodeId": 3873615, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.586, + "geometry": "AQIAAAACAAAA3lZ6bTa2FUCaXIyBdRZKQI8YPbfQtRVAoPzdO2oWSkA=" + }, + { + "id": 3666125, + "linkIdReversed": null, + "fromNodeId": 3873615, + "toNodeId": 3873616, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.586, + "geometry": "AQIAAAACAAAAjxg9t9C1FUCg/N07ahZKQEDa/wBrtRVAppwv9l4WSkA=" + }, + { + "id": 3666126, + "linkIdReversed": null, + "fromNodeId": 3873616, + "toNodeId": 3873617, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.586, + "geometry": "AQIAAAACAAAAQNr/AGu1FUCmnC/2XhZKQG+9pgcFtRVArDyBsFMWSkA=" + }, + { + "id": 3666127, + "linkIdReversed": null, + "fromNodeId": 3873617, + "toNodeId": 3873618, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.586, + "geometry": "AQIAAAACAAAAb72mBwW1FUCsPIGwUxZKQCB/aVGftBVAsdzSakgWSkA=" + }, + { + "id": 3666128, + "linkIdReversed": null, + "fromNodeId": 3873618, + "toNodeId": 3873619, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.586, + "geometry": "AQIAAAACAAAAIH9pUZ+0FUCx3NJqSBZKQNFALJs5tBVAt3wkJT0WSkA=" + }, + { + "id": 3666129, + "linkIdReversed": null, + "fromNodeId": 3873619, + "toNodeId": 596836, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.586, + "geometry": "AQIAAAACAAAA0UAsmzm0FUC3fCQlPRZKQIIC7+TTsxVAvRx23zEWSkA=" + }, + { + "id": 3666130, + "linkIdReversed": null, + "fromNodeId": 596836, + "toNodeId": 3873620, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.122, + "geometry": "AQIAAAACAAAAggLv5NOzFUC9HHbfMRZKQCeEDrqEsxVAKII4DycWSkA=" + }, + { + "id": 3666131, + "linkIdReversed": null, + "fromNodeId": 3873620, + "toNodeId": 3873621, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.122, + "geometry": "AQIAAAADAAAAJ4QOuoSzFUAogjgPJxZKQJkrg2qDsxVARZvj3CYWSkD67evAObMVQIF8CRUcFkpA" + }, + { + "id": 3666132, + "linkIdReversed": null, + "fromNodeId": 3873621, + "toNodeId": 3873622, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.122, + "geometry": "AQIAAAADAAAA+u3rwDmzFUCBfAkVHBZKQN7lIr4TsxVAJET5ghYWSkD7P4f58rIVQMgL6fAQFkpA" + }, + { + "id": 3666204, + "linkIdReversed": null, + "fromNodeId": 596855, + "toNodeId": 3873665, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.223, + "geometry": "AQIAAAACAAAASfQyiuW2FUDeIcUAiRZKQJSl1vuNthVAJH1aRX8WSkA=" + }, + { + "id": 3666205, + "linkIdReversed": null, + "fromNodeId": 3873665, + "toNodeId": 596839, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.223, + "geometry": "AQIAAAACAAAAlKXW+422FUAkfVpFfxZKQN5Wem02thVAmlyMgXUWSkA=" + }, + { + "id": 3666210, + "linkIdReversed": null, + "fromNodeId": 3873669, + "toNodeId": 3873670, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAACAAAAjzhkA+myFUDSNCiaBxZKQPUwtDo5sxVAnNzvUBQWSkA=" + }, + { + "id": 3666211, + "linkIdReversed": null, + "fromNodeId": 3873670, + "toNodeId": 3873671, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAADAAAA9TC0OjmzFUCc3O9QFBZKQC2T4Xg+sxVA9fOmIhUWSkBrYKsEi7MVQPUQje4gFkpA" + }, + { + "id": 3666212, + "linkIdReversed": null, + "fromNodeId": 3873671, + "toNodeId": 3873672, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAADAAAAa2CrBIuzFUD1EI3uIBZKQFWmmIOgsxVAKerMPSQWSkBaETXR57MVQOl/uRYtFkpA" + }, + { + "id": 3666213, + "linkIdReversed": null, + "fromNodeId": 3873672, + "toNodeId": 3873673, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAADAAAAWhE10eezFUDpf7kWLRZKQGRz1TxHtBVA6Zyf4jgWSkB2qnzPSLQVQMuD9BQ5FkpA" + }, + { + "id": 3666214, + "linkIdReversed": null, + "fromNodeId": 3873673, + "toNodeId": 3873674, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAACAAAAdqp8z0i0FUDLg/QUORZKQOwTQDGytBVASMK+nUQWSkA=" + }, + { + "id": 3666215, + "linkIdReversed": null, + "fromNodeId": 3873674, + "toNodeId": 3873675, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAACAAAA7BNAMbK0FUBIwr6dRBZKQOCe508btRVAlXzsLlAWSkA=" + }, + { + "id": 3666216, + "linkIdReversed": null, + "fromNodeId": 3873675, + "toNodeId": 3873676, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAACAAAA4J7nTxu1FUCVfOwuUBZKQNQpj26EtRVA4zYawFsWSkA=" + }, + { + "id": 3666217, + "linkIdReversed": null, + "fromNodeId": 3873676, + "toNodeId": 3873677, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAACAAAA1CmPboS1FUDjNhrAWxZKQEuTUtDttRVAMPFHUWcWSkA=" + }, + { + "id": 3666218, + "linkIdReversed": null, + "fromNodeId": 3873677, + "toNodeId": 596857, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.912, + "geometry": "AQIAAAACAAAAS5NS0O21FUAw8UdRZxZKQD8e+u5WthVAfqt14nIWSkA=" + }, + { + "id": 3666220, + "linkIdReversed": null, + "fromNodeId": 596857, + "toNodeId": 3873678, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.157, + "geometry": "AQIAAAACAAAAPx767la2FUB+q3XichZKQH0IqkavthVAZ9R8lXwWSkA=" + }, + { + "id": 3666221, + "linkIdReversed": null, + "fromNodeId": 3873678, + "toNodeId": 596859, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.157, + "geometry": "AQIAAAACAAAAfQiqRq+2FUBn1HyVfBZKQLvyWZ4HtxVAgIEgQIYWSkA=" + }, + { + "id": 3666222, + "linkIdReversed": null, + "fromNodeId": 596860, + "toNodeId": 3873679, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.076, + "geometry": "AQIAAAADAAAAwW7YtiizFUBIMUCiCRZKQFvSUQ5msxVAfsNEgxQWSkDdzVMdcrMVQHLhQEgWFkpA" + }, + { + "id": 3666223, + "linkIdReversed": null, + "fromNodeId": 3873679, + "toNodeId": 596861, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.076, + "geometry": "AQIAAAADAAAA3c1THXKzFUBy4UBIFhZKQIJxcOmYsxVADwnf+xsWSkAbuAN1yrMVQMVYpl8iFkpA" + }, + { + "id": 3666224, + "linkIdReversed": null, + "fromNodeId": 596860, + "toNodeId": 3873680, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAAwW7YtiizFUBIMUCiCRZKQII3pFGBsxVAweYcPBMWSkAQrRVtjrMVQAGiYMYUFkpA" + }, + { + "id": 3666225, + "linkIdReversed": null, + "fromNodeId": 3873680, + "toNodeId": 3873681, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAAEAAAAEK0VbY6zFUABomDGFBZKQC2Y+KOosxVAU5RL4xcWSkBOet/42rMVQEoH6/8cFkpApMfvbfqzFUD2RNeFHxZKQA==" + }, + { + "id": 3666226, + "linkIdReversed": null, + "fromNodeId": 3873681, + "toNodeId": 3873682, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAAEAAAApMfvbfqzFUD2RNeFHxZKQDf6mA8ItBVAorYNoyAWSkAs9MEyNrQVQHHK3HwjFkpAGohlM4e0FUA/qmG/JxZKQA==" + }, + { + "id": 3666227, + "linkIdReversed": null, + "fromNodeId": 3873682, + "toNodeId": 3873683, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAAEAAAAGohlM4e0FUA/qmG/JxZKQP7zNGCQtBVAdOs1PSgWSkCzJasi3LQVQEm8PJ0rFkpAycfuAiW1FUChn6nXLRZKQA==" + }, + { + "id": 3666228, + "linkIdReversed": null, + "fromNodeId": 3873683, + "toNodeId": 3873684, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAAEAAAAycfuAiW1FUChn6nXLRZKQNo4Yi0+tRVAKjv9oC4WSkC37BD/sLUVQM+7saAwFkpAldV0PdG1FUCCHmrbMBZKQA==" + }, + { + "id": 3666229, + "linkIdReversed": null, + "fromNodeId": 3873684, + "toNodeId": 3873685, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAAldV0PdG1FUCCHmrbMBZKQEWEfxE0thVAOj5anDEWSkARqtTsgbYVQBwlr84xFkpA" + }, + { + "id": 3666230, + "linkIdReversed": null, + "fromNodeId": 3873685, + "toNodeId": 3873686, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAAEarU7IG2FUAcJa/OMRZKQOhmf6DcthVA/gsEATIWSkAQXVDfMrcVQF4UPfAxFkpA" + }, + { + "id": 3666231, + "linkIdReversed": null, + "fromNodeId": 3873686, + "toNodeId": 3873687, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAACAAAAEF1Q3zK3FUBeFD3wMRZKQJHu5xTktxVATKlLxjEWSkA=" + }, + { + "id": 3666232, + "linkIdReversed": null, + "fromNodeId": 3873687, + "toNodeId": 3873688, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAAke7nFOS3FUBMqUvGMRZKQEyo4PCCuBVAOj5anDEWSkATgH9KlbgVQJlGk4sxFkpA" + }, + { + "id": 3666233, + "linkIdReversed": null, + "fromNodeId": 3873688, + "toNodeId": 3873689, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAAE4B/SpW4FUCZRpOLMRZKQMKiIk4nuRVAww34/DAWSkCPVN/5RbkVQBGrP8IwFkpA" + }, + { + "id": 3666234, + "linkIdReversed": null, + "fromNodeId": 3873689, + "toNodeId": 3873690, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAAj1Tf+UW5FUARqz/CMBZKQKUTCaaauRVAmnrdIjAWSkB90LNZ9bkVQH2VfOwuFkpA" + }, + { + "id": 3666235, + "linkIdReversed": null, + "fromNodeId": 3873690, + "toNodeId": 3873691, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAAEAAAAfdCzWfW5FUB9lXzsLhZKQBDmdi/3uRVArBkZ5C4WSkDLDvEPW7oVQMDsnjwsFkpACr/Uz5u6FUAabOo8KhZKQA==" + }, + { + "id": 3666236, + "linkIdReversed": null, + "fromNodeId": 3873691, + "toNodeId": 596862, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.237, + "geometry": "AQIAAAADAAAACr/Uz5u6FUAabOo8KhZKQDEHQUeruhVA5SoWvykWSkCXkA96NrsVQLK5ap4jFkpA" + }, + { + "id": 3666240, + "linkIdReversed": null, + "fromNodeId": 596861, + "toNodeId": 3873694, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.058, + "geometry": "AQIAAAADAAAAG7gDdcqzFUDFWKZfIhZKQOj6PhwktBVAAdwsXiwWSkAbvRqgNLQVQAZlGk0uFkpA" + }, + { + "id": 3666241, + "linkIdReversed": null, + "fromNodeId": 3873694, + "toNodeId": 3873695, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.058, + "geometry": "AQIAAAADAAAAG70aoDS0FUAGZRpNLhZKQGQ+INCZtBVAGO3xQjoWSkDylqsfm7QVQFncf2Q6FkpA" + }, + { + "id": 3666242, + "linkIdReversed": null, + "fromNodeId": 3873695, + "toNodeId": 3873696, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.058, + "geometry": "AQIAAAACAAAA8parH5u0FUBZ3H9kOhZKQIWxhSAHtRVAKXXJOEYWSkA=" + }, + { + "id": 3666243, + "linkIdReversed": null, + "fromNodeId": 3873696, + "toNodeId": 3873697, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.058, + "geometry": "AQIAAAACAAAAhbGFIAe1FUApdck4RhZKQBjMXyFztRVA+g0TDVIWSkA=" + }, + { + "id": 3666244, + "linkIdReversed": null, + "fromNodeId": 3873697, + "toNodeId": 596864, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.058, + "geometry": "AQIAAAACAAAAGMxfIXO1FUD6DRMNUhZKQKzmOSLftRVAyqZc4V0WSkA=" + }, + { + "id": 3666245, + "linkIdReversed": null, + "fromNodeId": 596862, + "toNodeId": 3873698, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.191, + "geometry": "AQIAAAACAAAAl5APeja7FUCyuWqeIxZKQNqOqbuyuxVAhjlBmxwWSkA=" + }, + { + "id": 3666256, + "linkIdReversed": null, + "fromNodeId": 3873704, + "toNodeId": 596870, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 39.714, + "geometry": "AQIAAAACAAAAJNbiUwC8FUDU824sKBZKQAJGlzeHuxVAoGtfQC8WSkA=" + }, + { + "id": 3666943, + "linkIdReversed": null, + "fromNodeId": 596831, + "toNodeId": 3874089, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 27.238, + "geometry": "AQIAAAACAAAA7u4Bui+3FUDDRlm/mRZKQNdppKXythVAnYNnQpMWSkA=" + }, + { + "id": 3666944, + "linkIdReversed": null, + "fromNodeId": 3874089, + "toNodeId": 597005, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 27.238, + "geometry": "AQIAAAACAAAA12mkpfK2FUCdg2dCkxZKQMHkRpG1thVApkQSvYwWSkA=" + }, + { + "id": 3666945, + "linkIdReversed": null, + "fromNodeId": 596833, + "toNodeId": 3874090, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAFAAAAyCO4kbK1FUB1dcdimxZKQIrKhjWVtRVAK/nYXaAWSkD2evfHe7UVQE1nJ4OjFkpAURGnk2y1FUAce/ZcphZKQLKBdLFptRVAJ/VlaacWSkA=" + }, + { + "id": 3666946, + "linkIdReversed": null, + "fromNodeId": 3874090, + "toNodeId": 3874091, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAHAAAAsoF0sWm1FUAn9WVppxZKQHkfR3NktRVAuwopP6kWSkBAvRk1X7UVQJyJ6UKsFkpAV7H4TWG1FUCsjEY+rxZKQBPyQc9mtRVACi3r/rEWSkDr46HvbrUVQDOMu0G0FkpA/BpJgnC1FUC2ateEtBZKQA==" + }, + { + "id": 3666947, + "linkIdReversed": null, + "fromNodeId": 3874091, + "toNodeId": 3874092, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAHAAAA/BpJgnC1FUC2ateEtBZKQPw3L058tRVA2AxwQbYWSkDJzAUuj7UVQDatFAK5FkpAQGt+/KW1FUDcLckBuxZKQBh6xOi5tRVAC34bYrwWSkCV1XQ90bUVQHu9++O9FkpAHY6u0t21FUCT5SSUvhZKQA==" + }, + { + "id": 3666948, + "linkIdReversed": null, + "fromNodeId": 3874092, + "toNodeId": 3874093, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAGAAAAHY6u0t21FUCT5SSUvhZKQDSfc7frtRVAG4F4Xb8WSkAXRQ98DLYVQAniPJzAFkpAF9aNd0e2FUA4Mo/8wRZKQAYTfxR1thVAeSEdHsIWSkCIDoEjgbYVQKmluRXCFkpA" + }, + { + "id": 3666949, + "linkIdReversed": null, + "fromNodeId": 3874093, + "toNodeId": 3874094, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAGAAAAiA6BI4G2FUCppbkVwhZKQGA6rdugthVAODKP/MEWSkBrC89LxbYVQFCOAkTBFkpAOPdXj/u2FUBdcAZ/vxZKQK+ytiketxVA7DAm/b0WSkBavFgYIrcVQJnWprG9FkpA" + }, + { + "id": 3666950, + "linkIdReversed": null, + "fromNodeId": 3874094, + "toNodeId": 3874095, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAFAAAAWrxYGCK3FUCZ1qaxvRZKQIfe4uE9txVAlE25wrsWSkBO02cHXLcVQDDw3Hu4FkpAdji6Sne3FUDrq6sCtRZKQNEINq5/txVAwkzbv7IWSkA=" + }, + { + "id": 3666951, + "linkIdReversed": null, + "fromNodeId": 3874095, + "toNodeId": 3874096, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAAGAAAA0Qg2rn+3FUDCTNu/shZKQJ2AJsKGtxVAHcwmwLAWSkBIisiwircVQNHKvcCsFkpAoz1eSIe3FUA4LA38qBZKQFPnUfF/txVApUqUvaUWSkBIbeLkfrcVQJPfopOlFkpA" + }, + { + "id": 3666952, + "linkIdReversed": null, + "fromNodeId": 3874096, + "toNodeId": 596831, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.233, + "geometry": "AQIAAAADAAAASG3i5H63FUCT36KTpRZKQMsRMpBntxVAZvfkYaEWSkDu7gG6L7cVQMNGWb+ZFkpA" + }, + { + "id": 3666953, + "linkIdReversed": null, + "fromNodeId": 597005, + "toNodeId": 3874097, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.098, + "geometry": "AQIAAAACAAAAweRGkbW2FUCmRBK9jBZKQAbZsnxdthVAjZduEoMWSkA=" + }, + { + "id": 3666954, + "linkIdReversed": null, + "fromNodeId": 3874097, + "toNodeId": 596838, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.098, + "geometry": "AQIAAAACAAAABtmyfF22FUCNl24SgxZKQM2rOqsFthVApG5nX3kWSkA=" + }, + { + "id": 3666955, + "linkIdReversed": null, + "fromNodeId": 597006, + "toNodeId": 3874098, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.907, + "geometry": "AQIAAAACAAAAxY7GoX63FUDcSxqjdRZKQGX8+4wLtxVAQpYFE38WSkA=" + }, + { + "id": 3666956, + "linkIdReversed": null, + "fromNodeId": 3874098, + "toNodeId": 3874099, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.907, + "geometry": "AQIAAAACAAAAZfz7jAu3FUBClgUTfxZKQIhITbuYthVAqODwgogWSkA=" + }, + { + "id": 3666957, + "linkIdReversed": null, + "fromNodeId": 3874099, + "toNodeId": 3874100, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.907, + "geometry": "AQIAAAACAAAAiEhNu5i2FUCo4PCCiBZKQCi2gqYlthVADyvc8pEWSkA=" + }, + { + "id": 3666958, + "linkIdReversed": null, + "fromNodeId": 3874100, + "toNodeId": 596833, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.907, + "geometry": "AQIAAAACAAAAKLaCpiW2FUAPK9zykRZKQMgjuJGytRVAdXXHYpsWSkA=" + }, + { + "id": 3666959, + "linkIdReversed": null, + "fromNodeId": 597007, + "toNodeId": 3874101, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAACAAAAD0WBPpG3FUDhQh7BjRZKQOFh2jf3txVA26LMBpkWSkA=" + }, + { + "id": 3666960, + "linkIdReversed": null, + "fromNodeId": 3874101, + "toNodeId": 3874102, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAACAAAA4WHaN/e3FUDboswGmRZKQLN+MzFduBVA1gJ7TKQWSkA=" + }, + { + "id": 3666961, + "linkIdReversed": null, + "fromNodeId": 3874102, + "toNodeId": 3874103, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAADAAAAs34zMV24FUDWAntMpBZKQFGf5A6buBVAIJxPHasWSkAHeqhtw7gVQP/mxYmvFkpA" + }, + { + "id": 3666962, + "linkIdReversed": null, + "fromNodeId": 3874103, + "toNodeId": 3874104, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAACAAAAB3qobcO4FUD/5sWJrxZKQN9TOe0puRVAKcsQx7oWSkA=" + }, + { + "id": 3666963, + "linkIdReversed": null, + "fromNodeId": 3874104, + "toNodeId": 3874105, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAACAAAA31M57Sm5FUApyxDHuhZKQDkM5q+QuRVAU69bBMYWSkA=" + }, + { + "id": 3666964, + "linkIdReversed": null, + "fromNodeId": 3874105, + "toNodeId": 3874106, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAACAAAAOQzmr5C5FUBTr1sExhZKQBDmdi/3uRVAfZOmQdEWSkA=" + }, + { + "id": 3666965, + "linkIdReversed": null, + "fromNodeId": 3874106, + "toNodeId": 597008, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.609, + "geometry": "AQIAAAACAAAAEOZ2L/e5FUB9k6ZB0RZKQOi/B69duhVAp3fxftwWSkA=" + }, + { + "id": 3666966, + "linkIdReversed": null, + "fromNodeId": 597007, + "toNodeId": 3874107, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAEAAAAD0WBPpG3FUDhQh7BjRZKQOy+Y3jstxVA5WN3gZIWSkDE6o8wDLgVQMYWghyUFkpArU1jey24FUDRkPEolRZKQA==" + }, + { + "id": 3666967, + "linkIdReversed": null, + "fromNodeId": 3874107, + "toNodeId": 3874108, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAGAAAArU1jey24FUDRkPEolRZKQJwzorQ3uBVA9WbUfJUWSkA1XU90XbgVQO91Ul+WFkpA1GAaho+4FUCzQ/zDlhZKQJXSM73EuBVA73VSX5YWSkDObi2T4bgVQKfJjLeVFkpA" + }, + { + "id": 3666968, + "linkIdReversed": null, + "fromNodeId": 3874108, + "toNodeId": 3874109, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAHAAAAzm4tk+G4FUCnyYy3lRZKQPxW68TluBVANlZinpUWSkCxMa8jDrkVQAgGED6UFkpALqpFRDG5FUAmUwWjkhZKQFYPmIdMuRVA9wKzQpEWSkARiq2gabkVQEzFxryOFkpA+7K0U3O5FUAv4GWGjRZKQA==" + }, + { + "id": 3666969, + "linkIdReversed": null, + "fromNodeId": 3874109, + "toNodeId": 3874110, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAFAAAA+7K0U3O5FUAv4GWGjRZKQIkoJm+AuRVAfbH34osWSkCU3GETmbkVQKMjufyHFkpAIlLTLqa5FUAi4Xt/gxZKQCJS0y6muRVAvoOfOIAWSkA=" + }, + { + "id": 3666970, + "linkIdReversed": null, + "fromNodeId": 3874110, + "toNodeId": 3874111, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAFAAAAIlLTLqa5FUC+g584gBZKQCJS0y6muRVAJbGk3H0WSkAGhNbDl7kVQKRuZ195FkpAAI3SpX+5FUAXfnA+dRZKQHi3skRnuRVA43DmV3MWSkA=" + }, + { + "id": 3666971, + "linkIdReversed": null, + "fromNodeId": 3874111, + "toNodeId": 3874112, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAFAAAAeLeyRGe5FUDjcOZXcxZKQHh95qxPuRVAT1sjgnEWSkCm1CXjGLkVQC3t1FxuFkpAEhH+RdC4FUDVCWgibBZKQOUoQBTMuBVABI4EGmwWSkA=" + }, + { + "id": 3666972, + "linkIdReversed": null, + "fromNodeId": 3874112, + "toNodeId": 3874113, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAEAAAA5ShAFMy4FUAEjgQabBZKQHTTZpyGuBVAEDy+vWsWSkBdMSO8PbgVQApLPKBsFkpAR+aRPxi4FUD3qwDfbRZKQA==" + }, + { + "id": 3666973, + "linkIdReversed": null, + "fromNodeId": 3874113, + "toNodeId": 597006, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.088, + "geometry": "AQIAAAAEAAAAR+aRPxi4FUD3qwDfbRZKQEEMdO0LuBVAvHmqQ24WSkD4xDpVvrcVQMaLhSFyFkpAxY7GoX63FUDcSxqjdRZKQA==" + }, + { + "id": 3666974, + "linkIdReversed": null, + "fromNodeId": 597009, + "toNodeId": 597007, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 43.971, + "geometry": "AQIAAAACAAAA+WhxxjC3FUAujzUjgxZKQA9FgT6RtxVA4UIewY0WSkA=" + }, + { + "id": 3666975, + "linkIdReversed": null, + "fromNodeId": 596870, + "toNodeId": 3874114, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAACAAAAAkaXN4e7FUCga19ALxZKQJc5XRYTuxVABoIAGToWSkA=" + }, + { + "id": 3666976, + "linkIdReversed": null, + "fromNodeId": 3874114, + "toNodeId": 3874115, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAAEAAAAlzldFhO7FUAGggAZOhZKQFMj9DP1uhVANJ4I4jwWSkA9npYfuLoVQCUgJuFCFkpAh/2eWKe6FUDRXRJnRRZKQA==" + }, + { + "id": 3666977, + "linkIdReversed": null, + "fromNodeId": 3874115, + "toNodeId": 3874116, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAAh/2eWKe6FUDRXRJnRRZKQLU3+MJkuhVAflTDfk8WSkDXiGAcXLoVQGuBPSZSFkpA" + }, + { + "id": 3666978, + "linkIdReversed": null, + "fromNodeId": 3874116, + "toNodeId": 3874117, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAA14hgHFy6FUBrgT0mUhZKQNF0djI4uhVA0Jfe/lwWSkCkjLgANLoVQM8vStBfFkpA" + }, + { + "id": 3666979, + "linkIdReversed": null, + "fromNodeId": 3874117, + "toNodeId": 3874118, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAApIy4ADS6FUDPL0rQXxZKQGsNpfYiuhVAWBzO/GoWSkC1iZP7HboVQIY41sVtFkpA" + }, + { + "id": 3666980, + "linkIdReversed": null, + "fromNodeId": 3874118, + "toNodeId": 3874119, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAAtYmT+x26FUCGONbFbRZKQBbdek0PuhVATb9EvHUWSkBPIsK/CLoVQD5BYrt7FkpA" + }, + { + "id": 3666981, + "linkIdReversed": null, + "fromNodeId": 3874119, + "toNodeId": 3874120, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAACAAAATyLCvwi6FUA+QWK7exZKQKT7OQX5uRVAxcVRuYkWSkA=" + }, + { + "id": 3666982, + "linkIdReversed": null, + "fromNodeId": 3874120, + "toNodeId": 3874121, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAApPs5Bfm5FUDFxVG5iRZKQDj0Fg/vuRVAJlMFo5IWSkAWhsjp67kVQE1KQbeXFkpA" + }, + { + "id": 3666983, + "linkIdReversed": null, + "fromNodeId": 3874121, + "toNodeId": 3874122, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAACAAAAFobI6eu5FUBNSkG3lxZKQLu1TIbjuRVAdsb3xaUWSkA=" + }, + { + "id": 3666984, + "linkIdReversed": null, + "fromNodeId": 3874122, + "toNodeId": 3874123, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAAEAAAAu7VMhuO5FUB2xvfFpRZKQCegibDhuRVAx7ji4qgWSkCqfqXz4bkVQHpsy4CzFkpALV3BNuK5FUDOxkrMsxZKQA==" + }, + { + "id": 3666985, + "linkIdReversed": null, + "fromNodeId": 3874123, + "toNodeId": 3874124, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAALV3BNuK5FUDOxkrMsxZKQC16pwLuuRVADp90IsEWSkDBj2rY77kVQCbHndLBFkpA" + }, + { + "id": 3666986, + "linkIdReversed": null, + "fromNodeId": 3874124, + "toNodeId": 3874125, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAAwY9q2O+5FUAmx53SwRZKQFqcMcwJuhVAjBGJQssWSkCNXg1QGroVQLr5RnTPFkpA" + }, + { + "id": 3666987, + "linkIdReversed": null, + "fromNodeId": 3874125, + "toNodeId": 597008, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.707, + "geometry": "AQIAAAADAAAAjV4NUBq6FUC6+UZ0zxZKQNcUyOwsuhVAjZYDPdQWSkDovwevXboVQKd38X7cFkpA" + }, + { + "id": 3666988, + "linkIdReversed": null, + "fromNodeId": 597008, + "toNodeId": 3874126, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.067, + "geometry": "AQIAAAACAAAA6L8Hr126FUCnd/F+3BZKQIF6M2q+uhVAKqc9JecWSkA=" + }, + { + "id": 3666989, + "linkIdReversed": null, + "fromNodeId": 3874126, + "toNodeId": 3874127, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.067, + "geometry": "AQIAAAACAAAAgXozar66FUAqpz0l5xZKQJ0Te2gfuxVA3lomw/EWSkA=" + }, + { + "id": 3666990, + "linkIdReversed": null, + "fromNodeId": 3874127, + "toNodeId": 3874128, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.067, + "geometry": "AQIAAAADAAAAnRN7aB+7FUDeWibD8RZKQEGasWg6uxVA7l2DvvQWSkCz74rgf7sVQGGKcmn8FkpA" + }, + { + "id": 3666991, + "linkIdReversed": null, + "fromNodeId": 3874128, + "toNodeId": 3874129, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.067, + "geometry": "AQIAAAADAAAAs++K4H+7FUBhinJp/BZKQKddTDPduxVAwePbuwYXSkBG7X4V4LsVQOW5vg8HF0pA" + }, + { + "id": 3666996, + "linkIdReversed": null, + "fromNodeId": 596870, + "toNodeId": 3874133, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAACAAAAAkaXN4e7FUCga19ALxZKQNBhvrwAuxVAW0QUkzcWSkA=" + }, + { + "id": 3666997, + "linkIdReversed": null, + "fromNodeId": 3874133, + "toNodeId": 3874134, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAACAAAA0GG+vAC7FUBbRBSTNxZKQJ595UF6uhVAFR3J5T8WSkA=" + }, + { + "id": 3666998, + "linkIdReversed": null, + "fromNodeId": 3874134, + "toNodeId": 3874135, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAADAAAAnn3lQXq6FUAVHcnlPxZKQFpnfF9cuhVAea7vw0EWSkALKT+p9rkVQFLUmXtIFkpA" + }, + { + "id": 3666999, + "linkIdReversed": null, + "fromNodeId": 3874135, + "toNodeId": 3874136, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAACAAAACyk/qfa5FUBS1Jl7SBZKQH2R0JZzuRVAMIMxIlEWSkA=" + }, + { + "id": 3667000, + "linkIdReversed": null, + "fromNodeId": 3874136, + "toNodeId": 3874137, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAADAAAAfZHQlnO5FUAwgzEiURZKQEWeJF0zuRVALudSXFUWSkABMQkX8rgVQE8hV+pZFkpA" + }, + { + "id": 3667001, + "linkIdReversed": null, + "fromNodeId": 3874137, + "toNodeId": 3874138, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAACAAAAATEJF/K4FUBPIVfqWRZKQBMpzeZxuBVA3zKny2IWSkA=" + }, + { + "id": 3667002, + "linkIdReversed": null, + "fromNodeId": 3874138, + "toNodeId": 3874139, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAADAAAAEynN5nG4FUDfMqfLYhZKQH+8V61MuBVAK2haYmUWSkDhYdo397cVQNUJaCJsFkpA" + }, + { + "id": 3667003, + "linkIdReversed": null, + "fromNodeId": 3874139, + "toNodeId": 597006, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.066, + "geometry": "AQIAAAACAAAA4WHaN/e3FUDVCWgibBZKQMWOxqF+txVA3Esao3UWSkA=" + }, + { + "id": 3667004, + "linkIdReversed": null, + "fromNodeId": 597011, + "toNodeId": 3874140, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAADAAAAQSrFjsaxFUDmllZD4hZKQBMqOLwgshVAxsTm49oWSkBMxjGSPbIVQNmXbDzYFkpA" + }, + { + "id": 3667005, + "linkIdReversed": null, + "fromNodeId": 3874140, + "toNodeId": 3874141, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAACAAAATMYxkj2yFUDZl2w82BZKQJshVRSvshVACMvY0M0WSkA=" + }, + { + "id": 3667006, + "linkIdReversed": null, + "fromNodeId": 3874141, + "toNodeId": 3874142, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAADAAAAmyFVFK+yFUAIy9jQzRZKQAw9YvTcshVA2uIan8kWSkBbJO1GH7MVQJYGflTDFkpA" + }, + { + "id": 3667007, + "linkIdReversed": null, + "fromNodeId": 3874142, + "toNodeId": 3874143, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAACAAAAWyTtRh+zFUCWBn5UwxZKQJOLMbCOsxVAhEpcx7gWSkA=" + }, + { + "id": 3667008, + "linkIdReversed": null, + "fromNodeId": 3874143, + "toNodeId": 3874144, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAADAAAAk4sxsI6zFUCESlzHuBZKQCfbwB2osxVAGvz9YrYWSkDcKR2s/7MVQOIBZVOuFkpA" + }, + { + "id": 3667009, + "linkIdReversed": null, + "fromNodeId": 3874144, + "toNodeId": 3874145, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAACAAAA3CkdrP+zFUDiAWVTrhZKQKimJOtwtBVAETXR56MWSkA=" + }, + { + "id": 3667010, + "linkIdReversed": null, + "fromNodeId": 3874145, + "toNodeId": 3874146, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAADAAAAqKYk63C0FUARNdHnoxZKQAMlBRbAtBVAYtaLoZwWSkCAnZs247QVQLHbZ5WZFkpA" + }, + { + "id": 3667011, + "linkIdReversed": null, + "fromNodeId": 3874146, + "toNodeId": 3874147, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAACAAAAgJ2bNuO0FUCx22eVmRZKQPYjRWRYtRVAk3GMZI8WSkA=" + }, + { + "id": 3667012, + "linkIdReversed": null, + "fromNodeId": 3874147, + "toNodeId": 596837, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.115, + "geometry": "AQIAAAACAAAA9iNFZFi1FUCTcYxkjxZKQG2q7pHNtRVARYMUPIUWSkA=" + }, + { + "id": 3667013, + "linkIdReversed": null, + "fromNodeId": 597011, + "toNodeId": 3874148, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.877, + "geometry": "AQIAAAACAAAAQSrFjsaxFUDmllZD4hZKQJBLHHkgshVAyGDFqdYWSkA=" + }, + { + "id": 3667014, + "linkIdReversed": null, + "fromNodeId": 3874148, + "toNodeId": 3874149, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.877, + "geometry": "AQIAAAADAAAAkEsceSCyFUDIYMWp1hZKQIo8SbpmshVAJuSDns0WSkAS9YJPc7IVQCdMGM3KFkpA" + }, + { + "id": 3667015, + "linkIdReversed": null, + "fromNodeId": 3874149, + "toNodeId": 3874150, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.877, + "geometry": "AQIAAAADAAAAEvWCT3OyFUAnTBjNyhZKQKZh+IiYshVAPe/GgsIWSkDCL/XzprIVQHu9++O9FkpA" + }, + { + "id": 3667016, + "linkIdReversed": null, + "fromNodeId": 3874150, + "toNodeId": 597012, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.877, + "geometry": "AQIAAAACAAAAwi/186ayFUB7vfvjvRZKQPvo1JXPshVAHcwmwLAWSkA=" + }, + { + "id": 3667020, + "linkIdReversed": null, + "fromNodeId": 3874153, + "toNodeId": 3874154, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.597, + "geometry": "AQIAAAACAAAA2PFfIAiwFUD1vBsLChdKQAXfNH12sBVA6L0xBAAXSkA=" + }, + { + "id": 3667021, + "linkIdReversed": null, + "fromNodeId": 3874154, + "toNodeId": 3874155, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.597, + "geometry": "AQIAAAADAAAABd80fXawFUDovTEEABdKQHDOiNLesBVA4Xt/g/YWSkAyzAna5LAVQNu+R/31FkpA" + }, + { + "id": 3667022, + "linkIdReversed": null, + "fromNodeId": 3874155, + "toNodeId": 3874156, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.597, + "geometry": "AQIAAAACAAAAMswJ2uSwFUDbvkf99RZKQPiL2ZJVsRVA4CpPIOwWSkA=" + }, + { + "id": 3667023, + "linkIdReversed": null, + "fromNodeId": 3874156, + "toNodeId": 597011, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.597, + "geometry": "AQIAAAACAAAA+IvZklWxFUDgKk8g7BZKQEEqxY7GsRVA5pZWQ+IWSkA=" + }, + { + "id": 3667024, + "linkIdReversed": null, + "fromNodeId": 596837, + "toNodeId": 3874157, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.732, + "geometry": "AQIAAAACAAAAbarukc21FUBFgxQ8hRZKQM08uaZAthVAFHr9SXwWSkA=" + }, + { + "id": 3667025, + "linkIdReversed": null, + "fromNodeId": 3874157, + "toNodeId": 3874158, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.732, + "geometry": "AQIAAAACAAAAzTy5pkC2FUAUev1JfBZKQKrwZ3izthVAEvWCT3MWSkA=" + }, + { + "id": 3667026, + "linkIdReversed": null, + "fromNodeId": 3874158, + "toNodeId": 3874159, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.732, + "geometry": "AQIAAAACAAAAqvBneLO2FUAS9YJPcxZKQAqDMo0mtxVA4etrXWoWSkA=" + }, + { + "id": 3667027, + "linkIdReversed": null, + "fromNodeId": 3874159, + "toNodeId": 597014, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 42.732, + "geometry": "AQIAAAACAAAACoMyjSa3FUDh62tdahZKQOc24V6ZtxVA4GbxYmEWSkA=" + }, + { + "id": 3667034, + "linkIdReversed": null, + "fromNodeId": 3874165, + "toNodeId": 3874166, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAbHak+s6vFUAfoWZIFRdKQKq3BrZKsBVANqypLAoXSkA=" + }, + { + "id": 3667035, + "linkIdReversed": null, + "fromNodeId": 3874166, + "toNodeId": 3874167, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAqrcGtkqwFUA2rKksChdKQGvXhLTGsBVAHjNQGf8WSkA=" + }, + { + "id": 3667036, + "linkIdReversed": null, + "fromNodeId": 3874167, + "toNodeId": 3874168, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAa9eEtMawFUAeM1AZ/xZKQKgY529CsRVABrr2BfQWSkA=" + }, + { + "id": 3667037, + "linkIdReversed": null, + "fromNodeId": 3874168, + "toNodeId": 3874169, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAADAAAAqBjnb0KxFUAGuvYF9BZKQPIIbqRssRVAbRtGQfAWSkDmWUkrvrEVQO5AnfLoFkpA" + }, + { + "id": 3667038, + "linkIdReversed": null, + "fromNodeId": 3874169, + "toNodeId": 3874170, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAA5llJK76xFUDuQJ3y6BZKQCSbq+Y5shVABkzg1t0WSkA=" + }, + { + "id": 3667039, + "linkIdReversed": null, + "fromNodeId": 3874170, + "toNodeId": 3874171, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAJJur5jmyFUAGTODW3RZKQGLcDaK1shVA7dKGw9IWSkA=" + }, + { + "id": 3667040, + "linkIdReversed": null, + "fromNodeId": 3874171, + "toNodeId": 3874172, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAYtwNorWyFUDt0obD0hZKQJ8dcF0xsxVABd7Jp8cWSkA=" + }, + { + "id": 3667041, + "linkIdReversed": null, + "fromNodeId": 3874172, + "toNodeId": 3874173, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAnx1wXTGzFUAF3smnxxZKQN1e0hitsxVA7WRwlLwWSkA=" + }, + { + "id": 3667042, + "linkIdReversed": null, + "fromNodeId": 3874173, + "toNodeId": 3874174, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAA3V7SGK2zFUDtZHCUvBZKQJjBGJEotBVABHCzeLEWSkA=" + }, + { + "id": 3667043, + "linkIdReversed": null, + "fromNodeId": 3874174, + "toNodeId": 3874175, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAmMEYkSi0FUAEcLN4sRZKQNYCe0yktBVA7PZZZaYWSkA=" + }, + { + "id": 3667044, + "linkIdReversed": null, + "fromNodeId": 3874175, + "toNodeId": 3874176, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAADAAAA1gJ7TKS0FUDs9lllphZKQDsYsU8AtRVA0xVsI54WSkAfvkwUIbUVQKX5Y1qbFkpA" + }, + { + "id": 3667045, + "linkIdReversed": null, + "fromNodeId": 3874176, + "toNodeId": 3874177, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAH75MFCG1FUCl+WNamxZKQAcJUb6gtRVAD18mipAWSkA=" + }, + { + "id": 3667046, + "linkIdReversed": null, + "fromNodeId": 3874177, + "toNodeId": 3874178, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAADAAAABwlRvqC1FUAPXyaKkBZKQLyuX7AbthVAPpKSHoYWSkByMnGrILYVQHrE6LmFFkpA" + }, + { + "id": 3667047, + "linkIdReversed": null, + "fromNodeId": 3874178, + "toNodeId": 3874179, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAcjJxqyC2FUB6xOi5hRZKQIhlM4ekthVAOIQqNXsWSkA=" + }, + { + "id": 3667048, + "linkIdReversed": null, + "fromNodeId": 3874179, + "toNodeId": 3874180, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAADAAAAiGUzh6S2FUA4hCo1exZKQEloy7kUtxVAB3sTQ3IWSkCkVS3pKLcVQMa/z7hwFkpA" + }, + { + "id": 3667049, + "linkIdReversed": null, + "fromNodeId": 3874180, + "toNodeId": 3874181, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAApFUt6Si3FUDGv8+4cBZKQNz2PeqvtxVAB14td2YWSkA=" + }, + { + "id": 3667050, + "linkIdReversed": null, + "fromNodeId": 3874181, + "toNodeId": 3874182, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAADAAAA3PY96q+3FUAHXi13ZhZKQA4tsp3vtxVAk8mpnWEWSkA2Bp0QOrgVQPpeQ3BcFkpA" + }, + { + "id": 3667051, + "linkIdReversed": null, + "fromNodeId": 3874182, + "toNodeId": 3874183, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAANgadEDq4FUD6XkNwXBZKQKzGEtbGuBVA0Eaum1IWSkA=" + }, + { + "id": 3667052, + "linkIdReversed": null, + "fromNodeId": 3874183, + "toNodeId": 3874184, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAADAAAArMYS1sa4FUDQRq6bUhZKQCgK9Ik8uRVAh+EjYkoWSkClZaTeU7kVQHaqfM9IFkpA" + }, + { + "id": 3667053, + "linkIdReversed": null, + "fromNodeId": 3874184, + "toNodeId": 3874185, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAApWWk3lO5FUB2qnzPSBZKQLA73XniuRVALXk8LT8WSkA=" + }, + { + "id": 3667054, + "linkIdReversed": null, + "fromNodeId": 3874185, + "toNodeId": 597016, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.601, + "geometry": "AQIAAAACAAAAsDvdeeK5FUAteTwtPxZKQLoRFhVxuhVAFMyYgjUWSkA=" + }, + { + "id": 3667060, + "linkIdReversed": null, + "fromNodeId": 597016, + "toNodeId": 3874189, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.102, + "geometry": "AQIAAAACAAAAuhEWFXG6FUAUzJiCNRZKQHWRQln4uhVA++qqQC0WSkA=" + }, + { + "id": 3667061, + "linkIdReversed": null, + "fromNodeId": 3874189, + "toNodeId": 3874190, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.102, + "geometry": "AQIAAAADAAAAdZFCWfi6FUD76qpALRZKQEeRtYZSuxVAP6phvycWSkC4rMJmgLsVQIIBhA8lFkpA" + }, + { + "id": 3667062, + "linkIdReversed": null, + "fromNodeId": 3874190, + "toNodeId": 3874191, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.102, + "geometry": "AQIAAAACAAAAuKzCZoC7FUCCAYQPJRZKQIogzsMJvBVASgfr/xwWSkA=" + }, + { + "id": 3667067, + "linkIdReversed": null, + "fromNodeId": 597020, + "toNodeId": 3874195, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 32.463, + "geometry": "AQIAAAACAAAARKM7iJ25FUDOcAM+PxZKQPRRRlwAuhVAv9U6cTkWSkA=" + }, + { + "id": 3667068, + "linkIdReversed": null, + "fromNodeId": 3874195, + "toNodeId": 597016, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 32.463, + "geometry": "AQIAAAADAAAA9FFGXAC6FUC/1TpxORZKQCFX6lkQuhVAJc/1fTgWSkC6ERYVcboVQBTMmII1FkpA" + }, + { + "id": 3667070, + "linkIdReversed": null, + "fromNodeId": 596859, + "toNodeId": 3874196, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAu/JZnge3FUCAgSBAhhZKQMC0qE9ytxVAryKjA5IWSkA=" + }, + { + "id": 3667071, + "linkIdReversed": null, + "fromNodeId": 3874196, + "toNodeId": 3874197, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAwLSoT3K3FUCvIqMDkhZKQMV29wDdtxVArz+Jz50WSkA=" + }, + { + "id": 3667072, + "linkIdReversed": null, + "fromNodeId": 3874197, + "toNodeId": 3874198, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAxXb3AN23FUCvP4nPnRZKQMk4RrJHuBVA3+ALk6kWSkA=" + }, + { + "id": 3667073, + "linkIdReversed": null, + "fromNodeId": 3874198, + "toNodeId": 3874199, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAADAAAAyThGske4FUDf4AuTqRZKQMPvplt2uBVAd0tywK4WSkDUt8zpsrgVQA6Cjla1FkpA" + }, + { + "id": 3667074, + "linkIdReversed": null, + "fromNodeId": 3874199, + "toNodeId": 3874200, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAA1LfM6bK4FUAOgo5WtRZKQOTziqceuRVAnStKCcEWSkA=" + }, + { + "id": 3667075, + "linkIdReversed": null, + "fromNodeId": 3874200, + "toNodeId": 3874201, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAA5POKpx65FUCdK0oJwRZKQHgOZaiKuRVA/FBpxMwWSkA=" + }, + { + "id": 3667076, + "linkIdReversed": null, + "fromNodeId": 3874201, + "toNodeId": 3874202, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAeA5lqIq5FUD8UGnEzBZKQIhKI2b2uRVAi/okd9gWSkA=" + }, + { + "id": 3667077, + "linkIdReversed": null, + "fromNodeId": 3874202, + "toNodeId": 3874203, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAiEojZva5FUCL+iR32BZKQBtl/WZiuhVA6x9EMuQWSkA=" + }, + { + "id": 3667078, + "linkIdReversed": null, + "fromNodeId": 3874203, + "toNodeId": 3874204, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAG2X9ZmK6FUDrH0Qy5BZKQCuhuyTOuhVAecn/5O8WSkA=" + }, + { + "id": 3667079, + "linkIdReversed": null, + "fromNodeId": 3874204, + "toNodeId": 3874205, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAK6G7JM66FUB5yf/k7xZKQDzdeeI5uxVACHO7l/sWSkA=" + }, + { + "id": 3667080, + "linkIdReversed": null, + "fromNodeId": 3874205, + "toNodeId": 3874206, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAPN154jm7FUAIc7uX+xZKQM/3U+OluxVAZ5jaUgcXSkA=" + }, + { + "id": 3667081, + "linkIdReversed": null, + "fromNodeId": 3874206, + "toNodeId": 3874207, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.725, + "geometry": "AQIAAAACAAAAz/dT46W7FUBnmNpSBxdKQN8zEqERvBVA9kGWBRMXSkA=" + }, + { + "id": 3667119, + "linkIdReversed": null, + "fromNodeId": 597014, + "toNodeId": 3874238, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAEAAAA5zbhXpm3FUDgZvFiYRZKQDyE8dO4txVA14hgHFwWSkD4/gbt1bcVQGL03EJXFkpAU8+CUN63FUCCdRw/VBZKQA==" + }, + { + "id": 3667120, + "linkIdReversed": null, + "fromNodeId": 3874238, + "toNodeId": 3874239, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAHAAAAU8+CUN63FUCCdRw/VBZKQIC3QILitxVAETY8vVIWSkCun/6z5rcVQIRFRZxOFkpADhDM0eO3FUAsYthhTBZKQLn8h/TbtxVARfKVQEoWSkA8vr1r0LcVQKZiY15HFkpA+OEgIcq3FUAMXB5rRhZKQA==" + }, + { + "id": 3667121, + "linkIdReversed": null, + "fromNodeId": 3874239, + "toNodeId": 3874240, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAGAAAA+OEgIcq3FUAMXB5rRhZKQKPO3EPCtxVAv/IgPUUWSkD4im69prcVQPDeUWNCFkpA/vDz34O3FUCSPq2iPxZKQLq9pDFatxVAq85qgT0WSkBljXqIRrcVQJOmQdE8FkpA" + }, + { + "id": 3667122, + "linkIdReversed": null, + "fromNodeId": 3874240, + "toNodeId": 3874241, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAGAAAAZY16iEa3FUCTpkHRPBZKQLWM1HsqtxVA+Z/83TsWSkBxPJ8B9bYVQNAM4gM7FkpApG38icq2FUCPHVTiOhZKQFt9dVWgthVAQYAMHTsWSkDBjZQtkrYVQJTai2g7FkpA" + }, + { + "id": 3667123, + "linkIdReversed": null, + "fromNodeId": 3874241, + "toNodeId": 3874242, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAGAAAAwY2ULZK2FUCU2otoOxZKQJ/leXB3thVAO4+K/zsWSkBypgnbT7YVQOcAwRw9FkpAq7GEtTG2FUDaHr3hPhZKQJojK78MthVAc/G3PUEWSkBLsDic+bUVQMYX7fFCFkpA" + }, + { + "id": 3667124, + "linkIdReversed": null, + "fromNodeId": 3874242, + "toNodeId": 3874243, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAGAAAAS7A4nPm1FUDGF+3xQhZKQGdEaW/wtRVAHy+kw0MWSkAS91j60LUVQClBf6FHFkpAXFZhM8C1FUB0QuigSxZKQC9uowG8tRVAhEVFnE4WSkAvbqMBvLUVQLOVl/xPFkpA" + }, + { + "id": 3667125, + "linkIdReversed": null, + "fromNodeId": 3874243, + "toNodeId": 596864, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 48.283, + "geometry": "AQIAAAAFAAAAL26jAby1FUCzlZf8TxZKQKyPh767tRVAp7OTwVEWSkDl8bT8wLUVQECGjh1UFkpAj/tW68S1FUAn9tA+VhZKQKzmOSLftRVAyqZc4V0WSkA=" + }, + { + "id": 3667126, + "linkIdReversed": null, + "fromNodeId": 597014, + "toNodeId": 3874244, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.443, + "geometry": "AQIAAAADAAAA5zbhXpm3FUDgZvFiYRZKQOzbSUT4txVAN8XjoloWSkDEB3b8F7gVQJFEL6NYFkpA" + }, + { + "id": 3667127, + "linkIdReversed": null, + "fromNodeId": 3874244, + "toNodeId": 3874245, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.443, + "geometry": "AQIAAAACAAAAxAd2/Be4FUCRRC+jWBZKQFdcHJWbuBVAp+fdWFAWSkA=" + }, + { + "id": 3667128, + "linkIdReversed": null, + "fromNodeId": 3874245, + "toNodeId": 3874246, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.443, + "geometry": "AQIAAAADAAAAV1wclZu4FUCn591YUBZKQBIR/kXQuBVAo5I6AU0WSkDTvOMUHbkVQNujN9xHFkpA" + }, + { + "id": 3667129, + "linkIdReversed": null, + "fromNodeId": 3874246, + "toNodeId": 597020, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.443, + "geometry": "AQIAAAACAAAA07zjFB25FUDbozfcRxZKQESjO4iduRVAznADPj8WSkA=" + }, + { + "id": 3667130, + "linkIdReversed": null, + "fromNodeId": 597029, + "toNodeId": 3874247, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.673, + "geometry": "AQIAAAACAAAAYygn2lW4FUARHm0csRZKQP0S8db5txVABB+DFacWSkA=" + }, + { + "id": 3667131, + "linkIdReversed": null, + "fromNodeId": 3874247, + "toNodeId": 3874248, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.673, + "geometry": "AQIAAAACAAAA/RLx1vm3FUAEH4MVpxZKQBUfn5CdtxVA9x+ZDp0WSkA=" + }, + { + "id": 3667132, + "linkIdReversed": null, + "fromNodeId": 3874248, + "toNodeId": 3874249, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.673, + "geometry": "AQIAAAACAAAAFR+fkJ23FUD3H5kOnRZKQK8JaY1BtxVA6iCvB5MWSkA=" + }, + { + "id": 3667133, + "linkIdReversed": null, + "fromNodeId": 3874249, + "toNodeId": 596855, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 41.673, + "geometry": "AQIAAAACAAAArwlpjUG3FUDqIK8HkxZKQEn0MorlthVA3iHFAIkWSkA=" + }, + { + "id": 3667134, + "linkIdReversed": null, + "fromNodeId": 596864, + "toNodeId": 3874250, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 36.710, + "geometry": "AQIAAAACAAAArOY5It+1FUDKplzhXRZKQAZlGk0uthVA+69z02YWSkA=" + }, + { + "id": 3667135, + "linkIdReversed": null, + "fromNodeId": 3874250, + "toNodeId": 597030, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 36.710, + "geometry": "AQIAAAACAAAABmUaTS62FUD7r3PTZhZKQOPBFrt9thVAXD0nvW8WSkA=" + }, + { + "id": 3667136, + "linkIdReversed": null, + "fromNodeId": 597030, + "toNodeId": 3874251, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.380, + "geometry": "AQIAAAACAAAA48EWu322FUBcPSe9bxZKQC0mNh/XthVARWYucHkWSkA=" + }, + { + "id": 3667137, + "linkIdReversed": null, + "fromNodeId": 3874251, + "toNodeId": 597009, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 40.380, + "geometry": "AQIAAAACAAAALSY2H9e2FUBFZi5weRZKQPloccYwtxVALo81I4MWSkA=" + }, + { + "id": 3669263, + "linkIdReversed": null, + "fromNodeId": 3875465, + "toNodeId": 3875466, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAAXf5D+u27FUAp6sw9JBZKQCoaa39nuxVAT3l0IywWSkB6Nqs+V7sVQOl/uRYtFkpA" + }, + { + "id": 3669264, + "linkIdReversed": null, + "fromNodeId": 3875466, + "toNodeId": 3875467, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAejarPle7FUDpf7kWLRZKQCAKZkzBuhVAGonQCDYWSkA=" + }, + { + "id": 3669265, + "linkIdReversed": null, + "fromNodeId": 3875467, + "toNodeId": 3875468, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAAIApmTMG6FUAaidAINhZKQNdrelBQuhVA8656wDwWSkBa8+MvLboVQF392CQ/FkpA" + }, + { + "id": 3669266, + "linkIdReversed": null, + "fromNodeId": 3875468, + "toNodeId": 3875469, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAWvPjLy26FUBd/dgkPxZKQNL7xteeuRVApS4Zx0gWSkA=" + }, + { + "id": 3669267, + "linkIdReversed": null, + "fromNodeId": 3875469, + "toNodeId": 3875470, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAA0vvG1565FUClLhnHSBZKQORnI9dNuRVAkfP+P04WSkDTn/1IEbkVQL7bvHFSFkpA" + }, + { + "id": 3669268, + "linkIdReversed": null, + "fromNodeId": 3875470, + "toNodeId": 3875471, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAA05/9SBG5FUC+27xxUhZKQNoAbECEuBVASPyKNVwWSkA=" + }, + { + "id": 3669269, + "linkIdReversed": null, + "fromNodeId": 3875471, + "toNodeId": 3875472, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAA2gBsQIS4FUBI/Io1XBZKQP0v16IFuBVAZ5qw/WQWSkBp/S0B+LcVQKKYvAFmFkpA" + }, + { + "id": 3669270, + "linkIdReversed": null, + "fromNodeId": 3875472, + "toNodeId": 3875473, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAaf0tAfi3FUCimLwBZhZKQKnAyTZwtxVAwQKYMnAWSkA=" + }, + { + "id": 3669271, + "linkIdReversed": null, + "fromNodeId": 3875473, + "toNodeId": 3875474, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAAqcDJNnC3FUDBApgycBZKQPOOU3QktxVAjq7S3XUWSkB33PC76bYVQFDgnXx6FkpA" + }, + { + "id": 3669272, + "linkIdReversed": null, + "fromNodeId": 3875474, + "toNodeId": 3875475, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAd9zwu+m2FUBQ4J18ehZKQFvs9lllthVA8iiV8IQWSkA=" + }, + { + "id": 3669273, + "linkIdReversed": null, + "fromNodeId": 3875475, + "toNodeId": 3875476, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAAW+z2WWW2FUDyKJXwhBZKQKuxhLUxthVA3iHFAIkWSkBiaksd5LUVQHVY4ZaPFkpA" + }, + { + "id": 3669274, + "linkIdReversed": null, + "fromNodeId": 3875476, + "toNodeId": 3875477, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAYmpLHeS1FUB1WOGWjxZKQH/cfvlktRVACvMeZ5oWSkA=" + }, + { + "id": 3669275, + "linkIdReversed": null, + "fromNodeId": 3875477, + "toNodeId": 3875478, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAAf9x++WS1FUAK8x5nmhZKQAIqHEEqtRVAwHYwYp8WSkAwZHWr57QVQOF86lilFkpA" + }, + { + "id": 3669276, + "linkIdReversed": null, + "fromNodeId": 3875478, + "toNodeId": 3875479, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAMGR1q+e0FUDhfOpYpRZKQHUBLzNstBVA+fVDbLAWSkA=" + }, + { + "id": 3669277, + "linkIdReversed": null, + "fromNodeId": 3875479, + "toNodeId": 3875480, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAdQEvM2y0FUD59UNssBZKQLqe6LrwsxVAEW+df7sWSkA=" + }, + { + "id": 3669278, + "linkIdReversed": null, + "fromNodeId": 3875480, + "toNodeId": 3875481, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAup7ouvCzFUARb51/uxZKQAA8okJ1sxVAWWyTisYWSkA=" + }, + { + "id": 3669279, + "linkIdReversed": null, + "fromNodeId": 3875481, + "toNodeId": 3875482, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAADyiQnWzFUBZbJOKxhZKQEXZW8r5shVAceXsndEWSkA=" + }, + { + "id": 3669280, + "linkIdReversed": null, + "fromNodeId": 3875482, + "toNodeId": 3875483, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAARdlbyvmyFUBx5eyd0RZKQIp2FVJ+shVAiV5GsdwWSkA=" + }, + { + "id": 3669281, + "linkIdReversed": null, + "fromNodeId": 3875483, + "toNodeId": 3875484, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAinYVUn6yFUCJXkax3BZKQM8Tz9kCshVAodefxOcWSkA=" + }, + { + "id": 3669282, + "linkIdReversed": null, + "fromNodeId": 3875484, + "toNodeId": 3875485, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAADAAAAzxPP2QKyFUCh15/E5xZKQLn98smKsRVAlnoWhPIWSkAUsYhhh7EVQOnUlc/yFkpA" + }, + { + "id": 3669283, + "linkIdReversed": null, + "fromNodeId": 3875485, + "toNodeId": 3875486, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAFLGIYYexFUDp1JXP8hZKQNwsXiwMsRVA0clS6/0WSkA=" + }, + { + "id": 3669284, + "linkIdReversed": null, + "fromNodeId": 3875486, + "toNodeId": 3875487, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAA3CxeLAyxFUDRyVLr/RZKQCeHTzqRsBVA6kKs/ggXSkA=" + }, + { + "id": 3669285, + "linkIdReversed": null, + "fromNodeId": 3875487, + "toNodeId": 3875488, + "speedInKilometersPerHour": 115, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 49.501, + "geometry": "AQIAAAACAAAAJ4dPOpGwFUDqQqz+CBdKQO8CJQUWsBVA0jdpGhQXSkA=" + }, + { + "id": 3675765, + "linkIdReversed": null, + "fromNodeId": 599091, + "toNodeId": 3878366, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.103, + "geometry": "AQIAAAADAAAAFw6EZAGzFUBUGcbdIBZKQC5x5IHIshVAEqW9wRcWSkBnmUUotrIVQB+7C5QUFkpA" + }, + { + "id": 3675766, + "linkIdReversed": null, + "fromNodeId": 3878366, + "toNodeId": 3878367, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 46.103, + "geometry": "AQIAAAADAAAAZ5lFKLayFUAfuwuUFBZKQGglrfiGshVAptHkYgwWSkBtqBjnb7IVQNjxXyAIFkpA" + }, + { + "id": 3675771, + "linkIdReversed": null, + "fromNodeId": 599093, + "toNodeId": 3878371, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.679, + "geometry": "AQIAAAADAAAA9Pv+zYuzFUCeJjPeVhZKQGbAWUqWsxVAWJHRAUkWSkBmwFlKlrMVQEYm4NdIFkpA" + }, + { + "id": 3675772, + "linkIdReversed": null, + "fromNodeId": 3878371, + "toNodeId": 3878372, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.679, + "geometry": "AQIAAAAEAAAAZsBZSpazFUBGJuDXSBZKQPrVHCCYsxVAYVJ8fEIWSkDSjbCoiLMVQEGADB07FkpASfJc34ezFUBfmbfqOhZKQA==" + }, + { + "id": 3675773, + "linkIdReversed": null, + "fromNodeId": 3878372, + "toNodeId": 3878373, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.679, + "geometry": "AQIAAAADAAAASfJc34ezFUBfmbfqOhZKQLDllettsxVA5XtGIjQWSkDS/DGtTbMVQO888ZwtFkpA" + }, + { + "id": 3675774, + "linkIdReversed": null, + "fromNodeId": 3878373, + "toNodeId": 599091, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.679, + "geometry": "AQIAAAADAAAA0vwxrU2zFUDvPPGcLRZKQESHwJFAsxVA0ova/SoWSkAXDoRkAbMVQFQZxt0gFkpA" + }, + { + "id": 3684607, + "linkIdReversed": 3684616, + "fromNodeId": 601546, + "toNodeId": 3882053, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 48.952, + "geometry": "AQIAAAACAAAAjswjfzCwFUAc6ndhaxZKQAvuBzwwsBVAObh0zHkWSkA=" + }, + { + "id": 3684608, + "linkIdReversed": 3684615, + "fromNodeId": 3882053, + "toNodeId": 3882054, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 48.952, + "geometry": "AQIAAAADAAAAC+4HPDCwFUA5uHTMeRZKQAvuBzwwsBVA198SgH8WSkCOzCN/MLAVQFWGcTeIFkpA" + }, + { + "id": 3684609, + "linkIdReversed": 3684614, + "fromNodeId": 3882054, + "toNodeId": 3882055, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 48.952, + "geometry": "AQIAAAADAAAAjswjfzCwFUBVhnE3iBZKQJSJWwUxsBVA3nL1Y5MWSkCDUrRyL7AVQHFUbqKWFkpA" + }, + { + "id": 3684909, + "linkIdReversed": 3684916, + "fromNodeId": 601607, + "toNodeId": 3882193, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 38.414, + "geometry": "AQIAAAAEAAAARL+2fvqvFUCSPq2iPxZKQAb3Ax4YsBVA9s/TgEEWSkDSi9r9KrAVQB8vpMNDFkpAWycuxyuwFUDs2t5uSRZKQA==" + }, + { + "id": 3684910, + "linkIdReversed": 3684915, + "fromNodeId": 3882193, + "toNodeId": 3882194, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 38.414, + "geometry": "AQIAAAADAAAAWycuxyuwFUDs2t5uSRZKQOPCgZAssBVAv0NRoE8WSkBsXtVZLbAVQIcyVMVUFkpA" + }, + { + "id": 3684911, + "linkIdReversed": 3684914, + "fromNodeId": 3882194, + "toNodeId": 3882195, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 38.414, + "geometry": "AQIAAAACAAAAbF7VWS2wFUCHMlTFVBZKQH2VfOwusBVAUg5mE2AWSkA=" + }, + { + "id": 3684912, + "linkIdReversed": 3684913, + "fromNodeId": 3882195, + "toNodeId": 601546, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 38.414, + "geometry": "AQIAAAACAAAAfZV87C6wFUBSDmYTYBZKQI7MI38wsBVAHOp3YWsWSkA=" + }, + { + "id": 3684922, + "linkIdReversed": 3684921, + "fromNodeId": 601607, + "toNodeId": 601609, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 39.066, + "geometry": "AQIAAAACAAAARL+2fvqvFUCSPq2iPxZKQOkLIef9rxVA5XtGIjQWSkA=" + }, + { + "id": 3685165, + "linkIdReversed": 3685168, + "fromNodeId": 3882328, + "toNodeId": 3882329, + "speedInKilometersPerHour": 14, + "reverseSpeedInKilometersPerHour": 14, + "distanceInMeters": 41.260, + "geometry": "AQIAAAACAAAA+kLIef+vFUD+ne3RGxZKQHKndLD+rxVA8gwa+icWSkA=" + }, + { + "id": 3685166, + "linkIdReversed": 3685167, + "fromNodeId": 3882329, + "toNodeId": 601609, + "speedInKilometersPerHour": 14, + "reverseSpeedInKilometersPerHour": 14, + "distanceInMeters": 41.260, + "geometry": "AQIAAAACAAAAcqd0sP6vFUDyDBr6JxZKQOkLIef9rxVA5XtGIjQWSkA=" + }, + { + "id": 3686216, + "linkIdReversed": null, + "fromNodeId": 596834, + "toNodeId": 3882835, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.267, + "geometry": "AQIAAAACAAAAqZ83FamwFUClg/V/DhdKQFVq9kArsBVA4gZ8fhgXSkA=" + }, + { + "id": 3686217, + "linkIdReversed": null, + "fromNodeId": 3882835, + "toNodeId": 3882836, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.267, + "geometry": "AQIAAAACAAAAVWr2QCuwFUDiBnx+GBdKQAE1tWytrxVA7gVmhSIXSkA=" + }, + { + "id": 3686220, + "linkIdReversed": null, + "fromNodeId": 597012, + "toNodeId": 3882838, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAACAAAA++jUlc+yFUAdzCbAsBZKQLwgIjXtshVA4rA08KMWSkA=" + }, + { + "id": 3686221, + "linkIdReversed": null, + "fromNodeId": 3882838, + "toNodeId": 3882839, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAACAAAAvCAiNe2yFUDisDTwoxZKQPt5U5EKsxVAp5VCIJcWSkA=" + }, + { + "id": 3686222, + "linkIdReversed": null, + "fromNodeId": 3882839, + "toNodeId": 3882840, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAADAAAA+3lTkQqzFUCnlUIglxZKQPuWOV0WsxVAryKjA5IWSkDpfHiWILMVQMuCiT+KFkpA" + }, + { + "id": 3686223, + "linkIdReversed": null, + "fromNodeId": 3882840, + "toNodeId": 3882841, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAADAAAA6Xx4liCzFUDLgok/ihZKQGxblNkgsxVAipP7HYoWSkALJZNTO7MVQMDrM2d9FkpA" + }, + { + "id": 3686224, + "linkIdReversed": null, + "fromNodeId": 3882841, + "toNodeId": 3882842, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAACAAAACyWTUzuzFUDA6zNnfRZKQLCryVNWsxVAtVTejnAWSkA=" + }, + { + "id": 3686225, + "linkIdReversed": null, + "fromNodeId": 3882842, + "toNodeId": 3882843, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAACAAAAsKvJU1azFUC1VN6OcBZKQNJT5BBxsxVAqb2ItmMWSkA=" + }, + { + "id": 3686226, + "linkIdReversed": null, + "fromNodeId": 3882843, + "toNodeId": 599093, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 44.171, + "geometry": "AQIAAAACAAAA0lPkEHGzFUCpvYi2YxZKQPT7/s2LsxVAniYz3lYWSkA=" + }, + { + "id": 6369279, + "linkIdReversed": 6369288, + "fromNodeId": 5442740, + "toNodeId": 5442741, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.430, + "geometry": "AQIAAAACAAAAexNDcjKxFUBmu0IfLBdKQAiOy7ipsRVAVP8gkiEXSkA=" + }, + { + "id": 6369280, + "linkIdReversed": 6369287, + "fromNodeId": 5442741, + "toNodeId": 5442742, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.430, + "geometry": "AQIAAAACAAAACI7LuKmxFUBU/yCSIRdKQBnnb0IhshVAEr9iDRcXSkA=" + }, + { + "id": 6369281, + "linkIdReversed": 6369286, + "fromNodeId": 5442742, + "toNodeId": 5442743, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.430, + "geometry": "AQIAAAAEAAAAGedvQiGyFUASv2INFxdKQCTyXUpdshVAOGVuvhEXSkBANPPkmrIVQO1jBb8NF0pAlUc3wqKyFUBYGvhRDRdKQA==" + }, + { + "id": 6369282, + "linkIdReversed": 6369285, + "fromNodeId": 5442743, + "toNodeId": 5442744, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.430, + "geometry": "AQIAAAAEAAAAlUc3wqKyFUBYGvhRDRdKQBe30QDeshVAlrTiGwoXSkAL68a7I7MVQMegE0IHF0pAwaikTkCzFUA+BcB4BhdKQA==" + }, + { + "id": 6369283, + "linkIdReversed": 6369284, + "fromNodeId": 5442744, + "toNodeId": 1117050, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.430, + "geometry": "AQIAAAADAAAAwaikTkCzFUA+BcB4BhdKQFUyAFRxsxVA4DDRIAUXSkAyA5Xx77MVQPnAjv8CF0pA" + }, + { + "id": 6405115, + "linkIdReversed": null, + "fromNodeId": 1121748, + "toNodeId": 5467882, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 37.625, + "geometry": "AQIAAAADAAAAuTgqN1G7FUAydOygEhdKQPg1kgThuhVA4gZ8fhgXSkCunL0z2roVQNZYwtoYF0pA" + }, + { + "id": 6405116, + "linkIdReversed": null, + "fromNodeId": 5467882, + "toNodeId": 5467883, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 37.625, + "geometry": "AQIAAAADAAAArpy9M9q6FUDWWMLaGBdKQNycSgaAuhVAGmmpvB0XSkA900uMZboVQMyXF2AfF0pA" + }, + { + "id": 6405117, + "linkIdReversed": null, + "fromNodeId": 5467883, + "toNodeId": 5467884, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 37.625, + "geometry": "AQIAAAAEAAAAPdNLjGW6FUDMlxdgHxdKQKSpnsw/uhVAZmoSvCEXSkC7KeW1EroVQILn3sMlF0pAsJKP3QW6FUB1BduIJxdKQA==" + }, + { + "id": 6405118, + "linkIdReversed": null, + "fromNodeId": 5467884, + "toNodeId": 1121749, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 37.625, + "geometry": "AQIAAAAEAAAAsJKP3QW6FUB1BduIJxdKQGuZDMfzuRVAf0sA/ikXSkCkwW1t4bkVQNf6IqEtF0pAn+dPG9W5FUCl2qfjMRdKQA==" + }, + { + "id": 6405120, + "linkIdReversed": null, + "fromNodeId": 5467885, + "toNodeId": 1121748, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.431, + "geometry": "AQIAAAACAAAAlkOLbOe7FUDdYKjDChdKQLk4KjdRuxVAMnTsoBIXSkA=" + }, + { + "id": 6405165, + "linkIdReversed": 6405170, + "fromNodeId": 1117049, + "toNodeId": 5467903, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 34.732, + "geometry": "AQIAAAACAAAAfh6jPPOyFUBLW1zjMxdKQHHjFvNzsxVALqpFRDEXSkA=" + }, + { + "id": 6405166, + "linkIdReversed": 6405169, + "fromNodeId": 5467903, + "toNodeId": 5467904, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 34.732, + "geometry": "AQIAAAACAAAAceMW83OzFUAuqkVEMRdKQOLJbmb0sxVAQX3LnC4XSkA=" + }, + { + "id": 6405167, + "linkIdReversed": 6405168, + "fromNodeId": 5467904, + "toNodeId": 1121765, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 34.732, + "geometry": "AQIAAAACAAAA4sluZvSzFUBBfcucLhdKQNaO4hx1tBVAJcy0/SsXSkA=" + }, + { + "id": 6405178, + "linkIdReversed": 6405177, + "fromNodeId": 1121765, + "toNodeId": 5467911, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 35.069, + "geometry": "AQIAAAACAAAA1o7iHHW0FUAlzLT9KxdKQF5pGan3tBVASgosgCkXSkA=" + }, + { + "id": 6405179, + "linkIdReversed": 6405176, + "fromNodeId": 5467911, + "toNodeId": 5467912, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 35.069, + "geometry": "AQIAAAACAAAAXmkZqfe0FUBKCiyAKRdKQGJlNPJ5tRVAb0ijAicXSkA=" + }, + { + "id": 6405180, + "linkIdReversed": 6405175, + "fromNodeId": 5467912, + "toNodeId": 1121766, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 35.069, + "geometry": "AQIAAAADAAAAYmU08nm1FUBvSKMCJxdKQKAVGLK6tRVAgufewyUXSkDkgjP4+7UVQFOXjGMkF0pA" + }, + { + "id": 6405182, + "linkIdReversed": 6405181, + "fromNodeId": 1121765, + "toNodeId": 1121767, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 24.561, + "geometry": "AQIAAAACAAAA1o7iHHW0FUAlzLT9KxdKQNALdy6MtBVAUUzeADMXSkA=" + }, + { + "id": 6405186, + "linkIdReversed": 6405185, + "fromNodeId": 1117050, + "toNodeId": 5467915, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.824, + "geometry": "AQIAAAACAAAAMgOV8e+zFUD5wI7/AhdKQJLn+j4ctBVAXW+bqRAXSkA=" + }, + { + "id": 6405187, + "linkIdReversed": 6405184, + "fromNodeId": 5467915, + "toNodeId": 5467916, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.824, + "geometry": "AQIAAAACAAAAkuf6Phy0FUBdb5upEBdKQHaqfM9ItBVAwR2oUx4XSkA=" + }, + { + "id": 6405188, + "linkIdReversed": 6405183, + "fromNodeId": 5467916, + "toNodeId": 1121765, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 45, + "distanceInMeters": 47.824, + "geometry": "AQIAAAACAAAAdqp8z0i0FUDBHahTHhdKQNaO4hx1tBVAJcy0/SsXSkA=" + }, + { + "id": 6405218, + "linkIdReversed": 6405233, + "fromNodeId": 1117050, + "toNodeId": 5467931, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAACAAAAMgOV8e+zFUD5wI7/AhdKQF6ezhWltBVARl7WxAIXSkA=" + }, + { + "id": 6405219, + "linkIdReversed": 6405232, + "fromNodeId": 5467931, + "toNodeId": 5467932, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAADAAAAXp7OFaW0FUBGXtbEAhdKQCV2bW+3tBVAduJyvAIXSkAIW+z2WbUVQC4CY30DF0pA" + }, + { + "id": 6405220, + "linkIdReversed": 6405231, + "fromNodeId": 5467932, + "toNodeId": 5467933, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAACAAAACFvs9lm1FUAuAmN9AxdKQLEXCtgOthVAV5V9VwQXSkA=" + }, + { + "id": 6405221, + "linkIdReversed": 6405230, + "fromNodeId": 5467933, + "toNodeId": 5467934, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAACAAAAsRcK2A62FUBXlX1XBBdKQFrUJ7nDthVAgCiYMQUXSkA=" + }, + { + "id": 6405222, + "linkIdReversed": 6405229, + "fromNodeId": 5467934, + "toNodeId": 5467935, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAACAAAAWtQnucO2FUCAKJgxBRdKQASRRZp4txVAqruyCwYXSkA=" + }, + { + "id": 6405223, + "linkIdReversed": 6405228, + "fromNodeId": 5467935, + "toNodeId": 5467936, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAACAAAABJFFmni3FUCqu7ILBhdKQK1NY3stuBVAAtNp3QYXSkA=" + }, + { + "id": 6405224, + "linkIdReversed": 6405227, + "fromNodeId": 5467936, + "toNodeId": 5467937, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAADAAAArU1jey24FUAC02ndBhdKQLgGtkqwuBVAeQPMfAcXSkCmQ6fn3bgVQFu21hcJF0pA" + }, + { + "id": 6405225, + "linkIdReversed": 6405226, + "fromNodeId": 5467937, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.281, + "geometry": "AQIAAAAGAAAApkOn5924FUBbttYXCRdKQKwA323euBVAKzI6IAkXSkA01v7O9rgVQPNUh9wMF0pA39+gvfq4FUAWw9UBEBdKQFGHFW75uBVAu0OKARIXSkD7c9GQ8bgVQDyGx34WF0pA" + }, + { + "id": 6405235, + "linkIdReversed": 6405234, + "fromNodeId": 1121780, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 47.993, + "geometry": "AQIAAAACAAAAdCUC1T+4FUCTNeohGhdKQPtz0ZDxuBVAPIbHfhYXSkA=" + }, + { + "id": 6405237, + "linkIdReversed": null, + "fromNodeId": 5467945, + "toNodeId": 5467946, + "speedInKilometersPerHour": 24, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.913, + "geometry": "AQIAAAADAAAA3sfRHFm5FUCetdsuNBdKQErP9BJjuRVAMXpuoSsXSkD12JYBZ7kVQHU5JSAmF0pA" + }, + { + "id": 6405238, + "linkIdReversed": null, + "fromNodeId": 5467946, + "toNodeId": 5467947, + "speedInKilometersPerHour": 24, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.913, + "geometry": "AQIAAAAEAAAA9diWAWe5FUB1OSUgJhdKQJolAWpquRVAswdagSEXSkAdIQN5drkVQBdIUPwYF0pAoP8evHa5FUBNvW4RGBdKQA==" + }, + { + "id": 6405239, + "linkIdReversed": null, + "fromNodeId": 5467947, + "toNodeId": 1121779, + "speedInKilometersPerHour": 24, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.913, + "geometry": "AQIAAAADAAAAoP8evHa5FUBNvW4RGBdKQLE2xk54uRVAlgUTfxQXSkD7c9GQ8bgVQDyGx34WF0pA" + }, + { + "id": 6405244, + "linkIdReversed": 6405243, + "fromNodeId": 1121766, + "toNodeId": 5467951, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 38.815, + "geometry": "AQIAAAACAAAA5IIz+Pu1FUBTl4xjJBdKQIgrZ++MthVA19081SEXSkA=" + }, + { + "id": 6405245, + "linkIdReversed": 6405242, + "fromNodeId": 5467951, + "toNodeId": 5467952, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 38.815, + "geometry": "AQIAAAACAAAAiCtn74y2FUDX3TzVIRdKQCzUmuYdtxVAWyTtRh8XSkA=" + }, + { + "id": 6405246, + "linkIdReversed": 6405241, + "fromNodeId": 5467952, + "toNodeId": 5467953, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 38.815, + "geometry": "AQIAAAACAAAALNSa5h23FUBbJO1GHxdKQNB8zt2utxVAD+85sBwXSkA=" + }, + { + "id": 6405247, + "linkIdReversed": 6405240, + "fromNodeId": 5467953, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 38.815, + "geometry": "AQIAAAACAAAA0HzO3a63FUAP7zmwHBdKQHQlAtU/uBVAkzXqIRoXSkA=" + }, + { + "id": 6405249, + "linkIdReversed": 6405252, + "fromNodeId": 5467954, + "toNodeId": 5467955, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 44.599, + "geometry": "AQIAAAACAAAANszQeCK4FUDfpGlQNBdKQNV46SYxuBVAUS/4NCcXSkA=" + }, + { + "id": 6405250, + "linkIdReversed": 6405251, + "fromNodeId": 5467955, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 44.599, + "geometry": "AQIAAAACAAAA1XjpJjG4FUBRL/g0JxdKQHQlAtU/uBVAkzXqIRoXSkA=" + }, + { + "id": 6405257, + "linkIdReversed": 6405256, + "fromNodeId": 1121766, + "toNodeId": 5467960, + "speedInKilometersPerHour": 30, + "reverseSpeedInKilometersPerHour": 30, + "distanceInMeters": 35.349, + "geometry": "AQIAAAACAAAA5IIz+Pu1FUBTl4xjJBdKQDnQQ20bthVA0Amhgy4XSkA=" + }, + { + "id": 6409986, + "linkIdReversed": null, + "fromNodeId": 5470745, + "toNodeId": 5470746, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAADAAAAJLTlXIq7FUDXvRWJCRZKQA+BI4EGuxVAXFX2XREWSkAD6s2o+boVQAMK9fQRFkpA" + }, + { + "id": 6409987, + "linkIdReversed": null, + "fromNodeId": 5470746, + "toNodeId": 5470747, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAADAAAAA+rNqPm6FUADCvX0ERZKQF/v/nivuhVA6UXtfhUWSkDAlIEDWroVQGq8dJMYFkpA" + }, + { + "id": 6409988, + "linkIdReversed": null, + "fromNodeId": 5470747, + "toNodeId": 5470748, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAAEAAAAwJSBA1q6FUBqvHSTGBZKQLq6Y7FNuhVA/wWCABkWSkDSjEXT2bkVQNrHCn4bFkpAUDqRYKq5FUAPCd/7GxZKQA==" + }, + { + "id": 6409989, + "linkIdReversed": null, + "fromNodeId": 5470748, + "toNodeId": 5470749, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAADAAAAUDqRYKq5FUAPCd/7GxZKQKtcqPxruRVAV7WkoxwWSkCmfXN/9bgVQBXGFoIcFkpA" + }, + { + "id": 6409990, + "linkIdReversed": null, + "fromNodeId": 5470749, + "toNodeId": 5470750, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAAEAAAApn1zf/W4FUAVxhaCHBZKQNRIS+XtuBVAFcYWghwWSkBMi/okd7gVQGOXqN4aFkpAJezbSUS4FUDVPh2PGRZKQA==" + }, + { + "id": 6409991, + "linkIdReversed": null, + "fromNodeId": 5470750, + "toNodeId": 5470751, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAAEAAAAJezbSUS4FUDVPh2PGRZKQDbptkQuuBVA/wWCABkWSkCzXDY657cVQCRE+YIWFkpAX7hzYaS3FUB/944aExZKQA==" + }, + { + "id": 6409992, + "linkIdReversed": null, + "fromNodeId": 5470751, + "toNodeId": 5470752, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.408, + "geometry": "AQIAAAAFAAAAX7hzYaS3FUB/944aExZKQCv2l92TtxVAVmR0QBIWSkB2G9R+a7cVQDmzXaEPFkpAjX40nDK3FUChFK3cCxZKQHwNwXEZtxVAfnIUIAoWSkA=" + }, + { + "id": 6410877, + "linkIdReversed": null, + "fromNodeId": 1122767, + "toNodeId": 5471354, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.431, + "geometry": "AQIAAAACAAAAraHUXkS7FUDCNAwfERdKQIqsNZTauxVAbCHIQQkXSkA=" + }, + { + "id": 6410880, + "linkIdReversed": null, + "fromNodeId": 5471355, + "toNodeId": 5471356, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.451, + "geometry": "AQIAAAAEAAAAJ2a9GMq5FUCE1O3sKxdKQLb4FADjuRVA2spL/icXSkBEqFKzB7oVQI7J4v4jF0pA1xTI7Cy6FUBOQukLIRdKQA==" + }, + { + "id": 6410881, + "linkIdReversed": null, + "fromNodeId": 5471356, + "toNodeId": 5471357, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.451, + "geometry": "AQIAAAAEAAAA1xTI7Cy6FUBOQukLIRdKQP95GjBIuhVAl1ZD4h4XSkBlcmpnmLoVQIeHMH4aF0pAqYjTSba6FUDWWMLaGBdKQA==" + }, + { + "id": 6410882, + "linkIdReversed": null, + "fromNodeId": 5471357, + "toNodeId": 1122767, + "speedInKilometersPerHour": 45, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 45.451, + "geometry": "AQIAAAACAAAAqYjTSba6FUDWWMLaGBdKQK2h1F5EuxVAwjQMHxEXSkA=" + }, + { + "id": 7223061, + "linkIdReversed": null, + "fromNodeId": 5985262, + "toNodeId": 5985263, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 38.697, + "geometry": "AQIAAAACAAAA3zMSoRG8FUAgJuFCHhdKQHke3J21uxVA7xzKUBUXSkA=" + }, + { + "id": 7223062, + "linkIdReversed": null, + "fromNodeId": 5985263, + "toNodeId": 596832, + "speedInKilometersPerHour": 80, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 38.697, + "geometry": "AQIAAAACAAAAeR7cnbW7FUDvHMpQFRdKQBQJpppZuxVAvhOzXgwXSkA=" + }, + { + "id": 7223065, + "linkIdReversed": null, + "fromNodeId": 5985265, + "toNodeId": 5985266, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAADAAAANQ2K5gG8FUAj9gmgGBdKQEazsn3IuxVAelT83xEXSkBj8DDtm7sVQDVEFf4MF0pA" + }, + { + "id": 7223066, + "linkIdReversed": null, + "fromNodeId": 5985266, + "toNodeId": 5985267, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAY/Aw7Zu7FUA1RBX+DBdKQG9lic4yuxVAWf0RhgEXSkA=" + }, + { + "id": 7223067, + "linkIdReversed": null, + "fromNodeId": 5985267, + "toNodeId": 5985268, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAb2WJzjK7FUBZ/RGGARdKQHva4a/JuhVAfLYODvYWSkA=" + }, + { + "id": 7223068, + "linkIdReversed": null, + "fromNodeId": 5985268, + "toNodeId": 5985269, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAe9rhr8m6FUB8tg4O9hZKQIdPOpFguhVAoG8LluoWSkA=" + }, + { + "id": 7223069, + "linkIdReversed": null, + "fromNodeId": 5985269, + "toNodeId": 5985270, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAADAAAAh086kWC6FUCgbwuW6hZKQD4IAfkSuhVApKfIIeIWSkAWo66197kVQMMoCB7fFkpA" + }, + { + "id": 7223070, + "linkIdReversed": null, + "fromNodeId": 5985270, + "toNodeId": 5985271, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAFqOutfe5FUDDKAge3xZKQCjVPh2PuRVAF2ahndMWSkA=" + }, + { + "id": 7223071, + "linkIdReversed": null, + "fromNodeId": 5985271, + "toNodeId": 5985272, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAKNU+HY+5FUAXZqGd0xZKQL3l6scmuRVAaqM6HcgWSkA=" + }, + { + "id": 7223072, + "linkIdReversed": null, + "fromNodeId": 5985272, + "toNodeId": 5985273, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAveXqxya5FUBqozodyBZKQM4Xey++uBVAveDTnLwWSkA=" + }, + { + "id": 7223073, + "linkIdReversed": null, + "fromNodeId": 5985273, + "toNodeId": 597029, + "speedInKilometersPerHour": 95, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.631, + "geometry": "AQIAAAACAAAAzhd7L764FUC94NOcvBZKQGMoJ9pVuBVAER5tHLEWSkA=" + }, + { + "id": 7930097, + "linkIdReversed": null, + "fromNodeId": 6349336, + "toNodeId": 6349337, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.846, + "geometry": "AQIAAAAEAAAASL99HTi3FUBb0HtjCBZKQHyBWaFItxVAB0KygAkWSkDyzTY3prcVQIGTbeAOFkpAD9b/Ocy3FUB1sWmlEBZKQA==" + }, + { + "id": 7930098, + "linkIdReversed": null, + "fromNodeId": 6349337, + "toNodeId": 6349338, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.846, + "geometry": "AQIAAAAEAAAAD9b/Ocy3FUB1sWmlEBZKQDZ1HhX/txVADoRkARMWSkBjKCfaVbgVQGwkCcIVFkpAHqM883K4FUAS2QdZFhZKQA==" + }, + { + "id": 7930099, + "linkIdReversed": null, + "fromNodeId": 6349338, + "toNodeId": 6349339, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.846, + "geometry": "AQIAAAAEAAAAHqM883K4FUAS2QdZFhZKQFG8ytqmuBVATdcTXRcWSkDOxd/2BLkVQDs42JsYFkpAwqIiTie5FUCsqwK1GBZKQA==" + }, + { + "id": 7930100, + "linkIdReversed": null, + "fromNodeId": 6349339, + "toNodeId": 6349340, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.846, + "geometry": "AQIAAAAEAAAAwqIiTie5FUCsqwK1GBZKQABTBg5ouRVAvhb03hgWSkCOk8K8x7kVQAb3Ax4YFkpA+rfLft25FUBBKVq5FxZKQA==" + }, + { + "id": 7930101, + "linkIdReversed": null, + "fromNodeId": 6349340, + "toNodeId": 6349341, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.846, + "geometry": "AQIAAAADAAAA+rfLft25FUBBKVq5FxZKQEn2CDVDuhVArROX4xUWSkBUHt0Ii7oVQKPNcW4TFkpA" + }, + { + "id": 7930102, + "linkIdReversed": null, + "fromNodeId": 6349341, + "toNodeId": 6349342, + "speedInKilometersPerHour": 65, + "reverseSpeedInKilometersPerHour": 0, + "distanceInMeters": 47.846, + "geometry": "AQIAAAAEAAAAVB7dCIu6FUCjzXFuExZKQBsTYi6puhVAl1MCYhIWSkB7a2CrBLsVQEaVYdwNFkpA2zLgLCW7FUChFK3cCxZKQA==" + } +] diff --git a/map-matcher-library/src/test/resources/test-data/network.geojson b/map-matcher-library/src/test/resources/test-data/network.geojson index 8b7a15fc..df29f3c3 100644 --- a/map-matcher-library/src/test/resources/test-data/network.geojson +++ b/map-matcher-library/src/test/resources/test-data/network.geojson @@ -1 +1,14399 @@ -{"type":"FeatureCollection","features":[{"type":"Feature","id":3666256,"geometry":{"type":"LineString","coordinates":[[5.433595,52.173101],[5.433133,52.173317]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":39.714,"toNodeId":596870,"speedInKilometersPerHour":100.0,"fromNodeId":3873704}},{"type":"Feature","id":3666944,"geometry":{"type":"LineString","coordinates":[[5.42866,52.176369],[5.428427,52.17617]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":27.238,"toNodeId":597005,"speedInKilometersPerHour":100.0,"fromNodeId":3874089}},{"type":"Feature","id":3666076,"geometry":{"type":"LineString","coordinates":[[5.431601,52.178947],[5.43111,52.178622]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873575,"speedInKilometersPerHour":100.0,"fromNodeId":596829}},{"type":"Feature","id":3666077,"geometry":{"type":"LineString","coordinates":[[5.43111,52.178622],[5.431077,52.1786],[5.430663,52.178413],[5.430526,52.178363]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873576,"speedInKilometersPerHour":100.0,"fromNodeId":3873575}},{"type":"Feature","id":3666078,"geometry":{"type":"LineString","coordinates":[[5.430526,52.178363],[5.430206,52.178246],[5.429884,52.178165],[5.429882,52.178165]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873577,"speedInKilometersPerHour":100.0,"fromNodeId":3873576}},{"type":"Feature","id":3666082,"geometry":{"type":"LineString","coordinates":[[5.427747,52.17797],[5.427079,52.177963],[5.427025,52.177964]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873581,"speedInKilometersPerHour":100.0,"fromNodeId":3873580}},{"type":"Feature","id":3666079,"geometry":{"type":"LineString","coordinates":[[5.429882,52.178165],[5.429507,52.178104],[5.42918,52.178064]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873578,"speedInKilometersPerHour":100.0,"fromNodeId":3873577}},{"type":"Feature","id":3666080,"geometry":{"type":"LineString","coordinates":[[5.42918,52.178064],[5.429103,52.178055],[5.428641,52.178005],[5.428467,52.177998]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873579,"speedInKilometersPerHour":100.0,"fromNodeId":3873578}},{"type":"Feature","id":3666081,"geometry":{"type":"LineString","coordinates":[[5.428467,52.177998],[5.427836,52.177971],[5.427747,52.17797]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873580,"speedInKilometersPerHour":100.0,"fromNodeId":3873579}},{"type":"Feature","id":3666083,"geometry":{"type":"LineString","coordinates":[[5.427025,52.177964],[5.426695,52.177971],[5.426323,52.178013],[5.42631,52.178015]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873582,"speedInKilometersPerHour":100.0,"fromNodeId":3873581}},{"type":"Feature","id":3666084,"geometry":{"type":"LineString","coordinates":[[5.42631,52.178015],[5.42593,52.178082],[5.425628,52.178159]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873583,"speedInKilometersPerHour":100.0,"fromNodeId":3873582}},{"type":"Feature","id":3666088,"geometry":{"type":"LineString","coordinates":[[5.431217,52.178606],[5.430834,52.178264]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":3873586,"speedInKilometersPerHour":100.0,"fromNodeId":3873585}},{"type":"Feature","id":3666089,"geometry":{"type":"LineString","coordinates":[[5.430834,52.178264],[5.43045,52.177923]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":3873587,"speedInKilometersPerHour":100.0,"fromNodeId":3873586}},{"type":"Feature","id":3666085,"geometry":{"type":"LineString","coordinates":[[5.425628,52.178159],[5.425557,52.178177],[5.425227,52.178303],[5.425037,52.178409]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":3873584,"speedInKilometersPerHour":100.0,"fromNodeId":3873583}},{"type":"Feature","id":3666091,"geometry":{"type":"LineString","coordinates":[[5.430067,52.177581],[5.429754,52.177303],[5.429681,52.177241]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":3873589,"speedInKilometersPerHour":100.0,"fromNodeId":3873588}},{"type":"Feature","id":3666092,"geometry":{"type":"LineString","coordinates":[[5.429681,52.177241],[5.429287,52.176904]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":3873590,"speedInKilometersPerHour":100.0,"fromNodeId":3873589}},{"type":"Feature","id":3666086,"geometry":{"type":"LineString","coordinates":[[5.425037,52.178409],[5.424503,52.178707]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.372,"toNodeId":596830,"speedInKilometersPerHour":100.0,"fromNodeId":3873584}},{"type":"Feature","id":3666087,"geometry":{"type":"LineString","coordinates":[[5.431601,52.178947],[5.431217,52.178606]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":3873585,"speedInKilometersPerHour":100.0,"fromNodeId":596829}},{"type":"Feature","id":3666095,"geometry":{"type":"LineString","coordinates":[[5.432619,52.179786],[5.43228,52.179506]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.814,"toNodeId":3873592,"speedInKilometersPerHour":100.0,"fromNodeId":3873591}},{"type":"Feature","id":3666096,"geometry":{"type":"LineString","coordinates":[[5.43228,52.179506],[5.43194,52.179227]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.814,"toNodeId":3873593,"speedInKilometersPerHour":100.0,"fromNodeId":3873592}},{"type":"Feature","id":3666090,"geometry":{"type":"LineString","coordinates":[[5.43045,52.177923],[5.430067,52.177581]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":3873588,"speedInKilometersPerHour":100.0,"fromNodeId":3873587}},{"type":"Feature","id":3666093,"geometry":{"type":"LineString","coordinates":[[5.429287,52.176904],[5.428893,52.176567]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.171,"toNodeId":596831,"speedInKilometersPerHour":100.0,"fromNodeId":3873590}},{"type":"Feature","id":3666094,"geometry":{"type":"LineString","coordinates":[[5.432959,52.180065],[5.432619,52.179786]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.814,"toNodeId":3873591,"speedInKilometersPerHour":100.0,"fromNodeId":596832}},{"type":"Feature","id":3666100,"geometry":{"type":"LineString","coordinates":[[5.426578,52.177202],[5.426155,52.177499]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":3873596,"speedInKilometersPerHour":100.0,"fromNodeId":3873595}},{"type":"Feature","id":3666097,"geometry":{"type":"LineString","coordinates":[[5.43194,52.179227],[5.431601,52.178947]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.814,"toNodeId":596829,"speedInKilometersPerHour":100.0,"fromNodeId":3873593}},{"type":"Feature","id":3666098,"geometry":{"type":"LineString","coordinates":[[5.427439,52.176617],[5.427006,52.176908]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":3873594,"speedInKilometersPerHour":100.0,"fromNodeId":596833}},{"type":"Feature","id":3666103,"geometry":{"type":"LineString","coordinates":[[5.42532,52.178098],[5.424912,52.178403]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":3873599,"speedInKilometersPerHour":100.0,"fromNodeId":3873598}},{"type":"Feature","id":3666104,"geometry":{"type":"LineString","coordinates":[[5.424912,52.178403],[5.424503,52.178707]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":596830,"speedInKilometersPerHour":100.0,"fromNodeId":3873599}},{"type":"Feature","id":3666099,"geometry":{"type":"LineString","coordinates":[[5.427006,52.176908],[5.426791,52.177052],[5.426578,52.177202]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":3873595,"speedInKilometersPerHour":100.0,"fromNodeId":3873594}},{"type":"Feature","id":3666101,"geometry":{"type":"LineString","coordinates":[[5.426155,52.177499],[5.425733,52.177796]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":3873597,"speedInKilometersPerHour":100.0,"fromNodeId":3873596}},{"type":"Feature","id":3666107,"geometry":{"type":"LineString","coordinates":[[5.4237,52.179271],[5.423427,52.179462],[5.423301,52.179555]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.702,"toNodeId":3873602,"speedInKilometersPerHour":100.0,"fromNodeId":3873601}},{"type":"Feature","id":3666102,"geometry":{"type":"LineString","coordinates":[[5.425733,52.177796],[5.425619,52.177876],[5.42532,52.178098]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.905,"toNodeId":3873598,"speedInKilometersPerHour":100.0,"fromNodeId":3873597}},{"type":"Feature","id":3666105,"geometry":{"type":"LineString","coordinates":[[5.424503,52.178707],[5.424101,52.178989]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.702,"toNodeId":3873600,"speedInKilometersPerHour":100.0,"fromNodeId":596830}},{"type":"Feature","id":3666106,"geometry":{"type":"LineString","coordinates":[[5.424101,52.178989],[5.4237,52.179271]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.702,"toNodeId":3873601,"speedInKilometersPerHour":100.0,"fromNodeId":3873600}},{"type":"Feature","id":3666111,"geometry":{"type":"LineString","coordinates":[[5.427038,52.174931],[5.426641,52.174561]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.328,"toNodeId":3873605,"speedInKilometersPerHour":100.0,"fromNodeId":3873604}},{"type":"Feature","id":3666108,"geometry":{"type":"LineString","coordinates":[[5.423301,52.179555],[5.422911,52.179842]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.702,"toNodeId":3873603,"speedInKilometersPerHour":100.0,"fromNodeId":3873602}},{"type":"Feature","id":3666109,"geometry":{"type":"LineString","coordinates":[[5.422911,52.179842],[5.42252,52.18013]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.702,"toNodeId":596834,"speedInKilometersPerHour":100.0,"fromNodeId":3873603}},{"type":"Feature","id":3666114,"geometry":{"type":"LineString","coordinates":[[5.42591,52.173797],[5.425682,52.173553],[5.425613,52.173397]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.328,"toNodeId":596836,"speedInKilometersPerHour":100.0,"fromNodeId":3873607}},{"type":"Feature","id":3666110,"geometry":{"type":"LineString","coordinates":[[5.427436,52.175301],[5.427038,52.174931]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.328,"toNodeId":3873604,"speedInKilometersPerHour":100.0,"fromNodeId":596835}},{"type":"Feature","id":3666112,"geometry":{"type":"LineString","coordinates":[[5.426641,52.174561],[5.426505,52.174435],[5.426269,52.174182]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.328,"toNodeId":3873606,"speedInKilometersPerHour":100.0,"fromNodeId":3873605}},{"type":"Feature","id":3666117,"geometry":{"type":"LineString","coordinates":[[5.426173,52.175001],[5.425914,52.17506],[5.425746,52.17514],[5.425612,52.175228],[5.425594,52.175247]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873610,"speedInKilometersPerHour":100.0,"fromNodeId":3873609}},{"type":"Feature","id":3666118,"geometry":{"type":"LineString","coordinates":[[5.425594,52.175247],[5.425488,52.175358],[5.425406,52.175503],[5.425382,52.175662]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873611,"speedInKilometersPerHour":100.0,"fromNodeId":3873610}},{"type":"Feature","id":3666119,"geometry":{"type":"LineString","coordinates":[[5.425382,52.175662],[5.425381,52.175671],[5.425436,52.175835],[5.425518,52.175953],[5.425622,52.176044],[5.425653,52.176063]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873612,"speedInKilometersPerHour":100.0,"fromNodeId":3873611}},{"type":"Feature","id":3666120,"geometry":{"type":"LineString","coordinates":[[5.425653,52.176063],[5.425793,52.176147],[5.426001,52.176224],[5.426264,52.17627],[5.426272,52.176271]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873613,"speedInKilometersPerHour":100.0,"fromNodeId":3873612}},{"type":"Feature","id":3666121,"geometry":{"type":"LineString","coordinates":[[5.426272,52.176271],[5.426511,52.176289],[5.426772,52.176262],[5.426965,52.176204]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873614,"speedInKilometersPerHour":100.0,"fromNodeId":3873613}},{"type":"Feature","id":3666122,"geometry":{"type":"LineString","coordinates":[[5.426965,52.176204],[5.427002,52.176193],[5.427353,52.176022],[5.427542,52.175941]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":596837,"speedInKilometersPerHour":100.0,"fromNodeId":3873614}},{"type":"Feature","id":3666123,"geometry":{"type":"LineString","coordinates":[[5.427756,52.175579],[5.427436,52.175301]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":37.896,"toNodeId":596835,"speedInKilometersPerHour":100.0,"fromNodeId":596838}},{"type":"Feature","id":3666124,"geometry":{"type":"LineString","coordinates":[[5.427942,52.175461],[5.427554,52.175117]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.586,"toNodeId":3873615,"speedInKilometersPerHour":100.0,"fromNodeId":596839}},{"type":"Feature","id":3666125,"geometry":{"type":"LineString","coordinates":[[5.427554,52.175117],[5.427166,52.174773]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.586,"toNodeId":3873616,"speedInKilometersPerHour":100.0,"fromNodeId":3873615}},{"type":"Feature","id":3666126,"geometry":{"type":"LineString","coordinates":[[5.427166,52.174773],[5.426777,52.174429]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.586,"toNodeId":3873617,"speedInKilometersPerHour":100.0,"fromNodeId":3873616}},{"type":"Feature","id":3666127,"geometry":{"type":"LineString","coordinates":[[5.426777,52.174429],[5.426389,52.174085]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.586,"toNodeId":3873618,"speedInKilometersPerHour":100.0,"fromNodeId":3873617}},{"type":"Feature","id":3666113,"geometry":{"type":"LineString","coordinates":[[5.426269,52.174182],[5.42591,52.173797]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.328,"toNodeId":3873607,"speedInKilometersPerHour":100.0,"fromNodeId":3873606}},{"type":"Feature","id":3666115,"geometry":{"type":"LineString","coordinates":[[5.427436,52.175301],[5.427168,52.175137],[5.426982,52.17506],[5.426875,52.175031]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873608,"speedInKilometersPerHour":100.0,"fromNodeId":596835}},{"type":"Feature","id":3666130,"geometry":{"type":"LineString","coordinates":[[5.425613,52.173397],[5.425311,52.173067]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.122,"toNodeId":3873620,"speedInKilometersPerHour":100.0,"fromNodeId":596836}},{"type":"Feature","id":3666116,"geometry":{"type":"LineString","coordinates":[[5.426875,52.175031],[5.426734,52.174992],[5.426459,52.174976],[5.426199,52.174995],[5.426173,52.175001]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.247,"toNodeId":3873609,"speedInKilometersPerHour":100.0,"fromNodeId":3873608}},{"type":"Feature","id":3666128,"geometry":{"type":"LineString","coordinates":[[5.426389,52.174085],[5.426001,52.173741]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.586,"toNodeId":3873619,"speedInKilometersPerHour":100.0,"fromNodeId":3873618}},{"type":"Feature","id":3666129,"geometry":{"type":"LineString","coordinates":[[5.426001,52.173741],[5.425613,52.173397]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.586,"toNodeId":596836,"speedInKilometersPerHour":100.0,"fromNodeId":3873619}},{"type":"Feature","id":3666131,"geometry":{"type":"LineString","coordinates":[[5.425311,52.173067],[5.425306,52.173061],[5.425025,52.172732]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.122,"toNodeId":3873621,"speedInKilometersPerHour":100.0,"fromNodeId":3873620}},{"type":"Feature","id":3666132,"geometry":{"type":"LineString","coordinates":[[5.425025,52.172732],[5.42488,52.172562],[5.424755,52.172392]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.122,"toNodeId":3873622,"speedInKilometersPerHour":100.0,"fromNodeId":3873621}},{"type":"Feature","id":3666204,"geometry":{"type":"LineString","coordinates":[[5.42861,52.176056],[5.428276,52.175759]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.223,"toNodeId":3873665,"speedInKilometersPerHour":100.0,"fromNodeId":596855}},{"type":"Feature","id":3666205,"geometry":{"type":"LineString","coordinates":[[5.428276,52.175759],[5.427942,52.175461]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.223,"toNodeId":596839,"speedInKilometersPerHour":100.0,"fromNodeId":3873665}},{"type":"Feature","id":3666210,"geometry":{"type":"LineString","coordinates":[[5.424717,52.172107],[5.425023,52.172495]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873670,"speedInKilometersPerHour":100.0,"fromNodeId":3873669}},{"type":"Feature","id":3666211,"geometry":{"type":"LineString","coordinates":[[5.425023,52.172495],[5.425043,52.17252],[5.425335,52.17288]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873671,"speedInKilometersPerHour":100.0,"fromNodeId":3873670}},{"type":"Feature","id":3666214,"geometry":{"type":"LineString","coordinates":[[5.426059,52.173617],[5.426461,52.173969]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873674,"speedInKilometersPerHour":100.0,"fromNodeId":3873673}},{"type":"Feature","id":3666212,"geometry":{"type":"LineString","coordinates":[[5.425335,52.17288],[5.425417,52.172981],[5.425689,52.173251]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873672,"speedInKilometersPerHour":100.0,"fromNodeId":3873671}},{"type":"Feature","id":3666217,"geometry":{"type":"LineString","coordinates":[[5.427263,52.174675],[5.427665,52.175028]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873677,"speedInKilometersPerHour":100.0,"fromNodeId":3873676}},{"type":"Feature","id":3666213,"geometry":{"type":"LineString","coordinates":[[5.425689,52.173251],[5.426053,52.173611],[5.426059,52.173617]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873673,"speedInKilometersPerHour":100.0,"fromNodeId":3873672}},{"type":"Feature","id":3666215,"geometry":{"type":"LineString","coordinates":[[5.426461,52.173969],[5.426862,52.174322]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873675,"speedInKilometersPerHour":100.0,"fromNodeId":3873674}},{"type":"Feature","id":3666220,"geometry":{"type":"LineString","coordinates":[[5.428066,52.175381],[5.428403,52.175677]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.157,"toNodeId":3873678,"speedInKilometersPerHour":100.0,"fromNodeId":596857}},{"type":"Feature","id":3666216,"geometry":{"type":"LineString","coordinates":[[5.426862,52.174322],[5.427263,52.174675]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":3873676,"speedInKilometersPerHour":100.0,"fromNodeId":3873675}},{"type":"Feature","id":3666218,"geometry":{"type":"LineString","coordinates":[[5.427665,52.175028],[5.428066,52.175381]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.912,"toNodeId":596857,"speedInKilometersPerHour":100.0,"fromNodeId":3873677}},{"type":"Feature","id":3666221,"geometry":{"type":"LineString","coordinates":[[5.428403,52.175677],[5.42874,52.175972]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.157,"toNodeId":596859,"speedInKilometersPerHour":100.0,"fromNodeId":3873678}},{"type":"Feature","id":3666225,"geometry":{"type":"LineString","coordinates":[[5.425348,52.172509],[5.425448,52.172604],[5.42564,52.17276],[5.42576,52.172837]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873681,"speedInKilometersPerHour":100.0,"fromNodeId":3873680}},{"type":"Feature","id":3666226,"geometry":{"type":"LineString","coordinates":[[5.42576,52.172837],[5.425812,52.172871],[5.425988,52.172958],[5.426297,52.173088]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873682,"speedInKilometersPerHour":100.0,"fromNodeId":3873681}},{"type":"Feature","id":3666222,"geometry":{"type":"LineString","coordinates":[[5.42496,52.172169],[5.425194,52.172501],[5.42524,52.172555]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.076,"toNodeId":3873679,"speedInKilometersPerHour":100.0,"fromNodeId":596860}},{"type":"Feature","id":3666223,"geometry":{"type":"LineString","coordinates":[[5.42524,52.172555],[5.425388,52.172729],[5.425577,52.172924]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.076,"toNodeId":596861,"speedInKilometersPerHour":100.0,"fromNodeId":3873679}},{"type":"Feature","id":3666229,"geometry":{"type":"LineString","coordinates":[[5.427556,52.173366],[5.427933,52.173389],[5.42823,52.173395]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873685,"speedInKilometersPerHour":100.0,"fromNodeId":3873684}},{"type":"Feature","id":3666230,"geometry":{"type":"LineString","coordinates":[[5.42823,52.173395],[5.428576,52.173401],[5.428905,52.173399]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873686,"speedInKilometersPerHour":100.0,"fromNodeId":3873685}},{"type":"Feature","id":3666224,"geometry":{"type":"LineString","coordinates":[[5.42496,52.172169],[5.425298,52.172462],[5.425348,52.172509]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873680,"speedInKilometersPerHour":100.0,"fromNodeId":596860}},{"type":"Feature","id":3666227,"geometry":{"type":"LineString","coordinates":[[5.426297,52.173088],[5.426332,52.173103],[5.426621,52.173206],[5.426899,52.173274]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873683,"speedInKilometersPerHour":100.0,"fromNodeId":3873682}},{"type":"Feature","id":3666233,"geometry":{"type":"LineString","coordinates":[[5.430257,52.173387],[5.430814,52.17337],[5.430931,52.173363]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873689,"speedInKilometersPerHour":100.0,"fromNodeId":3873688}},{"type":"Feature","id":3666234,"geometry":{"type":"LineString","coordinates":[[5.430931,52.173363],[5.431254,52.173344],[5.4316,52.173307]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873690,"speedInKilometersPerHour":100.0,"fromNodeId":3873689}},{"type":"Feature","id":3666228,"geometry":{"type":"LineString","coordinates":[[5.426899,52.173274],[5.426995,52.173298],[5.427433,52.173359],[5.427556,52.173366]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873684,"speedInKilometersPerHour":100.0,"fromNodeId":3873683}},{"type":"Feature","id":3666231,"geometry":{"type":"LineString","coordinates":[[5.428905,52.173399],[5.429581,52.173394]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873687,"speedInKilometersPerHour":100.0,"fromNodeId":3873686}},{"type":"Feature","id":3666232,"geometry":{"type":"LineString","coordinates":[[5.429581,52.173394],[5.430187,52.173389],[5.430257,52.173387]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873688,"speedInKilometersPerHour":100.0,"fromNodeId":3873687}},{"type":"Feature","id":3666235,"geometry":{"type":"LineString","coordinates":[[5.4316,52.173307],[5.431607,52.173306],[5.431988,52.173225],[5.432235,52.173164]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":3873691,"speedInKilometersPerHour":100.0,"fromNodeId":3873690}},{"type":"Feature","id":3666240,"geometry":{"type":"LineString","coordinates":[[5.425577,52.172924],[5.425919,52.173229],[5.425982,52.173288]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.058,"toNodeId":3873694,"speedInKilometersPerHour":100.0,"fromNodeId":596861}},{"type":"Feature","id":3666241,"geometry":{"type":"LineString","coordinates":[[5.425982,52.173288],[5.426368,52.173653],[5.426373,52.173657]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.058,"toNodeId":3873695,"speedInKilometersPerHour":100.0,"fromNodeId":3873694}},{"type":"Feature","id":3666236,"geometry":{"type":"LineString","coordinates":[[5.432235,52.173164],[5.432294,52.173149],[5.432825,52.172962]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.237,"toNodeId":596862,"speedInKilometersPerHour":100.0,"fromNodeId":3873691}},{"type":"Feature","id":3666244,"geometry":{"type":"LineString","coordinates":[[5.427197,52.174379],[5.427609,52.17474]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.058,"toNodeId":596864,"speedInKilometersPerHour":100.0,"fromNodeId":3873697}},{"type":"Feature","id":3666245,"geometry":{"type":"LineString","coordinates":[[5.432825,52.172962],[5.433299,52.172748]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.191,"toNodeId":3873698,"speedInKilometersPerHour":100.0,"fromNodeId":596862}},{"type":"Feature","id":3666242,"geometry":{"type":"LineString","coordinates":[[5.426373,52.173657],[5.426785,52.174018]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.058,"toNodeId":3873696,"speedInKilometersPerHour":100.0,"fromNodeId":3873695}},{"type":"Feature","id":3666243,"geometry":{"type":"LineString","coordinates":[[5.426785,52.174018],[5.427197,52.174379]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.058,"toNodeId":3873697,"speedInKilometersPerHour":100.0,"fromNodeId":3873696}},{"type":"Feature","id":3667013,"geometry":{"type":"LineString","coordinates":[[5.423609,52.17878],[5.423952,52.178426]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.877,"toNodeId":3874148,"speedInKilometersPerHour":100.0,"fromNodeId":597011}},{"type":"Feature","id":3667134,"geometry":{"type":"LineString","coordinates":[[5.427609,52.17474],[5.427911,52.175013]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":36.71,"toNodeId":3874250,"speedInKilometersPerHour":100.0,"fromNodeId":596864}},{"type":"Feature","id":3666943,"geometry":{"type":"LineString","coordinates":[[5.428893,52.176567],[5.42866,52.176369]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":27.238,"toNodeId":3874089,"speedInKilometersPerHour":100.0,"fromNodeId":596831}},{"type":"Feature","id":3666945,"geometry":{"type":"LineString","coordinates":[[5.427439,52.176617],[5.427327,52.176769],[5.42723,52.176865],[5.427172,52.176952],[5.427161,52.176984]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874090,"speedInKilometersPerHour":100.0,"fromNodeId":596833}},{"type":"Feature","id":3666946,"geometry":{"type":"LineString","coordinates":[[5.427161,52.176984],[5.427141,52.17704],[5.427121,52.177132],[5.427129,52.177223],[5.42715,52.177307],[5.427181,52.177376],[5.427187,52.177384]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874091,"speedInKilometersPerHour":100.0,"fromNodeId":3874090}},{"type":"Feature","id":3666950,"geometry":{"type":"LineString","coordinates":[[5.428841,52.177664],[5.428947,52.177605],[5.429062,52.177505],[5.429166,52.177399],[5.429198,52.17733]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874095,"speedInKilometersPerHour":100.0,"fromNodeId":3874094}},{"type":"Feature","id":3666947,"geometry":{"type":"LineString","coordinates":[[5.427187,52.177384],[5.427232,52.177437],[5.427304,52.177521],[5.427391,52.177582],[5.427467,52.177624],[5.427556,52.17767],[5.427604,52.177691]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874092,"speedInKilometersPerHour":100.0,"fromNodeId":3874091}},{"type":"Feature","id":3666948,"geometry":{"type":"LineString","coordinates":[[5.427604,52.177691],[5.427657,52.177715],[5.427782,52.177753],[5.428007,52.177795],[5.428181,52.177799],[5.428227,52.177798]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874093,"speedInKilometersPerHour":100.0,"fromNodeId":3874092}},{"type":"Feature","id":3666953,"geometry":{"type":"LineString","coordinates":[[5.428427,52.17617],[5.428091,52.175875]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.098,"toNodeId":3874097,"speedInKilometersPerHour":100.0,"fromNodeId":597005}},{"type":"Feature","id":3666949,"geometry":{"type":"LineString","coordinates":[[5.428227,52.177798],[5.428348,52.177795],[5.428487,52.177773],[5.428694,52.177719],[5.428826,52.177673],[5.428841,52.177664]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874094,"speedInKilometersPerHour":100.0,"fromNodeId":3874093}},{"type":"Feature","id":3666951,"geometry":{"type":"LineString","coordinates":[[5.429198,52.17733],[5.429225,52.177269],[5.42924,52.177147],[5.429227,52.177032],[5.429199,52.176933],[5.429195,52.176928]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":3874096,"speedInKilometersPerHour":100.0,"fromNodeId":3874095}},{"type":"Feature","id":3666956,"geometry":{"type":"LineString","coordinates":[[5.428755,52.175753],[5.428317,52.176041]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.907,"toNodeId":3874099,"speedInKilometersPerHour":100.0,"fromNodeId":3874098}},{"type":"Feature","id":3666952,"geometry":{"type":"LineString","coordinates":[[5.429195,52.176928],[5.429106,52.1768],[5.428893,52.176567]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.233,"toNodeId":596831,"speedInKilometersPerHour":100.0,"fromNodeId":3874096}},{"type":"Feature","id":3666954,"geometry":{"type":"LineString","coordinates":[[5.428091,52.175875],[5.427756,52.175579]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.098,"toNodeId":596838,"speedInKilometersPerHour":100.0,"fromNodeId":3874097}},{"type":"Feature","id":3666959,"geometry":{"type":"LineString","coordinates":[[5.429265,52.176201],[5.429654,52.176545]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":3874101,"speedInKilometersPerHour":100.0,"fromNodeId":597007}},{"type":"Feature","id":3666955,"geometry":{"type":"LineString","coordinates":[[5.429194,52.175465],[5.428755,52.175753]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.907,"toNodeId":3874098,"speedInKilometersPerHour":100.0,"fromNodeId":597006}},{"type":"Feature","id":3666957,"geometry":{"type":"LineString","coordinates":[[5.428317,52.176041],[5.427878,52.176329]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.907,"toNodeId":3874100,"speedInKilometersPerHour":100.0,"fromNodeId":3874099}},{"type":"Feature","id":3666962,"geometry":{"type":"LineString","coordinates":[[5.430433,52.177232],[5.430824,52.177575]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":3874104,"speedInKilometersPerHour":100.0,"fromNodeId":3874103}},{"type":"Feature","id":3666958,"geometry":{"type":"LineString","coordinates":[[5.427878,52.176329],[5.427439,52.176617]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.907,"toNodeId":596833,"speedInKilometersPerHour":100.0,"fromNodeId":3874100}},{"type":"Feature","id":3666960,"geometry":{"type":"LineString","coordinates":[[5.429654,52.176545],[5.430043,52.176889]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":3874102,"speedInKilometersPerHour":100.0,"fromNodeId":3874101}},{"type":"Feature","id":3666961,"geometry":{"type":"LineString","coordinates":[[5.430043,52.176889],[5.430279,52.177097],[5.430433,52.177232]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":3874103,"speedInKilometersPerHour":100.0,"fromNodeId":3874102}},{"type":"Feature","id":3666966,"geometry":{"type":"LineString","coordinates":[[5.429265,52.176201],[5.429613,52.176346],[5.429734,52.176395],[5.429861,52.176427]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874107,"speedInKilometersPerHour":100.0,"fromNodeId":597007}},{"type":"Feature","id":3666967,"geometry":{"type":"LineString","coordinates":[[5.429861,52.176427],[5.4299,52.176437],[5.430044,52.176464],[5.430235,52.176476],[5.430438,52.176464],[5.430548,52.176444]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874108,"speedInKilometersPerHour":100.0,"fromNodeId":3874107}},{"type":"Feature","id":3666963,"geometry":{"type":"LineString","coordinates":[[5.430824,52.177575],[5.431216,52.177918]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":3874105,"speedInKilometersPerHour":100.0,"fromNodeId":3874104}},{"type":"Feature","id":3666964,"geometry":{"type":"LineString","coordinates":[[5.431216,52.177918],[5.431607,52.178261]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":3874106,"speedInKilometersPerHour":100.0,"fromNodeId":3874105}},{"type":"Feature","id":3666970,"geometry":{"type":"LineString","coordinates":[[5.431298,52.175788],[5.431298,52.175716],[5.431243,52.175579],[5.431151,52.175453],[5.431058,52.175395]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874111,"speedInKilometersPerHour":100.0,"fromNodeId":3874110}},{"type":"Feature","id":3666971,"geometry":{"type":"LineString","coordinates":[[5.431058,52.175395],[5.430968,52.175339],[5.430759,52.175243],[5.430482,52.175175],[5.430466,52.175174]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874112,"speedInKilometersPerHour":100.0,"fromNodeId":3874111}},{"type":"Feature","id":3666972,"geometry":{"type":"LineString","coordinates":[[5.430466,52.175174],[5.430201,52.175163],[5.429923,52.17519],[5.42978,52.175228]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874113,"speedInKilometersPerHour":100.0,"fromNodeId":3874112}},{"type":"Feature","id":3666965,"geometry":{"type":"LineString","coordinates":[[5.431607,52.178261],[5.431998,52.178604]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.609,"toNodeId":597008,"speedInKilometersPerHour":100.0,"fromNodeId":3874106}},{"type":"Feature","id":3666968,"geometry":{"type":"LineString","coordinates":[[5.430548,52.176444],[5.430564,52.176441],[5.430718,52.176399],[5.430852,52.17635],[5.430956,52.176308],[5.431067,52.176231],[5.431104,52.176194]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874109,"speedInKilometersPerHour":100.0,"fromNodeId":3874108}},{"type":"Feature","id":3666975,"geometry":{"type":"LineString","coordinates":[[5.433133,52.173317],[5.43269,52.173648]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874114,"speedInKilometersPerHour":100.0,"fromNodeId":596870}},{"type":"Feature","id":3666976,"geometry":{"type":"LineString","coordinates":[[5.43269,52.173648],[5.432576,52.173733],[5.432343,52.173916],[5.432279,52.173993]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874115,"speedInKilometersPerHour":100.0,"fromNodeId":3874114}},{"type":"Feature","id":3666977,"geometry":{"type":"LineString","coordinates":[[5.432279,52.173993],[5.432025,52.174301],[5.431992,52.174382]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874116,"speedInKilometersPerHour":100.0,"fromNodeId":3874115}},{"type":"Feature","id":3666969,"geometry":{"type":"LineString","coordinates":[[5.431104,52.176194],[5.431154,52.176144],[5.431248,52.176025],[5.431298,52.175888],[5.431298,52.175788]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":3874110,"speedInKilometersPerHour":100.0,"fromNodeId":3874109}},{"type":"Feature","id":3666973,"geometry":{"type":"LineString","coordinates":[[5.42978,52.175228],[5.429733,52.17524],[5.429437,52.175358],[5.429194,52.175465]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.088,"toNodeId":597006,"speedInKilometersPerHour":100.0,"fromNodeId":3874113}},{"type":"Feature","id":3666980,"geometry":{"type":"LineString","coordinates":[[5.431755,52.175225],[5.431699,52.175468],[5.431674,52.175651]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874119,"speedInKilometersPerHour":100.0,"fromNodeId":3874118}},{"type":"Feature","id":3666981,"geometry":{"type":"LineString","coordinates":[[5.431674,52.175651],[5.431614,52.176078]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874120,"speedInKilometersPerHour":100.0,"fromNodeId":3874119}},{"type":"Feature","id":3666974,"geometry":{"type":"LineString","coordinates":[[5.428897,52.175877],[5.429265,52.176201]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":43.971,"toNodeId":597007,"speedInKilometersPerHour":100.0,"fromNodeId":597009}},{"type":"Feature","id":3666978,"geometry":{"type":"LineString","coordinates":[[5.431992,52.174382],[5.431855,52.174713],[5.431839,52.174799]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874117,"speedInKilometersPerHour":100.0,"fromNodeId":3874116}},{"type":"Feature","id":3666979,"geometry":{"type":"LineString","coordinates":[[5.431839,52.174799],[5.431774,52.17514],[5.431755,52.175225]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874118,"speedInKilometersPerHour":100.0,"fromNodeId":3874117}},{"type":"Feature","id":3666985,"geometry":{"type":"LineString","coordinates":[[5.431527,52.177362],[5.431572,52.177769],[5.431579,52.17779]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874124,"speedInKilometersPerHour":100.0,"fromNodeId":3874123}},{"type":"Feature","id":3666982,"geometry":{"type":"LineString","coordinates":[[5.431614,52.176078],[5.431576,52.17635],[5.431564,52.176505]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874121,"speedInKilometersPerHour":100.0,"fromNodeId":3874120}},{"type":"Feature","id":3666983,"geometry":{"type":"LineString","coordinates":[[5.431564,52.176505],[5.431532,52.176934]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874122,"speedInKilometersPerHour":100.0,"fromNodeId":3874121}},{"type":"Feature","id":3666988,"geometry":{"type":"LineString","coordinates":[[5.431998,52.178604],[5.432367,52.178929]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.067,"toNodeId":3874126,"speedInKilometersPerHour":100.0,"fromNodeId":597008}},{"type":"Feature","id":3666989,"geometry":{"type":"LineString","coordinates":[[5.432367,52.178929],[5.432737,52.179253]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.067,"toNodeId":3874127,"speedInKilometersPerHour":100.0,"fromNodeId":3874126}},{"type":"Feature","id":3666984,"geometry":{"type":"LineString","coordinates":[[5.431532,52.176934],[5.431525,52.177029],[5.431526,52.177353],[5.431527,52.177362]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874123,"speedInKilometersPerHour":100.0,"fromNodeId":3874122}},{"type":"Feature","id":3666986,"geometry":{"type":"LineString","coordinates":[[5.431579,52.17779],[5.431678,52.178078],[5.431741,52.178206]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":3874125,"speedInKilometersPerHour":100.0,"fromNodeId":3874124}},{"type":"Feature","id":3666987,"geometry":{"type":"LineString","coordinates":[[5.431741,52.178206],[5.431812,52.178352],[5.431998,52.178604]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.707,"toNodeId":597008,"speedInKilometersPerHour":100.0,"fromNodeId":3874125}},{"type":"Feature","id":3666990,"geometry":{"type":"LineString","coordinates":[[5.432737,52.179253],[5.43284,52.179344],[5.433105,52.179578]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.067,"toNodeId":3874128,"speedInKilometersPerHour":100.0,"fromNodeId":3874127}},{"type":"Feature","id":3666991,"geometry":{"type":"LineString","coordinates":[[5.433105,52.179578],[5.433461,52.179893],[5.433472,52.179903]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.067,"toNodeId":3874129,"speedInKilometersPerHour":100.0,"fromNodeId":3874128}},{"type":"Feature","id":3666997,"geometry":{"type":"LineString","coordinates":[[5.43262,52.173571],[5.432107,52.173825]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874134,"speedInKilometersPerHour":100.0,"fromNodeId":3874133}},{"type":"Feature","id":3667000,"geometry":{"type":"LineString","coordinates":[[5.431105,52.174351],[5.43086,52.17448],[5.430611,52.174619]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874137,"speedInKilometersPerHour":100.0,"fromNodeId":3874136}},{"type":"Feature","id":3666996,"geometry":{"type":"LineString","coordinates":[[5.433133,52.173317],[5.43262,52.173571]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874133,"speedInKilometersPerHour":100.0,"fromNodeId":596870}},{"type":"Feature","id":3666998,"geometry":{"type":"LineString","coordinates":[[5.432107,52.173825],[5.431993,52.173882],[5.431605,52.174087]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874135,"speedInKilometersPerHour":100.0,"fromNodeId":3874134}},{"type":"Feature","id":3666999,"geometry":{"type":"LineString","coordinates":[[5.431605,52.174087],[5.431105,52.174351]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874136,"speedInKilometersPerHour":100.0,"fromNodeId":3874135}},{"type":"Feature","id":3667001,"geometry":{"type":"LineString","coordinates":[[5.430611,52.174619],[5.430122,52.17489]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874138,"speedInKilometersPerHour":100.0,"fromNodeId":3874137}},{"type":"Feature","id":3667005,"geometry":{"type":"LineString","coordinates":[[5.424063,52.178474],[5.424496,52.178156]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874141,"speedInKilometersPerHour":100.0,"fromNodeId":3874140}},{"type":"Feature","id":3667006,"geometry":{"type":"LineString","coordinates":[[5.424496,52.178156],[5.424671,52.178028],[5.424924,52.177836]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874142,"speedInKilometersPerHour":100.0,"fromNodeId":3874141}},{"type":"Feature","id":3667002,"geometry":{"type":"LineString","coordinates":[[5.430122,52.17489],[5.42998,52.174969],[5.429654,52.175175]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":3874139,"speedInKilometersPerHour":100.0,"fromNodeId":3874138}},{"type":"Feature","id":3667003,"geometry":{"type":"LineString","coordinates":[[5.429654,52.175175],[5.429194,52.175465]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.066,"toNodeId":597006,"speedInKilometersPerHour":100.0,"fromNodeId":3874139}},{"type":"Feature","id":3667009,"geometry":{"type":"LineString","coordinates":[[5.42578,52.177195],[5.426212,52.176877]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874145,"speedInKilometersPerHour":100.0,"fromNodeId":3874144}},{"type":"Feature","id":3667010,"geometry":{"type":"LineString","coordinates":[[5.426212,52.176877],[5.426514,52.176655],[5.426648,52.176562]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874146,"speedInKilometersPerHour":100.0,"fromNodeId":3874145}},{"type":"Feature","id":3667004,"geometry":{"type":"LineString","coordinates":[[5.423609,52.17878],[5.423953,52.178555],[5.424063,52.178474]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874140,"speedInKilometersPerHour":100.0,"fromNodeId":597011}},{"type":"Feature","id":3667007,"geometry":{"type":"LineString","coordinates":[[5.424924,52.177836],[5.425349,52.177514]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874143,"speedInKilometersPerHour":100.0,"fromNodeId":3874142}},{"type":"Feature","id":3667008,"geometry":{"type":"LineString","coordinates":[[5.425349,52.177514],[5.425446,52.177441],[5.42578,52.177195]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874144,"speedInKilometersPerHour":100.0,"fromNodeId":3874143}},{"type":"Feature","id":3667014,"geometry":{"type":"LineString","coordinates":[[5.423952,52.178426],[5.42422,52.17815],[5.424268,52.178064]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.877,"toNodeId":3874149,"speedInKilometersPerHour":100.0,"fromNodeId":3874148}},{"type":"Feature","id":3667011,"geometry":{"type":"LineString","coordinates":[[5.426648,52.176562],[5.427095,52.176251]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":3874147,"speedInKilometersPerHour":100.0,"fromNodeId":3874146}},{"type":"Feature","id":3667012,"geometry":{"type":"LineString","coordinates":[[5.427095,52.176251],[5.427542,52.175941]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.115,"toNodeId":596837,"speedInKilometersPerHour":100.0,"fromNodeId":3874147}},{"type":"Feature","id":3667015,"geometry":{"type":"LineString","coordinates":[[5.424268,52.178064],[5.42441,52.177811],[5.424465,52.17767]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.877,"toNodeId":3874150,"speedInKilometersPerHour":100.0,"fromNodeId":3874149}},{"type":"Feature","id":3667020,"geometry":{"type":"LineString","coordinates":[[5.421906,52.179994],[5.422327,52.179688]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.597,"toNodeId":3874154,"speedInKilometersPerHour":100.0,"fromNodeId":3874153}},{"type":"Feature","id":3667021,"geometry":{"type":"LineString","coordinates":[[5.422327,52.179688],[5.422725,52.179398],[5.422748,52.179382]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.597,"toNodeId":3874155,"speedInKilometersPerHour":100.0,"fromNodeId":3874154}},{"type":"Feature","id":3667016,"geometry":{"type":"LineString","coordinates":[[5.424465,52.17767],[5.42462,52.177269]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.877,"toNodeId":597012,"speedInKilometersPerHour":100.0,"fromNodeId":3874150}},{"type":"Feature","id":3667024,"geometry":{"type":"LineString","coordinates":[[5.427542,52.175941],[5.427981,52.175668]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.732,"toNodeId":3874157,"speedInKilometersPerHour":100.0,"fromNodeId":596837}},{"type":"Feature","id":3667025,"geometry":{"type":"LineString","coordinates":[[5.427981,52.175668],[5.428419,52.175394]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.732,"toNodeId":3874158,"speedInKilometersPerHour":100.0,"fromNodeId":3874157}},{"type":"Feature","id":3667027,"geometry":{"type":"LineString","coordinates":[[5.428858,52.175121],[5.429296,52.174847]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.732,"toNodeId":597014,"speedInKilometersPerHour":100.0,"fromNodeId":3874159}},{"type":"Feature","id":3667022,"geometry":{"type":"LineString","coordinates":[[5.422748,52.179382],[5.423178,52.179081]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.597,"toNodeId":3874156,"speedInKilometersPerHour":100.0,"fromNodeId":3874155}},{"type":"Feature","id":3667023,"geometry":{"type":"LineString","coordinates":[[5.423178,52.179081],[5.423609,52.17878]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.597,"toNodeId":597011,"speedInKilometersPerHour":100.0,"fromNodeId":3874156}},{"type":"Feature","id":3667034,"geometry":{"type":"LineString","coordinates":[[5.421688,52.180337],[5.42216,52.179998]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874166,"speedInKilometersPerHour":120.0,"fromNodeId":3874165}},{"type":"Feature","id":3667035,"geometry":{"type":"LineString","coordinates":[[5.42216,52.179998],[5.422633,52.17966]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874167,"speedInKilometersPerHour":120.0,"fromNodeId":3874166}},{"type":"Feature","id":3667036,"geometry":{"type":"LineString","coordinates":[[5.422633,52.17966],[5.423105,52.179322]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874168,"speedInKilometersPerHour":120.0,"fromNodeId":3874167}},{"type":"Feature","id":3667037,"geometry":{"type":"LineString","coordinates":[[5.423105,52.179322],[5.423266,52.179207],[5.423577,52.178984]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874169,"speedInKilometersPerHour":120.0,"fromNodeId":3874168}},{"type":"Feature","id":3667038,"geometry":{"type":"LineString","coordinates":[[5.423577,52.178984],[5.424049,52.178645]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874170,"speedInKilometersPerHour":120.0,"fromNodeId":3874169}},{"type":"Feature","id":3667026,"geometry":{"type":"LineString","coordinates":[[5.428419,52.175394],[5.428858,52.175121]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":42.732,"toNodeId":3874159,"speedInKilometersPerHour":100.0,"fromNodeId":3874158}},{"type":"Feature","id":3667041,"geometry":{"type":"LineString","coordinates":[[5.424993,52.177968],[5.425465,52.17763]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874173,"speedInKilometersPerHour":120.0,"fromNodeId":3874172}},{"type":"Feature","id":3667039,"geometry":{"type":"LineString","coordinates":[[5.424049,52.178645],[5.424521,52.178307]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874171,"speedInKilometersPerHour":120.0,"fromNodeId":3874170}},{"type":"Feature","id":3667044,"geometry":{"type":"LineString","coordinates":[[5.426408,52.176953],[5.426759,52.176701],[5.426884,52.176616]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874176,"speedInKilometersPerHour":120.0,"fromNodeId":3874175}},{"type":"Feature","id":3667045,"geometry":{"type":"LineString","coordinates":[[5.426884,52.176616],[5.427371,52.176286]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874177,"speedInKilometersPerHour":120.0,"fromNodeId":3874176}},{"type":"Feature","id":3667046,"geometry":{"type":"LineString","coordinates":[[5.427371,52.176286],[5.42784,52.175968],[5.427859,52.175956]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874178,"speedInKilometersPerHour":120.0,"fromNodeId":3874177}},{"type":"Feature","id":3667040,"geometry":{"type":"LineString","coordinates":[[5.424521,52.178307],[5.424993,52.177968]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874172,"speedInKilometersPerHour":120.0,"fromNodeId":3874171}},{"type":"Feature","id":3667042,"geometry":{"type":"LineString","coordinates":[[5.425465,52.17763],[5.425936,52.177291]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874174,"speedInKilometersPerHour":120.0,"fromNodeId":3874173}},{"type":"Feature","id":3667049,"geometry":{"type":"LineString","coordinates":[[5.428867,52.175315],[5.429382,52.175002]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874181,"speedInKilometersPerHour":120.0,"fromNodeId":3874180}},{"type":"Feature","id":3667043,"geometry":{"type":"LineString","coordinates":[[5.425936,52.177291],[5.426408,52.176953]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874175,"speedInKilometersPerHour":120.0,"fromNodeId":3874174}},{"type":"Feature","id":3667051,"geometry":{"type":"LineString","coordinates":[[5.429909,52.174696],[5.430446,52.174396]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874183,"speedInKilometersPerHour":120.0,"fromNodeId":3874182}},{"type":"Feature","id":3667047,"geometry":{"type":"LineString","coordinates":[[5.427859,52.175956],[5.428362,52.175635]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874179,"speedInKilometersPerHour":120.0,"fromNodeId":3874178}},{"type":"Feature","id":3667048,"geometry":{"type":"LineString","coordinates":[[5.428362,52.175635],[5.42879,52.175362],[5.428867,52.175315]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874180,"speedInKilometersPerHour":120.0,"fromNodeId":3874179}},{"type":"Feature","id":3667054,"geometry":{"type":"LineString","coordinates":[[5.431528,52.173803],[5.432072,52.173508]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":597016,"speedInKilometersPerHour":120.0,"fromNodeId":3874185}},{"type":"Feature","id":3667050,"geometry":{"type":"LineString","coordinates":[[5.429382,52.175002],[5.429625,52.174854],[5.429909,52.174696]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874182,"speedInKilometersPerHour":120.0,"fromNodeId":3874181}},{"type":"Feature","id":3667052,"geometry":{"type":"LineString","coordinates":[[5.430446,52.174396],[5.430895,52.174145],[5.430984,52.174097]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874184,"speedInKilometersPerHour":120.0,"fromNodeId":3874183}},{"type":"Feature","id":3667053,"geometry":{"type":"LineString","coordinates":[[5.430984,52.174097],[5.431528,52.173803]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.601,"toNodeId":3874185,"speedInKilometersPerHour":120.0,"fromNodeId":3874184}},{"type":"Feature","id":3667060,"geometry":{"type":"LineString","coordinates":[[5.432072,52.173508],[5.432588,52.173256]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.102,"toNodeId":3874189,"speedInKilometersPerHour":120.0,"fromNodeId":597016}},{"type":"Feature","id":3667061,"geometry":{"type":"LineString","coordinates":[[5.432588,52.173256],[5.432932,52.173088],[5.433107,52.173006]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.102,"toNodeId":3874190,"speedInKilometersPerHour":120.0,"fromNodeId":3874189}},{"type":"Feature","id":3667062,"geometry":{"type":"LineString","coordinates":[[5.433107,52.173006],[5.433631,52.17276]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.102,"toNodeId":3874191,"speedInKilometersPerHour":120.0,"fromNodeId":3874190}},{"type":"Feature","id":3667067,"geometry":{"type":"LineString","coordinates":[[5.431265,52.173805],[5.431642,52.173628]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":32.463,"toNodeId":3874195,"speedInKilometersPerHour":100.0,"fromNodeId":597020}},{"type":"Feature","id":3667071,"geometry":{"type":"LineString","coordinates":[[5.429147,52.176331],[5.429554,52.176691]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874197,"speedInKilometersPerHour":100.0,"fromNodeId":3874196}},{"type":"Feature","id":3667068,"geometry":{"type":"LineString","coordinates":[[5.431642,52.173628],[5.431703,52.173599],[5.432072,52.173508]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":32.463,"toNodeId":597016,"speedInKilometersPerHour":100.0,"fromNodeId":3874195}},{"type":"Feature","id":3667070,"geometry":{"type":"LineString","coordinates":[[5.42874,52.175972],[5.429147,52.176331]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874196,"speedInKilometersPerHour":100.0,"fromNodeId":596859}},{"type":"Feature","id":3667075,"geometry":{"type":"LineString","coordinates":[[5.430781,52.177766],[5.431193,52.178124]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874201,"speedInKilometersPerHour":100.0,"fromNodeId":3874200}},{"type":"Feature","id":3667076,"geometry":{"type":"LineString","coordinates":[[5.431193,52.178124],[5.431604,52.178481]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874202,"speedInKilometersPerHour":100.0,"fromNodeId":3874201}},{"type":"Feature","id":3667077,"geometry":{"type":"LineString","coordinates":[[5.431604,52.178481],[5.432016,52.178839]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874203,"speedInKilometersPerHour":100.0,"fromNodeId":3874202}},{"type":"Feature","id":3667072,"geometry":{"type":"LineString","coordinates":[[5.429554,52.176691],[5.429961,52.17705]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874198,"speedInKilometersPerHour":100.0,"fromNodeId":3874197}},{"type":"Feature","id":3667079,"geometry":{"type":"LineString","coordinates":[[5.432427,52.179196],[5.432838,52.179553]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874205,"speedInKilometersPerHour":100.0,"fromNodeId":3874204}},{"type":"Feature","id":3667073,"geometry":{"type":"LineString","coordinates":[[5.429961,52.17705],[5.430139,52.177208],[5.43037,52.177409]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874199,"speedInKilometersPerHour":100.0,"fromNodeId":3874198}},{"type":"Feature","id":3667078,"geometry":{"type":"LineString","coordinates":[[5.432016,52.178839],[5.432427,52.179196]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874204,"speedInKilometersPerHour":100.0,"fromNodeId":3874203}},{"type":"Feature","id":3667080,"geometry":{"type":"LineString","coordinates":[[5.432838,52.179553],[5.43325,52.179911]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874206,"speedInKilometersPerHour":100.0,"fromNodeId":3874205}},{"type":"Feature","id":3667074,"geometry":{"type":"LineString","coordinates":[[5.43037,52.177409],[5.430781,52.177766]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874200,"speedInKilometersPerHour":100.0,"fromNodeId":3874199}},{"type":"Feature","id":3667081,"geometry":{"type":"LineString","coordinates":[[5.43325,52.179911],[5.433661,52.180268]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.725,"toNodeId":3874207,"speedInKilometersPerHour":100.0,"fromNodeId":3874206}},{"type":"Feature","id":3667121,"geometry":{"type":"LineString","coordinates":[[5.429482,52.174024],[5.429452,52.173988],[5.429347,52.173901],[5.429214,52.173817],[5.429055,52.173752],[5.42898,52.173731]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":3874240,"speedInKilometersPerHour":100.0,"fromNodeId":3874239}},{"type":"Feature","id":3667119,"geometry":{"type":"LineString","coordinates":[[5.429296,52.174847],[5.429416,52.174686],[5.429527,52.174538],[5.429559,52.174446]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":3874238,"speedInKilometersPerHour":100.0,"fromNodeId":597014}},{"type":"Feature","id":3667124,"geometry":{"type":"LineString","coordinates":[[5.42771,52.173918],[5.427675,52.173943],[5.427555,52.174061],[5.427491,52.174183],[5.427475,52.174274],[5.427475,52.174316]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":3874243,"speedInKilometersPerHour":100.0,"fromNodeId":3874242}},{"type":"Feature","id":3667125,"geometry":{"type":"LineString","coordinates":[[5.427475,52.174316],[5.427474,52.17437],[5.427494,52.174442],[5.427509,52.174507],[5.427609,52.17474]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":596864,"speedInKilometersPerHour":100.0,"fromNodeId":3874243}},{"type":"Feature","id":3667120,"geometry":{"type":"LineString","coordinates":[[5.429559,52.174446],[5.429575,52.1744],[5.429591,52.174274],[5.42958,52.174206],[5.42955,52.174141],[5.429506,52.174053],[5.429482,52.174024]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":3874239,"speedInKilometersPerHour":100.0,"fromNodeId":3874238}},{"type":"Feature","id":3667122,"geometry":{"type":"LineString","coordinates":[[5.42898,52.173731],[5.428873,52.173702],[5.428669,52.173676],[5.428507,52.173672],[5.428346,52.173679],[5.428292,52.173688]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":3874241,"speedInKilometersPerHour":100.0,"fromNodeId":3874240}},{"type":"Feature","id":3667128,"geometry":{"type":"LineString","coordinates":[[5.430281,52.174327],[5.430482,52.174225],[5.430775,52.174068]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.443,"toNodeId":3874246,"speedInKilometersPerHour":100.0,"fromNodeId":3874245}},{"type":"Feature","id":3667129,"geometry":{"type":"LineString","coordinates":[[5.430775,52.174068],[5.431265,52.173805]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.443,"toNodeId":597020,"speedInKilometersPerHour":100.0,"fromNodeId":3874246}},{"type":"Feature","id":3667130,"geometry":{"type":"LineString","coordinates":[[5.430015,52.17728],[5.429664,52.176974]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.673,"toNodeId":3874247,"speedInKilometersPerHour":100.0,"fromNodeId":597029}},{"type":"Feature","id":3667131,"geometry":{"type":"LineString","coordinates":[[5.429664,52.176974],[5.429312,52.176668]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.673,"toNodeId":3874248,"speedInKilometersPerHour":100.0,"fromNodeId":3874247}},{"type":"Feature","id":3667123,"geometry":{"type":"LineString","coordinates":[[5.428292,52.173688],[5.42819,52.173706],[5.428039,52.17374],[5.427924,52.173794],[5.427783,52.173866],[5.42771,52.173918]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.283,"toNodeId":3874242,"speedInKilometersPerHour":100.0,"fromNodeId":3874241}},{"type":"Feature","id":3667126,"geometry":{"type":"LineString","coordinates":[[5.429296,52.174847],[5.429658,52.174641],[5.429779,52.17458]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.443,"toNodeId":3874244,"speedInKilometersPerHour":100.0,"fromNodeId":597014}},{"type":"Feature","id":3667135,"geometry":{"type":"LineString","coordinates":[[5.427911,52.175013],[5.428214,52.175285]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":36.71,"toNodeId":597030,"speedInKilometersPerHour":100.0,"fromNodeId":3874250}},{"type":"Feature","id":3667136,"geometry":{"type":"LineString","coordinates":[[5.428214,52.175285],[5.428555,52.175581]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.38,"toNodeId":3874251,"speedInKilometersPerHour":100.0,"fromNodeId":597030}},{"type":"Feature","id":3667137,"geometry":{"type":"LineString","coordinates":[[5.428555,52.175581],[5.428897,52.175877]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":40.38,"toNodeId":597009,"speedInKilometersPerHour":100.0,"fromNodeId":3874251}},{"type":"Feature","id":3667127,"geometry":{"type":"LineString","coordinates":[[5.429779,52.17458],[5.430281,52.174327]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.443,"toNodeId":3874245,"speedInKilometersPerHour":100.0,"fromNodeId":3874244}},{"type":"Feature","id":3667132,"geometry":{"type":"LineString","coordinates":[[5.429312,52.176668],[5.428961,52.176362]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.673,"toNodeId":3874249,"speedInKilometersPerHour":100.0,"fromNodeId":3874248}},{"type":"Feature","id":3667133,"geometry":{"type":"LineString","coordinates":[[5.428961,52.176362],[5.42861,52.176056]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.673,"toNodeId":596855,"speedInKilometersPerHour":100.0,"fromNodeId":3874249}},{"type":"Feature","id":3669263,"geometry":{"type":"LineString","coordinates":[[5.433525,52.172981],[5.433012,52.173222],[5.43295,52.173251]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875466,"speedInKilometersPerHour":120.0,"fromNodeId":3875465}},{"type":"Feature","id":3669264,"geometry":{"type":"LineString","coordinates":[[5.43295,52.173251],[5.432378,52.173524]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875467,"speedInKilometersPerHour":120.0,"fromNodeId":3875466}},{"type":"Feature","id":3669265,"geometry":{"type":"LineString","coordinates":[[5.432378,52.173524],[5.431947,52.173729],[5.431813,52.173802]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875468,"speedInKilometersPerHour":120.0,"fromNodeId":3875467}},{"type":"Feature","id":3669266,"geometry":{"type":"LineString","coordinates":[[5.431813,52.173802],[5.43127,52.174096]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875469,"speedInKilometersPerHour":120.0,"fromNodeId":3875468}},{"type":"Feature","id":3669267,"geometry":{"type":"LineString","coordinates":[[5.43127,52.174096],[5.430961,52.174263],[5.43073,52.174391]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875470,"speedInKilometersPerHour":120.0,"fromNodeId":3875469}},{"type":"Feature","id":3669268,"geometry":{"type":"LineString","coordinates":[[5.43073,52.174391],[5.430192,52.174689]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875471,"speedInKilometersPerHour":120.0,"fromNodeId":3875470}},{"type":"Feature","id":3669269,"geometry":{"type":"LineString","coordinates":[[5.430192,52.174689],[5.429709,52.174957],[5.429657,52.174988]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875472,"speedInKilometersPerHour":120.0,"fromNodeId":3875471}},{"type":"Feature","id":3669270,"geometry":{"type":"LineString","coordinates":[[5.429657,52.174988],[5.429139,52.175299]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875473,"speedInKilometersPerHour":120.0,"fromNodeId":3875472}},{"type":"Feature","id":3669271,"geometry":{"type":"LineString","coordinates":[[5.429139,52.175299],[5.42885,52.175472],[5.428626,52.175613]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875474,"speedInKilometersPerHour":120.0,"fromNodeId":3875473}},{"type":"Feature","id":3669272,"geometry":{"type":"LineString","coordinates":[[5.428626,52.175613],[5.428121,52.175932]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875475,"speedInKilometersPerHour":120.0,"fromNodeId":3875474}},{"type":"Feature","id":3669273,"geometry":{"type":"LineString","coordinates":[[5.428121,52.175932],[5.427924,52.176056],[5.427628,52.176257]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875476,"speedInKilometersPerHour":120.0,"fromNodeId":3875475}},{"type":"Feature","id":3669274,"geometry":{"type":"LineString","coordinates":[[5.427628,52.176257],[5.427143,52.176587]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875477,"speedInKilometersPerHour":120.0,"fromNodeId":3875476}},{"type":"Feature","id":3669275,"geometry":{"type":"LineString","coordinates":[[5.427143,52.176587],[5.426919,52.176739],[5.426665,52.176921]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875478,"speedInKilometersPerHour":120.0,"fromNodeId":3875477}},{"type":"Feature","id":3669276,"geometry":{"type":"LineString","coordinates":[[5.426665,52.176921],[5.426194,52.177259]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875479,"speedInKilometersPerHour":120.0,"fromNodeId":3875478}},{"type":"Feature","id":3669277,"geometry":{"type":"LineString","coordinates":[[5.426194,52.177259],[5.425723,52.177597]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875480,"speedInKilometersPerHour":120.0,"fromNodeId":3875479}},{"type":"Feature","id":3669278,"geometry":{"type":"LineString","coordinates":[[5.425723,52.177597],[5.425252,52.177934]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875481,"speedInKilometersPerHour":120.0,"fromNodeId":3875480}},{"type":"Feature","id":3669279,"geometry":{"type":"LineString","coordinates":[[5.425252,52.177934],[5.424781,52.178272]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875482,"speedInKilometersPerHour":120.0,"fromNodeId":3875481}},{"type":"Feature","id":3669280,"geometry":{"type":"LineString","coordinates":[[5.424781,52.178272],[5.42431,52.17861]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875483,"speedInKilometersPerHour":120.0,"fromNodeId":3875482}},{"type":"Feature","id":3669281,"geometry":{"type":"LineString","coordinates":[[5.42431,52.17861],[5.423839,52.178948]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875484,"speedInKilometersPerHour":120.0,"fromNodeId":3875483}},{"type":"Feature","id":3669282,"geometry":{"type":"LineString","coordinates":[[5.423839,52.178948],[5.423381,52.179276],[5.423368,52.179285]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875485,"speedInKilometersPerHour":120.0,"fromNodeId":3875484}},{"type":"Feature","id":3669283,"geometry":{"type":"LineString","coordinates":[[5.423368,52.179285],[5.422898,52.179624]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875486,"speedInKilometersPerHour":120.0,"fromNodeId":3875485}},{"type":"Feature","id":3669284,"geometry":{"type":"LineString","coordinates":[[5.422898,52.179624],[5.422429,52.179962]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875487,"speedInKilometersPerHour":120.0,"fromNodeId":3875486}},{"type":"Feature","id":3669285,"geometry":{"type":"LineString","coordinates":[[5.422429,52.179962],[5.421959,52.180301]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":49.501,"toNodeId":3875488,"speedInKilometersPerHour":120.0,"fromNodeId":3875487}},{"type":"Feature","id":3675765,"geometry":{"type":"LineString","coordinates":[[5.42481,52.172878],[5.424593,52.1726],[5.424523,52.172503]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.103,"toNodeId":3878366,"speedInKilometersPerHour":100.0,"fromNodeId":599091}},{"type":"Feature","id":3675766,"geometry":{"type":"LineString","coordinates":[[5.424523,52.172503],[5.424343,52.172253],[5.424255,52.172123]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":46.103,"toNodeId":3878367,"speedInKilometersPerHour":100.0,"fromNodeId":3878366}},{"type":"Feature","id":3675773,"geometry":{"type":"LineString","coordinates":[[5.425323,52.173673],[5.425224,52.173466],[5.425101,52.173267]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.679,"toNodeId":3878373,"speedInKilometersPerHour":100.0,"fromNodeId":3878372}},{"type":"Feature","id":3675774,"geometry":{"type":"LineString","coordinates":[[5.425101,52.173267],[5.425051,52.173187],[5.42481,52.172878]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.679,"toNodeId":599091,"speedInKilometersPerHour":100.0,"fromNodeId":3878373}},{"type":"Feature","id":3675771,"geometry":{"type":"LineString","coordinates":[[5.425338,52.174526],[5.425378,52.174103],[5.425378,52.174098]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.679,"toNodeId":3878371,"speedInKilometersPerHour":100.0,"fromNodeId":599093}},{"type":"Feature","id":3675772,"geometry":{"type":"LineString","coordinates":[[5.425378,52.174098],[5.425385,52.173904],[5.425326,52.173679],[5.425323,52.173673]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.679,"toNodeId":3878372,"speedInKilometersPerHour":100.0,"fromNodeId":3878371}},{"type":"Feature","id":3684607,"geometry":{"type":"LineString","coordinates":[[5.42206,52.175152],[5.422059,52.175592]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.952,"toNodeId":3882053,"speedInKilometersPerHour":50.0,"fromNodeId":601546}},{"type":"Feature","id":3684608,"geometry":{"type":"LineString","coordinates":[[5.422059,52.175592],[5.422059,52.175766],[5.42206,52.176032]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.952,"toNodeId":3882054,"speedInKilometersPerHour":50.0,"fromNodeId":3882053}},{"type":"Feature","id":3684609,"geometry":{"type":"LineString","coordinates":[[5.42206,52.176032],[5.422062,52.176373],[5.422056,52.176472]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.952,"toNodeId":3882055,"speedInKilometersPerHour":50.0,"fromNodeId":3882054}},{"type":"Feature","id":3684614,"geometry":{"type":"LineString","coordinates":[[5.422056,52.176472],[5.422062,52.176373],[5.42206,52.176032]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.952,"toNodeId":3882059,"speedInKilometersPerHour":50.0,"fromNodeId":3882058}},{"type":"Feature","id":3684615,"geometry":{"type":"LineString","coordinates":[[5.42206,52.176032],[5.422059,52.175766],[5.422059,52.175592]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.952,"toNodeId":3882060,"speedInKilometersPerHour":50.0,"fromNodeId":3882059}},{"type":"Feature","id":3684616,"geometry":{"type":"LineString","coordinates":[[5.422059,52.175592],[5.42206,52.175152]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":48.952,"toNodeId":601546,"speedInKilometersPerHour":50.0,"fromNodeId":3882060}},{"type":"Feature","id":3684909,"geometry":{"type":"LineString","coordinates":[[5.421854,52.173817],[5.421967,52.173874],[5.422039,52.173943],[5.422042,52.174116]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":3882193,"speedInKilometersPerHour":50.0,"fromNodeId":601607}},{"type":"Feature","id":3684910,"geometry":{"type":"LineString","coordinates":[[5.422042,52.174116],[5.422045,52.174305],[5.422048,52.174462]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":3882194,"speedInKilometersPerHour":50.0,"fromNodeId":3882193}},{"type":"Feature","id":3684913,"geometry":{"type":"LineString","coordinates":[[5.42206,52.175152],[5.422054,52.174807]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":3882196,"speedInKilometersPerHour":50.0,"fromNodeId":601546}},{"type":"Feature","id":3684914,"geometry":{"type":"LineString","coordinates":[[5.422054,52.174807],[5.422048,52.174462]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":3882197,"speedInKilometersPerHour":50.0,"fromNodeId":3882196}},{"type":"Feature","id":3684915,"geometry":{"type":"LineString","coordinates":[[5.422048,52.174462],[5.422045,52.174305],[5.422042,52.174116]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":3882198,"speedInKilometersPerHour":50.0,"fromNodeId":3882197}},{"type":"Feature","id":3684916,"geometry":{"type":"LineString","coordinates":[[5.422042,52.174116],[5.422039,52.173943],[5.421967,52.173874],[5.421854,52.173817]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":601607,"speedInKilometersPerHour":50.0,"fromNodeId":3882198}},{"type":"Feature","id":3684921,"geometry":{"type":"LineString","coordinates":[[5.421867,52.173466],[5.421854,52.173817]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":39.066,"toNodeId":601607,"speedInKilometersPerHour":30.0,"fromNodeId":601609}},{"type":"Feature","id":3684922,"geometry":{"type":"LineString","coordinates":[[5.421854,52.173817],[5.421867,52.173466]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":39.066,"toNodeId":601609,"speedInKilometersPerHour":30.0,"fromNodeId":601607}},{"type":"Feature","id":3684911,"geometry":{"type":"LineString","coordinates":[[5.422048,52.174462],[5.422054,52.174807]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":3882195,"speedInKilometersPerHour":50.0,"fromNodeId":3882194}},{"type":"Feature","id":3684912,"geometry":{"type":"LineString","coordinates":[[5.422054,52.174807],[5.42206,52.175152]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.414,"toNodeId":601546,"speedInKilometersPerHour":50.0,"fromNodeId":3882195}},{"type":"Feature","id":3685165,"geometry":{"type":"LineString","coordinates":[[5.421873,52.172724],[5.42187,52.173095]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.26,"toNodeId":3882329,"speedInKilometersPerHour":30.0,"fromNodeId":3882328}},{"type":"Feature","id":3685166,"geometry":{"type":"LineString","coordinates":[[5.42187,52.173095],[5.421867,52.173466]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.26,"toNodeId":601609,"speedInKilometersPerHour":30.0,"fromNodeId":3882329}},{"type":"Feature","id":3685167,"geometry":{"type":"LineString","coordinates":[[5.421867,52.173466],[5.42187,52.173095]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.26,"toNodeId":3882330,"speedInKilometersPerHour":30.0,"fromNodeId":601609}},{"type":"Feature","id":3685168,"geometry":{"type":"LineString","coordinates":[[5.42187,52.173095],[5.421873,52.172724]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":41.26,"toNodeId":3882331,"speedInKilometersPerHour":30.0,"fromNodeId":3882330}},{"type":"Feature","id":3686220,"geometry":{"type":"LineString","coordinates":[[5.42462,52.177269],[5.424733,52.176878]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":3882838,"speedInKilometersPerHour":100.0,"fromNodeId":597012}},{"type":"Feature","id":3686221,"geometry":{"type":"LineString","coordinates":[[5.424733,52.176878],[5.424845,52.176487]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":3882839,"speedInKilometersPerHour":100.0,"fromNodeId":3882838}},{"type":"Feature","id":3686216,"geometry":{"type":"LineString","coordinates":[[5.42252,52.18013],[5.42204,52.180435]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.267,"toNodeId":3882835,"speedInKilometersPerHour":100.0,"fromNodeId":596834}},{"type":"Feature","id":3686224,"geometry":{"type":"LineString","coordinates":[[5.425031,52.175702],[5.425134,52.17531]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":3882842,"speedInKilometersPerHour":100.0,"fromNodeId":3882841}},{"type":"Feature","id":3686225,"geometry":{"type":"LineString","coordinates":[[5.425134,52.17531],[5.425236,52.174918]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":3882843,"speedInKilometersPerHour":100.0,"fromNodeId":3882842}},{"type":"Feature","id":3686226,"geometry":{"type":"LineString","coordinates":[[5.425236,52.174918],[5.425338,52.174526]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":599093,"speedInKilometersPerHour":100.0,"fromNodeId":3882843}},{"type":"Feature","id":3686217,"geometry":{"type":"LineString","coordinates":[[5.42204,52.180435],[5.42156,52.180741]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.267,"toNodeId":3882836,"speedInKilometersPerHour":100.0,"fromNodeId":3882835}},{"type":"Feature","id":3686222,"geometry":{"type":"LineString","coordinates":[[5.424845,52.176487],[5.42489,52.176331],[5.424929,52.176094]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":3882840,"speedInKilometersPerHour":100.0,"fromNodeId":3882839}},{"type":"Feature","id":3686223,"geometry":{"type":"LineString","coordinates":[[5.424929,52.176094],[5.42493,52.17609],[5.425031,52.175702]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.171,"toNodeId":3882841,"speedInKilometersPerHour":100.0,"fromNodeId":3882840}},{"type":"Feature","id":6369279,"geometry":{"type":"LineString","coordinates":[[5.423044,52.181034],[5.423499,52.180712]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442741,"speedInKilometersPerHour":50.0,"fromNodeId":5442740}},{"type":"Feature","id":6369280,"geometry":{"type":"LineString","coordinates":[[5.423499,52.180712],[5.423955,52.180391]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442742,"speedInKilometersPerHour":50.0,"fromNodeId":5442741}},{"type":"Feature","id":6369281,"geometry":{"type":"LineString","coordinates":[[5.423955,52.180391],[5.424184,52.180229],[5.424419,52.180107],[5.424449,52.180094]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442743,"speedInKilometersPerHour":50.0,"fromNodeId":5442742}},{"type":"Feature","id":6369282,"geometry":{"type":"LineString","coordinates":[[5.424449,52.180094],[5.424675,52.179996],[5.424941,52.179909],[5.42505,52.179885]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442744,"speedInKilometersPerHour":50.0,"fromNodeId":5442743}},{"type":"Feature","id":6369283,"geometry":{"type":"LineString","coordinates":[[5.42505,52.179885],[5.425237,52.179844],[5.42572,52.179779]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":1117050,"speedInKilometersPerHour":50.0,"fromNodeId":5442744}},{"type":"Feature","id":6369284,"geometry":{"type":"LineString","coordinates":[[5.42572,52.179779],[5.425237,52.179844],[5.42505,52.179885]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442745,"speedInKilometersPerHour":50.0,"fromNodeId":1117050}},{"type":"Feature","id":6369285,"geometry":{"type":"LineString","coordinates":[[5.42505,52.179885],[5.424941,52.179909],[5.424675,52.179996],[5.424449,52.180094]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442746,"speedInKilometersPerHour":50.0,"fromNodeId":5442745}},{"type":"Feature","id":6369286,"geometry":{"type":"LineString","coordinates":[[5.424449,52.180094],[5.424419,52.180107],[5.424184,52.180229],[5.423955,52.180391]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442747,"speedInKilometersPerHour":50.0,"fromNodeId":5442746}},{"type":"Feature","id":6369287,"geometry":{"type":"LineString","coordinates":[[5.423955,52.180391],[5.423499,52.180712]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442748,"speedInKilometersPerHour":50.0,"fromNodeId":5442747}},{"type":"Feature","id":6369288,"geometry":{"type":"LineString","coordinates":[[5.423499,52.180712],[5.423044,52.181034]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.43,"toNodeId":5442749,"speedInKilometersPerHour":50.0,"fromNodeId":5442748}},{"type":"Feature","id":6405115,"geometry":{"type":"LineString","coordinates":[[5.432927,52.180256],[5.432499,52.180435],[5.432473,52.180446]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":37.625,"toNodeId":5467882,"speedInKilometersPerHour":50.0,"fromNodeId":1121748}},{"type":"Feature","id":6405118,"geometry":{"type":"LineString","coordinates":[[5.431663,52.180894],[5.431594,52.180969],[5.431524,52.18108],[5.431477,52.18121]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":37.625,"toNodeId":1121749,"speedInKilometersPerHour":50.0,"fromNodeId":5467884}},{"type":"Feature","id":6405116,"geometry":{"type":"LineString","coordinates":[[5.432473,52.180446],[5.432129,52.180595],[5.432028,52.180645]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":37.625,"toNodeId":5467883,"speedInKilometersPerHour":50.0,"fromNodeId":5467882}},{"type":"Feature","id":6405117,"geometry":{"type":"LineString","coordinates":[[5.432028,52.180645],[5.431884,52.180717],[5.431712,52.18084],[5.431663,52.180894]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":37.625,"toNodeId":5467884,"speedInKilometersPerHour":50.0,"fromNodeId":5467883}},{"type":"Feature","id":6405120,"geometry":{"type":"LineString","coordinates":[[5.4335,52.180016],[5.432927,52.180256]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.431,"toNodeId":1121748,"speedInKilometersPerHour":50.0,"fromNodeId":5467885}},{"type":"Feature","id":6405165,"geometry":{"type":"LineString","coordinates":[[5.424756,52.181271],[5.425247,52.181191]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":34.732,"toNodeId":5467903,"speedInKilometersPerHour":30.0,"fromNodeId":1117049}},{"type":"Feature","id":6405166,"geometry":{"type":"LineString","coordinates":[[5.425247,52.181191],[5.425737,52.18111]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":34.732,"toNodeId":5467904,"speedInKilometersPerHour":30.0,"fromNodeId":5467903}},{"type":"Feature","id":6405167,"geometry":{"type":"LineString","coordinates":[[5.425737,52.18111],[5.426228,52.18103]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":34.732,"toNodeId":1121765,"speedInKilometersPerHour":30.0,"fromNodeId":5467904}},{"type":"Feature","id":6405168,"geometry":{"type":"LineString","coordinates":[[5.426228,52.18103],[5.425737,52.18111]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":34.732,"toNodeId":5467905,"speedInKilometersPerHour":30.0,"fromNodeId":1121765}},{"type":"Feature","id":6405169,"geometry":{"type":"LineString","coordinates":[[5.425737,52.18111],[5.425247,52.181191]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":34.732,"toNodeId":5467906,"speedInKilometersPerHour":30.0,"fromNodeId":5467905}},{"type":"Feature","id":6405170,"geometry":{"type":"LineString","coordinates":[[5.425247,52.181191],[5.424756,52.181271]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":34.732,"toNodeId":1117049,"speedInKilometersPerHour":30.0,"fromNodeId":5467906}},{"type":"Feature","id":6405177,"geometry":{"type":"LineString","coordinates":[[5.426726,52.180954],[5.426228,52.18103]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.069,"toNodeId":1121765,"speedInKilometersPerHour":30.0,"fromNodeId":5467910}},{"type":"Feature","id":6405178,"geometry":{"type":"LineString","coordinates":[[5.426228,52.18103],[5.426726,52.180954]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.069,"toNodeId":5467911,"speedInKilometersPerHour":30.0,"fromNodeId":1121765}},{"type":"Feature","id":6405179,"geometry":{"type":"LineString","coordinates":[[5.426726,52.180954],[5.427223,52.180878]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.069,"toNodeId":5467912,"speedInKilometersPerHour":30.0,"fromNodeId":5467911}},{"type":"Feature","id":6405180,"geometry":{"type":"LineString","coordinates":[[5.427223,52.180878],[5.42747,52.18084],[5.427719,52.180798]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.069,"toNodeId":1121766,"speedInKilometersPerHour":30.0,"fromNodeId":5467912}},{"type":"Feature","id":6405175,"geometry":{"type":"LineString","coordinates":[[5.427719,52.180798],[5.42747,52.18084],[5.427223,52.180878]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.069,"toNodeId":5467909,"speedInKilometersPerHour":30.0,"fromNodeId":1121766}},{"type":"Feature","id":6405183,"geometry":{"type":"LineString","coordinates":[[5.426228,52.18103],[5.426059,52.180613]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.824,"toNodeId":5467913,"speedInKilometersPerHour":50.0,"fromNodeId":1121765}},{"type":"Feature","id":6405184,"geometry":{"type":"LineString","coordinates":[[5.426059,52.180613],[5.425889,52.180196]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.824,"toNodeId":5467914,"speedInKilometersPerHour":50.0,"fromNodeId":5467913}},{"type":"Feature","id":6405176,"geometry":{"type":"LineString","coordinates":[[5.427223,52.180878],[5.426726,52.180954]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.069,"toNodeId":5467910,"speedInKilometersPerHour":30.0,"fromNodeId":5467909}},{"type":"Feature","id":6405181,"geometry":{"type":"LineString","coordinates":[[5.426316,52.181244],[5.426228,52.18103]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":24.561,"toNodeId":1121765,"speedInKilometersPerHour":50.0,"fromNodeId":1121767}},{"type":"Feature","id":6405182,"geometry":{"type":"LineString","coordinates":[[5.426228,52.18103],[5.426316,52.181244]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":24.561,"toNodeId":1121767,"speedInKilometersPerHour":50.0,"fromNodeId":1121765}},{"type":"Feature","id":6405185,"geometry":{"type":"LineString","coordinates":[[5.425889,52.180196],[5.42572,52.179779]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.824,"toNodeId":1117050,"speedInKilometersPerHour":50.0,"fromNodeId":5467914}},{"type":"Feature","id":6405186,"geometry":{"type":"LineString","coordinates":[[5.42572,52.179779],[5.425889,52.180196]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.824,"toNodeId":5467915,"speedInKilometersPerHour":50.0,"fromNodeId":1117050}},{"type":"Feature","id":6405187,"geometry":{"type":"LineString","coordinates":[[5.425889,52.180196],[5.426059,52.180613]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.824,"toNodeId":5467916,"speedInKilometersPerHour":50.0,"fromNodeId":5467915}},{"type":"Feature","id":6405188,"geometry":{"type":"LineString","coordinates":[[5.426059,52.180613],[5.426228,52.18103]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.824,"toNodeId":1121765,"speedInKilometersPerHour":50.0,"fromNodeId":5467916}},{"type":"Feature","id":6405219,"geometry":{"type":"LineString","coordinates":[[5.426411,52.179772],[5.426481,52.179771],[5.427101,52.179794]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467932,"speedInKilometersPerHour":30.0,"fromNodeId":5467931}},{"type":"Feature","id":6405222,"geometry":{"type":"LineString","coordinates":[[5.428481,52.179846],[5.429171,52.179872]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467935,"speedInKilometersPerHour":30.0,"fromNodeId":5467934}},{"type":"Feature","id":6405218,"geometry":{"type":"LineString","coordinates":[[5.42572,52.179779],[5.426411,52.179772]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467931,"speedInKilometersPerHour":30.0,"fromNodeId":1117050}},{"type":"Feature","id":6405220,"geometry":{"type":"LineString","coordinates":[[5.427101,52.179794],[5.427791,52.17982]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467933,"speedInKilometersPerHour":30.0,"fromNodeId":5467932}},{"type":"Feature","id":6405221,"geometry":{"type":"LineString","coordinates":[[5.427791,52.17982],[5.428481,52.179846]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467934,"speedInKilometersPerHour":30.0,"fromNodeId":5467933}},{"type":"Feature","id":6405223,"geometry":{"type":"LineString","coordinates":[[5.429171,52.179872],[5.429861,52.179897]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467936,"speedInKilometersPerHour":30.0,"fromNodeId":5467935}},{"type":"Feature","id":6405224,"geometry":{"type":"LineString","coordinates":[[5.429861,52.179897],[5.43036,52.179916],[5.430534,52.179965]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467937,"speedInKilometersPerHour":30.0,"fromNodeId":5467936}},{"type":"Feature","id":6405225,"geometry":{"type":"LineString","coordinates":[[5.430534,52.179965],[5.430536,52.179966],[5.430629,52.18008],[5.430644,52.180176],[5.430639,52.180237],[5.430609,52.180374]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":1121779,"speedInKilometersPerHour":30.0,"fromNodeId":5467937}},{"type":"Feature","id":6405226,"geometry":{"type":"LineString","coordinates":[[5.430609,52.180374],[5.430639,52.180237],[5.430644,52.180176],[5.430629,52.18008],[5.430536,52.179966],[5.430534,52.179965]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467938,"speedInKilometersPerHour":30.0,"fromNodeId":1121779}},{"type":"Feature","id":6405227,"geometry":{"type":"LineString","coordinates":[[5.430534,52.179965],[5.43036,52.179916],[5.429861,52.179897]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467939,"speedInKilometersPerHour":30.0,"fromNodeId":5467938}},{"type":"Feature","id":6405231,"geometry":{"type":"LineString","coordinates":[[5.427791,52.17982],[5.427101,52.179794]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467943,"speedInKilometersPerHour":30.0,"fromNodeId":5467942}},{"type":"Feature","id":6405228,"geometry":{"type":"LineString","coordinates":[[5.429861,52.179897],[5.429171,52.179872]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467940,"speedInKilometersPerHour":30.0,"fromNodeId":5467939}},{"type":"Feature","id":6405229,"geometry":{"type":"LineString","coordinates":[[5.429171,52.179872],[5.428481,52.179846]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467941,"speedInKilometersPerHour":30.0,"fromNodeId":5467940}},{"type":"Feature","id":6405234,"geometry":{"type":"LineString","coordinates":[[5.430609,52.180374],[5.429931,52.180485]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.993,"toNodeId":1121780,"speedInKilometersPerHour":30.0,"fromNodeId":1121779}},{"type":"Feature","id":6405235,"geometry":{"type":"LineString","coordinates":[[5.429931,52.180485],[5.430609,52.180374]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.993,"toNodeId":1121779,"speedInKilometersPerHour":30.0,"fromNodeId":1121780}},{"type":"Feature","id":6405237,"geometry":{"type":"LineString","coordinates":[[5.431004,52.18128],[5.431042,52.181019],[5.431057,52.180851]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.913,"toNodeId":5467946,"speedInKilometersPerHour":30.0,"fromNodeId":5467945}},{"type":"Feature","id":6405230,"geometry":{"type":"LineString","coordinates":[[5.428481,52.179846],[5.427791,52.17982]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467942,"speedInKilometersPerHour":30.0,"fromNodeId":5467941}},{"type":"Feature","id":6405232,"geometry":{"type":"LineString","coordinates":[[5.427101,52.179794],[5.426481,52.179771],[5.426411,52.179772]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":5467944,"speedInKilometersPerHour":30.0,"fromNodeId":5467943}},{"type":"Feature","id":6405240,"geometry":{"type":"LineString","coordinates":[[5.429931,52.180485],[5.429378,52.180563]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":5467948,"speedInKilometersPerHour":30.0,"fromNodeId":1121780}},{"type":"Feature","id":6405241,"geometry":{"type":"LineString","coordinates":[[5.429378,52.180563],[5.428825,52.180642]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":5467949,"speedInKilometersPerHour":30.0,"fromNodeId":5467948}},{"type":"Feature","id":6405233,"geometry":{"type":"LineString","coordinates":[[5.426411,52.179772],[5.42572,52.179779]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.281,"toNodeId":1117050,"speedInKilometersPerHour":30.0,"fromNodeId":5467944}},{"type":"Feature","id":6405238,"geometry":{"type":"LineString","coordinates":[[5.431057,52.180851],[5.43107,52.18071],[5.431116,52.18045],[5.431117,52.180422]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.913,"toNodeId":5467947,"speedInKilometersPerHour":30.0,"fromNodeId":5467946}},{"type":"Feature","id":6405239,"geometry":{"type":"LineString","coordinates":[[5.431117,52.180422],[5.431123,52.180313],[5.430609,52.180374]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.913,"toNodeId":1121779,"speedInKilometersPerHour":30.0,"fromNodeId":5467947}},{"type":"Feature","id":6405242,"geometry":{"type":"LineString","coordinates":[[5.428825,52.180642],[5.428272,52.18072]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":5467950,"speedInKilometersPerHour":30.0,"fromNodeId":5467949}},{"type":"Feature","id":6405246,"geometry":{"type":"LineString","coordinates":[[5.428825,52.180642],[5.429378,52.180563]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":5467953,"speedInKilometersPerHour":30.0,"fromNodeId":5467952}},{"type":"Feature","id":6405243,"geometry":{"type":"LineString","coordinates":[[5.428272,52.18072],[5.427719,52.180798]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":1121766,"speedInKilometersPerHour":30.0,"fromNodeId":5467950}},{"type":"Feature","id":6405244,"geometry":{"type":"LineString","coordinates":[[5.427719,52.180798],[5.428272,52.18072]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":5467951,"speedInKilometersPerHour":30.0,"fromNodeId":1121766}},{"type":"Feature","id":6405245,"geometry":{"type":"LineString","coordinates":[[5.428272,52.18072],[5.428825,52.180642]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":5467952,"speedInKilometersPerHour":30.0,"fromNodeId":5467951}},{"type":"Feature","id":6405247,"geometry":{"type":"LineString","coordinates":[[5.429378,52.180563],[5.429931,52.180485]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.815,"toNodeId":1121780,"speedInKilometersPerHour":30.0,"fromNodeId":5467953}},{"type":"Feature","id":6405252,"geometry":{"type":"LineString","coordinates":[[5.429875,52.180884],[5.429819,52.181284]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.599,"toNodeId":5467957,"speedInKilometersPerHour":30.0,"fromNodeId":5467956}},{"type":"Feature","id":6405249,"geometry":{"type":"LineString","coordinates":[[5.429819,52.181284],[5.429875,52.180884]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.599,"toNodeId":5467955,"speedInKilometersPerHour":30.0,"fromNodeId":5467954}},{"type":"Feature","id":6405250,"geometry":{"type":"LineString","coordinates":[[5.429875,52.180884],[5.429931,52.180485]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.599,"toNodeId":1121780,"speedInKilometersPerHour":30.0,"fromNodeId":5467955}},{"type":"Feature","id":6405251,"geometry":{"type":"LineString","coordinates":[[5.429931,52.180485],[5.429875,52.180884]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":44.599,"toNodeId":5467956,"speedInKilometersPerHour":30.0,"fromNodeId":1121780}},{"type":"Feature","id":6405256,"geometry":{"type":"LineString","coordinates":[[5.427839,52.181107],[5.427719,52.180798]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.349,"toNodeId":1121766,"speedInKilometersPerHour":30.0,"fromNodeId":5467959}},{"type":"Feature","id":6405257,"geometry":{"type":"LineString","coordinates":[[5.427719,52.180798],[5.427839,52.181107]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":35.349,"toNodeId":5467960,"speedInKilometersPerHour":30.0,"fromNodeId":1121766}},{"type":"Feature","id":6409986,"geometry":{"type":"LineString","coordinates":[[5.433145,52.172166],[5.432642,52.172405],[5.432593,52.172423]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470746,"speedInKilometersPerHour":70.0,"fromNodeId":5470745}},{"type":"Feature","id":6409987,"geometry":{"type":"LineString","coordinates":[[5.432593,52.172423],[5.43231,52.172531],[5.431984,52.172625]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470747,"speedInKilometersPerHour":70.0,"fromNodeId":5470746}},{"type":"Feature","id":6409988,"geometry":{"type":"LineString","coordinates":[[5.431984,52.172625],[5.431937,52.172638],[5.431495,52.172714],[5.431314,52.172729]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470748,"speedInKilometersPerHour":70.0,"fromNodeId":5470747}},{"type":"Feature","id":6409989,"geometry":{"type":"LineString","coordinates":[[5.431314,52.172729],[5.431076,52.172749],[5.430624,52.172745]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470749,"speedInKilometersPerHour":70.0,"fromNodeId":5470748}},{"type":"Feature","id":6409990,"geometry":{"type":"LineString","coordinates":[[5.430624,52.172745],[5.430595,52.172745],[5.430142,52.172695],[5.429948,52.172655]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470750,"speedInKilometersPerHour":70.0,"fromNodeId":5470749}},{"type":"Feature","id":6409991,"geometry":{"type":"LineString","coordinates":[[5.429948,52.172655],[5.429864,52.172638],[5.429593,52.172562],[5.429338,52.172458]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470751,"speedInKilometersPerHour":70.0,"fromNodeId":5470750}},{"type":"Feature","id":6409992,"geometry":{"type":"LineString","coordinates":[[5.429338,52.172458],[5.429275,52.172432],[5.429121,52.172352],[5.428904,52.172237],[5.428808,52.172184]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.408,"toNodeId":5470752,"speedInKilometersPerHour":70.0,"fromNodeId":5470751}},{"type":"Feature","id":6410877,"geometry":{"type":"LineString","coordinates":[[5.432878,52.18021],[5.433451,52.17997]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.431,"toNodeId":5471354,"speedInKilometersPerHour":50.0,"fromNodeId":1122767}},{"type":"Feature","id":6410880,"geometry":{"type":"LineString","coordinates":[[5.431435,52.181028],[5.43153,52.180908],[5.43167,52.180786],[5.431812,52.180696]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.451,"toNodeId":5471356,"speedInKilometersPerHour":50.0,"fromNodeId":5471355}},{"type":"Feature","id":6410881,"geometry":{"type":"LineString","coordinates":[[5.431812,52.180696],[5.431916,52.18063],[5.432222,52.180496],[5.432336,52.180446]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.451,"toNodeId":5471357,"speedInKilometersPerHour":50.0,"fromNodeId":5471356}},{"type":"Feature","id":6410882,"geometry":{"type":"LineString","coordinates":[[5.432336,52.180446],[5.432878,52.18021]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":45.451,"toNodeId":1122767,"speedInKilometersPerHour":50.0,"fromNodeId":5471357}},{"type":"Feature","id":7223061,"geometry":{"type":"LineString","coordinates":[[5.433661,52.180611],[5.43331,52.180338]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.697,"toNodeId":5985263,"speedInKilometersPerHour":100.0,"fromNodeId":5985262}},{"type":"Feature","id":7223062,"geometry":{"type":"LineString","coordinates":[[5.43331,52.180338],[5.432959,52.180065]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":38.697,"toNodeId":596832,"speedInKilometersPerHour":100.0,"fromNodeId":5985263}},{"type":"Feature","id":7223065,"geometry":{"type":"LineString","coordinates":[[5.433601,52.180439],[5.433382,52.180233],[5.433212,52.180084]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985266,"speedInKilometersPerHour":100.0,"fromNodeId":5985265}},{"type":"Feature","id":7223066,"geometry":{"type":"LineString","coordinates":[[5.433212,52.180084],[5.432811,52.179734]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985267,"speedInKilometersPerHour":100.0,"fromNodeId":5985266}},{"type":"Feature","id":7223067,"geometry":{"type":"LineString","coordinates":[[5.432811,52.179734],[5.43241,52.179384]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985268,"speedInKilometersPerHour":100.0,"fromNodeId":5985267}},{"type":"Feature","id":7223068,"geometry":{"type":"LineString","coordinates":[[5.43241,52.179384],[5.432009,52.179034]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985269,"speedInKilometersPerHour":100.0,"fromNodeId":5985268}},{"type":"Feature","id":7223069,"geometry":{"type":"LineString","coordinates":[[5.432009,52.179034],[5.431713,52.178776],[5.431609,52.178684]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985270,"speedInKilometersPerHour":100.0,"fromNodeId":5985269}},{"type":"Feature","id":7223070,"geometry":{"type":"LineString","coordinates":[[5.431609,52.178684],[5.43121,52.178333]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985271,"speedInKilometersPerHour":100.0,"fromNodeId":5985270}},{"type":"Feature","id":7223071,"geometry":{"type":"LineString","coordinates":[[5.43121,52.178333],[5.430812,52.177982]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985272,"speedInKilometersPerHour":100.0,"fromNodeId":5985271}},{"type":"Feature","id":7223072,"geometry":{"type":"LineString","coordinates":[[5.430812,52.177982],[5.430413,52.177631]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":5985273,"speedInKilometersPerHour":100.0,"fromNodeId":5985272}},{"type":"Feature","id":7223073,"geometry":{"type":"LineString","coordinates":[[5.430413,52.177631],[5.430015,52.17728]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.631,"toNodeId":597029,"speedInKilometersPerHour":100.0,"fromNodeId":5985273}},{"type":"Feature","id":7930097,"geometry":{"type":"LineString","coordinates":[[5.428925,52.172131],[5.428988,52.172165],[5.429345,52.172329],[5.42949,52.172383]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.846,"toNodeId":6349337,"speedInKilometersPerHour":70.0,"fromNodeId":6349336}},{"type":"Feature","id":7930098,"geometry":{"type":"LineString","coordinates":[[5.42949,52.172383],[5.429684,52.172455],[5.430015,52.172539],[5.430126,52.172557]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.846,"toNodeId":6349338,"speedInKilometersPerHour":70.0,"fromNodeId":6349337}},{"type":"Feature","id":7930099,"geometry":{"type":"LineString","coordinates":[[5.430126,52.172557],[5.430324,52.172588],[5.430683,52.172626],[5.430814,52.172629]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.846,"toNodeId":6349339,"speedInKilometersPerHour":70.0,"fromNodeId":6349338}},{"type":"Feature","id":7930100,"geometry":{"type":"LineString","coordinates":[[5.430814,52.172629],[5.431061,52.172634],[5.431426,52.172611],[5.431509,52.172599]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.846,"toNodeId":6349340,"speedInKilometersPerHour":70.0,"fromNodeId":6349339}},{"type":"Feature","id":7930101,"geometry":{"type":"LineString","coordinates":[[5.431509,52.172599],[5.431897,52.172543],[5.432171,52.172468]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.846,"toNodeId":6349341,"speedInKilometersPerHour":70.0,"fromNodeId":6349340}},{"type":"Feature","id":7930102,"geometry":{"type":"LineString","coordinates":[[5.432171,52.172468],[5.432286,52.172436],[5.432635,52.172298],[5.432759,52.172237]]},"properties":{"reverseSpeedInKilometersPerHour":0.0,"distanceInMeters":47.846,"toNodeId":6349342,"speedInKilometersPerHour":70.0,"fromNodeId":6349341}}]} \ No newline at end of file +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": 3666256, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433595, + 52.173101 + ], + [ + 5.433133, + 52.173317 + ] + ] + }, + "properties": { + "id": 3666256, + "linkIdReversed": 0, + "fromNodeId": 3873704, + "toNodeId": 596870, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 39.714 + } + }, + { + "type": "Feature", + "id": 3666944, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42866, + 52.176369 + ], + [ + 5.428427, + 52.17617 + ] + ] + }, + "properties": { + "id": 3666944, + "linkIdReversed": 0, + "fromNodeId": 3874089, + "toNodeId": 597005, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 27.238 + } + }, + { + "type": "Feature", + "id": 3666076, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431601, + 52.178947 + ], + [ + 5.43111, + 52.178622 + ] + ] + }, + "properties": { + "id": 3666076, + "linkIdReversed": 0, + "fromNodeId": 596829, + "toNodeId": 3873575, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666077, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43111, + 52.178622 + ], + [ + 5.431077, + 52.1786 + ], + [ + 5.430663, + 52.178413 + ], + [ + 5.430526, + 52.178363 + ] + ] + }, + "properties": { + "id": 3666077, + "linkIdReversed": 0, + "fromNodeId": 3873575, + "toNodeId": 3873576, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666078, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430526, + 52.178363 + ], + [ + 5.430206, + 52.178246 + ], + [ + 5.429884, + 52.178165 + ], + [ + 5.429882, + 52.178165 + ] + ] + }, + "properties": { + "id": 3666078, + "linkIdReversed": 0, + "fromNodeId": 3873576, + "toNodeId": 3873577, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666082, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427747, + 52.17797 + ], + [ + 5.427079, + 52.177963 + ], + [ + 5.427025, + 52.177964 + ] + ] + }, + "properties": { + "id": 3666082, + "linkIdReversed": 0, + "fromNodeId": 3873580, + "toNodeId": 3873581, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666079, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429882, + 52.178165 + ], + [ + 5.429507, + 52.178104 + ], + [ + 5.42918, + 52.178064 + ] + ] + }, + "properties": { + "id": 3666079, + "linkIdReversed": 0, + "fromNodeId": 3873577, + "toNodeId": 3873578, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666080, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42918, + 52.178064 + ], + [ + 5.429103, + 52.178055 + ], + [ + 5.428641, + 52.178005 + ], + [ + 5.428467, + 52.177998 + ] + ] + }, + "properties": { + "id": 3666080, + "linkIdReversed": 0, + "fromNodeId": 3873578, + "toNodeId": 3873579, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666081, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428467, + 52.177998 + ], + [ + 5.427836, + 52.177971 + ], + [ + 5.427747, + 52.17797 + ] + ] + }, + "properties": { + "id": 3666081, + "linkIdReversed": 0, + "fromNodeId": 3873579, + "toNodeId": 3873580, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666083, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427025, + 52.177964 + ], + [ + 5.426695, + 52.177971 + ], + [ + 5.426323, + 52.178013 + ], + [ + 5.42631, + 52.178015 + ] + ] + }, + "properties": { + "id": 3666083, + "linkIdReversed": 0, + "fromNodeId": 3873581, + "toNodeId": 3873582, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666084, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42631, + 52.178015 + ], + [ + 5.42593, + 52.178082 + ], + [ + 5.425628, + 52.178159 + ] + ] + }, + "properties": { + "id": 3666084, + "linkIdReversed": 0, + "fromNodeId": 3873582, + "toNodeId": 3873583, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666088, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431217, + 52.178606 + ], + [ + 5.430834, + 52.178264 + ] + ] + }, + "properties": { + "id": 3666088, + "linkIdReversed": 0, + "fromNodeId": 3873585, + "toNodeId": 3873586, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666089, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430834, + 52.178264 + ], + [ + 5.43045, + 52.177923 + ] + ] + }, + "properties": { + "id": 3666089, + "linkIdReversed": 0, + "fromNodeId": 3873586, + "toNodeId": 3873587, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666085, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425628, + 52.178159 + ], + [ + 5.425557, + 52.178177 + ], + [ + 5.425227, + 52.178303 + ], + [ + 5.425037, + 52.178409 + ] + ] + }, + "properties": { + "id": 3666085, + "linkIdReversed": 0, + "fromNodeId": 3873583, + "toNodeId": 3873584, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666091, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430067, + 52.177581 + ], + [ + 5.429754, + 52.177303 + ], + [ + 5.429681, + 52.177241 + ] + ] + }, + "properties": { + "id": 3666091, + "linkIdReversed": 0, + "fromNodeId": 3873588, + "toNodeId": 3873589, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666092, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429681, + 52.177241 + ], + [ + 5.429287, + 52.176904 + ] + ] + }, + "properties": { + "id": 3666092, + "linkIdReversed": 0, + "fromNodeId": 3873589, + "toNodeId": 3873590, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666086, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425037, + 52.178409 + ], + [ + 5.424503, + 52.178707 + ] + ] + }, + "properties": { + "id": 3666086, + "linkIdReversed": 0, + "fromNodeId": 3873584, + "toNodeId": 596830, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666087, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431601, + 52.178947 + ], + [ + 5.431217, + 52.178606 + ] + ] + }, + "properties": { + "id": 3666087, + "linkIdReversed": 0, + "fromNodeId": 596829, + "toNodeId": 3873585, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666095, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432619, + 52.179786 + ], + [ + 5.43228, + 52.179506 + ] + ] + }, + "properties": { + "id": 3666095, + "linkIdReversed": 0, + "fromNodeId": 3873591, + "toNodeId": 3873592, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666096, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43228, + 52.179506 + ], + [ + 5.43194, + 52.179227 + ] + ] + }, + "properties": { + "id": 3666096, + "linkIdReversed": 0, + "fromNodeId": 3873592, + "toNodeId": 3873593, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666090, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43045, + 52.177923 + ], + [ + 5.430067, + 52.177581 + ] + ] + }, + "properties": { + "id": 3666090, + "linkIdReversed": 0, + "fromNodeId": 3873587, + "toNodeId": 3873588, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666093, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429287, + 52.176904 + ], + [ + 5.428893, + 52.176567 + ] + ] + }, + "properties": { + "id": 3666093, + "linkIdReversed": 0, + "fromNodeId": 3873590, + "toNodeId": 596831, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666094, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432959, + 52.180065 + ], + [ + 5.432619, + 52.179786 + ] + ] + }, + "properties": { + "id": 3666094, + "linkIdReversed": 0, + "fromNodeId": 596832, + "toNodeId": 3873591, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666100, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426578, + 52.177202 + ], + [ + 5.426155, + 52.177499 + ] + ] + }, + "properties": { + "id": 3666100, + "linkIdReversed": 0, + "fromNodeId": 3873595, + "toNodeId": 3873596, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666097, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43194, + 52.179227 + ], + [ + 5.431601, + 52.178947 + ] + ] + }, + "properties": { + "id": 3666097, + "linkIdReversed": 0, + "fromNodeId": 3873593, + "toNodeId": 596829, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666098, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427439, + 52.176617 + ], + [ + 5.427006, + 52.176908 + ] + ] + }, + "properties": { + "id": 3666098, + "linkIdReversed": 0, + "fromNodeId": 596833, + "toNodeId": 3873594, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666103, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42532, + 52.178098 + ], + [ + 5.424912, + 52.178403 + ] + ] + }, + "properties": { + "id": 3666103, + "linkIdReversed": 0, + "fromNodeId": 3873598, + "toNodeId": 3873599, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666104, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424912, + 52.178403 + ], + [ + 5.424503, + 52.178707 + ] + ] + }, + "properties": { + "id": 3666104, + "linkIdReversed": 0, + "fromNodeId": 3873599, + "toNodeId": 596830, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666099, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427006, + 52.176908 + ], + [ + 5.426791, + 52.177052 + ], + [ + 5.426578, + 52.177202 + ] + ] + }, + "properties": { + "id": 3666099, + "linkIdReversed": 0, + "fromNodeId": 3873594, + "toNodeId": 3873595, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666101, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426155, + 52.177499 + ], + [ + 5.425733, + 52.177796 + ] + ] + }, + "properties": { + "id": 3666101, + "linkIdReversed": 0, + "fromNodeId": 3873596, + "toNodeId": 3873597, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666107, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.4237, + 52.179271 + ], + [ + 5.423427, + 52.179462 + ], + [ + 5.423301, + 52.179555 + ] + ] + }, + "properties": { + "id": 3666107, + "linkIdReversed": 0, + "fromNodeId": 3873601, + "toNodeId": 3873602, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666102, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425733, + 52.177796 + ], + [ + 5.425619, + 52.177876 + ], + [ + 5.42532, + 52.178098 + ] + ] + }, + "properties": { + "id": 3666102, + "linkIdReversed": 0, + "fromNodeId": 3873597, + "toNodeId": 3873598, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666105, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424503, + 52.178707 + ], + [ + 5.424101, + 52.178989 + ] + ] + }, + "properties": { + "id": 3666105, + "linkIdReversed": 0, + "fromNodeId": 596830, + "toNodeId": 3873600, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666106, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424101, + 52.178989 + ], + [ + 5.4237, + 52.179271 + ] + ] + }, + "properties": { + "id": 3666106, + "linkIdReversed": 0, + "fromNodeId": 3873600, + "toNodeId": 3873601, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666111, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427038, + 52.174931 + ], + [ + 5.426641, + 52.174561 + ] + ] + }, + "properties": { + "id": 3666111, + "linkIdReversed": 0, + "fromNodeId": 3873604, + "toNodeId": 3873605, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666108, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423301, + 52.179555 + ], + [ + 5.422911, + 52.179842 + ] + ] + }, + "properties": { + "id": 3666108, + "linkIdReversed": 0, + "fromNodeId": 3873602, + "toNodeId": 3873603, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666109, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422911, + 52.179842 + ], + [ + 5.42252, + 52.18013 + ] + ] + }, + "properties": { + "id": 3666109, + "linkIdReversed": 0, + "fromNodeId": 3873603, + "toNodeId": 596834, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666114, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42591, + 52.173797 + ], + [ + 5.425682, + 52.173553 + ], + [ + 5.425613, + 52.173397 + ] + ] + }, + "properties": { + "id": 3666114, + "linkIdReversed": 0, + "fromNodeId": 3873607, + "toNodeId": 596836, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666110, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427436, + 52.175301 + ], + [ + 5.427038, + 52.174931 + ] + ] + }, + "properties": { + "id": 3666110, + "linkIdReversed": 0, + "fromNodeId": 596835, + "toNodeId": 3873604, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666112, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426641, + 52.174561 + ], + [ + 5.426505, + 52.174435 + ], + [ + 5.426269, + 52.174182 + ] + ] + }, + "properties": { + "id": 3666112, + "linkIdReversed": 0, + "fromNodeId": 3873605, + "toNodeId": 3873606, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666117, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426173, + 52.175001 + ], + [ + 5.425914, + 52.17506 + ], + [ + 5.425746, + 52.17514 + ], + [ + 5.425612, + 52.175228 + ], + [ + 5.425594, + 52.175247 + ] + ] + }, + "properties": { + "id": 3666117, + "linkIdReversed": 0, + "fromNodeId": 3873609, + "toNodeId": 3873610, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666118, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425594, + 52.175247 + ], + [ + 5.425488, + 52.175358 + ], + [ + 5.425406, + 52.175503 + ], + [ + 5.425382, + 52.175662 + ] + ] + }, + "properties": { + "id": 3666118, + "linkIdReversed": 0, + "fromNodeId": 3873610, + "toNodeId": 3873611, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666119, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425382, + 52.175662 + ], + [ + 5.425381, + 52.175671 + ], + [ + 5.425436, + 52.175835 + ], + [ + 5.425518, + 52.175953 + ], + [ + 5.425622, + 52.176044 + ], + [ + 5.425653, + 52.176063 + ] + ] + }, + "properties": { + "id": 3666119, + "linkIdReversed": 0, + "fromNodeId": 3873611, + "toNodeId": 3873612, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666120, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425653, + 52.176063 + ], + [ + 5.425793, + 52.176147 + ], + [ + 5.426001, + 52.176224 + ], + [ + 5.426264, + 52.17627 + ], + [ + 5.426272, + 52.176271 + ] + ] + }, + "properties": { + "id": 3666120, + "linkIdReversed": 0, + "fromNodeId": 3873612, + "toNodeId": 3873613, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666121, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426272, + 52.176271 + ], + [ + 5.426511, + 52.176289 + ], + [ + 5.426772, + 52.176262 + ], + [ + 5.426965, + 52.176204 + ] + ] + }, + "properties": { + "id": 3666121, + "linkIdReversed": 0, + "fromNodeId": 3873613, + "toNodeId": 3873614, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666122, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426965, + 52.176204 + ], + [ + 5.427002, + 52.176193 + ], + [ + 5.427353, + 52.176022 + ], + [ + 5.427542, + 52.175941 + ] + ] + }, + "properties": { + "id": 3666122, + "linkIdReversed": 0, + "fromNodeId": 3873614, + "toNodeId": 596837, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666123, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427756, + 52.175579 + ], + [ + 5.427436, + 52.175301 + ] + ] + }, + "properties": { + "id": 3666123, + "linkIdReversed": 0, + "fromNodeId": 596838, + "toNodeId": 596835, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.896 + } + }, + { + "type": "Feature", + "id": 3666124, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427942, + 52.175461 + ], + [ + 5.427554, + 52.175117 + ] + ] + }, + "properties": { + "id": 3666124, + "linkIdReversed": 0, + "fromNodeId": 596839, + "toNodeId": 3873615, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666125, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427554, + 52.175117 + ], + [ + 5.427166, + 52.174773 + ] + ] + }, + "properties": { + "id": 3666125, + "linkIdReversed": 0, + "fromNodeId": 3873615, + "toNodeId": 3873616, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666126, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427166, + 52.174773 + ], + [ + 5.426777, + 52.174429 + ] + ] + }, + "properties": { + "id": 3666126, + "linkIdReversed": 0, + "fromNodeId": 3873616, + "toNodeId": 3873617, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666127, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426777, + 52.174429 + ], + [ + 5.426389, + 52.174085 + ] + ] + }, + "properties": { + "id": 3666127, + "linkIdReversed": 0, + "fromNodeId": 3873617, + "toNodeId": 3873618, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666113, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426269, + 52.174182 + ], + [ + 5.42591, + 52.173797 + ] + ] + }, + "properties": { + "id": 3666113, + "linkIdReversed": 0, + "fromNodeId": 3873606, + "toNodeId": 3873607, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666115, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427436, + 52.175301 + ], + [ + 5.427168, + 52.175137 + ], + [ + 5.426982, + 52.17506 + ], + [ + 5.426875, + 52.175031 + ] + ] + }, + "properties": { + "id": 3666115, + "linkIdReversed": 0, + "fromNodeId": 596835, + "toNodeId": 3873608, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666130, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425613, + 52.173397 + ], + [ + 5.425311, + 52.173067 + ] + ] + }, + "properties": { + "id": 3666130, + "linkIdReversed": 0, + "fromNodeId": 596836, + "toNodeId": 3873620, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.122 + } + }, + { + "type": "Feature", + "id": 3666116, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426875, + 52.175031 + ], + [ + 5.426734, + 52.174992 + ], + [ + 5.426459, + 52.174976 + ], + [ + 5.426199, + 52.174995 + ], + [ + 5.426173, + 52.175001 + ] + ] + }, + "properties": { + "id": 3666116, + "linkIdReversed": 0, + "fromNodeId": 3873608, + "toNodeId": 3873609, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666128, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426389, + 52.174085 + ], + [ + 5.426001, + 52.173741 + ] + ] + }, + "properties": { + "id": 3666128, + "linkIdReversed": 0, + "fromNodeId": 3873618, + "toNodeId": 3873619, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666129, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426001, + 52.173741 + ], + [ + 5.425613, + 52.173397 + ] + ] + }, + "properties": { + "id": 3666129, + "linkIdReversed": 0, + "fromNodeId": 3873619, + "toNodeId": 596836, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666131, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425311, + 52.173067 + ], + [ + 5.425306, + 52.173061 + ], + [ + 5.425025, + 52.172732 + ] + ] + }, + "properties": { + "id": 3666131, + "linkIdReversed": 0, + "fromNodeId": 3873620, + "toNodeId": 3873621, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.122 + } + }, + { + "type": "Feature", + "id": 3666132, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425025, + 52.172732 + ], + [ + 5.42488, + 52.172562 + ], + [ + 5.424755, + 52.172392 + ] + ] + }, + "properties": { + "id": 3666132, + "linkIdReversed": 0, + "fromNodeId": 3873621, + "toNodeId": 3873622, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.122 + } + }, + { + "type": "Feature", + "id": 3666204, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42861, + 52.176056 + ], + [ + 5.428276, + 52.175759 + ] + ] + }, + "properties": { + "id": 3666204, + "linkIdReversed": 0, + "fromNodeId": 596855, + "toNodeId": 3873665, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.223 + } + }, + { + "type": "Feature", + "id": 3666205, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428276, + 52.175759 + ], + [ + 5.427942, + 52.175461 + ] + ] + }, + "properties": { + "id": 3666205, + "linkIdReversed": 0, + "fromNodeId": 3873665, + "toNodeId": 596839, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.223 + } + }, + { + "type": "Feature", + "id": 3666210, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424717, + 52.172107 + ], + [ + 5.425023, + 52.172495 + ] + ] + }, + "properties": { + "id": 3666210, + "linkIdReversed": 0, + "fromNodeId": 3873669, + "toNodeId": 3873670, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666211, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425023, + 52.172495 + ], + [ + 5.425043, + 52.17252 + ], + [ + 5.425335, + 52.17288 + ] + ] + }, + "properties": { + "id": 3666211, + "linkIdReversed": 0, + "fromNodeId": 3873670, + "toNodeId": 3873671, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666214, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426059, + 52.173617 + ], + [ + 5.426461, + 52.173969 + ] + ] + }, + "properties": { + "id": 3666214, + "linkIdReversed": 0, + "fromNodeId": 3873673, + "toNodeId": 3873674, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666212, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425335, + 52.17288 + ], + [ + 5.425417, + 52.172981 + ], + [ + 5.425689, + 52.173251 + ] + ] + }, + "properties": { + "id": 3666212, + "linkIdReversed": 0, + "fromNodeId": 3873671, + "toNodeId": 3873672, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666217, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427263, + 52.174675 + ], + [ + 5.427665, + 52.175028 + ] + ] + }, + "properties": { + "id": 3666217, + "linkIdReversed": 0, + "fromNodeId": 3873676, + "toNodeId": 3873677, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666213, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425689, + 52.173251 + ], + [ + 5.426053, + 52.173611 + ], + [ + 5.426059, + 52.173617 + ] + ] + }, + "properties": { + "id": 3666213, + "linkIdReversed": 0, + "fromNodeId": 3873672, + "toNodeId": 3873673, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666215, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426461, + 52.173969 + ], + [ + 5.426862, + 52.174322 + ] + ] + }, + "properties": { + "id": 3666215, + "linkIdReversed": 0, + "fromNodeId": 3873674, + "toNodeId": 3873675, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666220, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428066, + 52.175381 + ], + [ + 5.428403, + 52.175677 + ] + ] + }, + "properties": { + "id": 3666220, + "linkIdReversed": 0, + "fromNodeId": 596857, + "toNodeId": 3873678, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.157 + } + }, + { + "type": "Feature", + "id": 3666216, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426862, + 52.174322 + ], + [ + 5.427263, + 52.174675 + ] + ] + }, + "properties": { + "id": 3666216, + "linkIdReversed": 0, + "fromNodeId": 3873675, + "toNodeId": 3873676, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666218, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427665, + 52.175028 + ], + [ + 5.428066, + 52.175381 + ] + ] + }, + "properties": { + "id": 3666218, + "linkIdReversed": 0, + "fromNodeId": 3873677, + "toNodeId": 596857, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666221, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428403, + 52.175677 + ], + [ + 5.42874, + 52.175972 + ] + ] + }, + "properties": { + "id": 3666221, + "linkIdReversed": 0, + "fromNodeId": 3873678, + "toNodeId": 596859, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.157 + } + }, + { + "type": "Feature", + "id": 3666225, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425348, + 52.172509 + ], + [ + 5.425448, + 52.172604 + ], + [ + 5.42564, + 52.17276 + ], + [ + 5.42576, + 52.172837 + ] + ] + }, + "properties": { + "id": 3666225, + "linkIdReversed": 0, + "fromNodeId": 3873680, + "toNodeId": 3873681, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666226, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42576, + 52.172837 + ], + [ + 5.425812, + 52.172871 + ], + [ + 5.425988, + 52.172958 + ], + [ + 5.426297, + 52.173088 + ] + ] + }, + "properties": { + "id": 3666226, + "linkIdReversed": 0, + "fromNodeId": 3873681, + "toNodeId": 3873682, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666222, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42496, + 52.172169 + ], + [ + 5.425194, + 52.172501 + ], + [ + 5.42524, + 52.172555 + ] + ] + }, + "properties": { + "id": 3666222, + "linkIdReversed": 0, + "fromNodeId": 596860, + "toNodeId": 3873679, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.076 + } + }, + { + "type": "Feature", + "id": 3666223, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42524, + 52.172555 + ], + [ + 5.425388, + 52.172729 + ], + [ + 5.425577, + 52.172924 + ] + ] + }, + "properties": { + "id": 3666223, + "linkIdReversed": 0, + "fromNodeId": 3873679, + "toNodeId": 596861, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.076 + } + }, + { + "type": "Feature", + "id": 3666229, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427556, + 52.173366 + ], + [ + 5.427933, + 52.173389 + ], + [ + 5.42823, + 52.173395 + ] + ] + }, + "properties": { + "id": 3666229, + "linkIdReversed": 0, + "fromNodeId": 3873684, + "toNodeId": 3873685, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666230, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42823, + 52.173395 + ], + [ + 5.428576, + 52.173401 + ], + [ + 5.428905, + 52.173399 + ] + ] + }, + "properties": { + "id": 3666230, + "linkIdReversed": 0, + "fromNodeId": 3873685, + "toNodeId": 3873686, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666224, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42496, + 52.172169 + ], + [ + 5.425298, + 52.172462 + ], + [ + 5.425348, + 52.172509 + ] + ] + }, + "properties": { + "id": 3666224, + "linkIdReversed": 0, + "fromNodeId": 596860, + "toNodeId": 3873680, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666227, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426297, + 52.173088 + ], + [ + 5.426332, + 52.173103 + ], + [ + 5.426621, + 52.173206 + ], + [ + 5.426899, + 52.173274 + ] + ] + }, + "properties": { + "id": 3666227, + "linkIdReversed": 0, + "fromNodeId": 3873682, + "toNodeId": 3873683, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666233, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430257, + 52.173387 + ], + [ + 5.430814, + 52.17337 + ], + [ + 5.430931, + 52.173363 + ] + ] + }, + "properties": { + "id": 3666233, + "linkIdReversed": 0, + "fromNodeId": 3873688, + "toNodeId": 3873689, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666234, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430931, + 52.173363 + ], + [ + 5.431254, + 52.173344 + ], + [ + 5.4316, + 52.173307 + ] + ] + }, + "properties": { + "id": 3666234, + "linkIdReversed": 0, + "fromNodeId": 3873689, + "toNodeId": 3873690, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666228, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426899, + 52.173274 + ], + [ + 5.426995, + 52.173298 + ], + [ + 5.427433, + 52.173359 + ], + [ + 5.427556, + 52.173366 + ] + ] + }, + "properties": { + "id": 3666228, + "linkIdReversed": 0, + "fromNodeId": 3873683, + "toNodeId": 3873684, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666231, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428905, + 52.173399 + ], + [ + 5.429581, + 52.173394 + ] + ] + }, + "properties": { + "id": 3666231, + "linkIdReversed": 0, + "fromNodeId": 3873686, + "toNodeId": 3873687, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666232, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429581, + 52.173394 + ], + [ + 5.430187, + 52.173389 + ], + [ + 5.430257, + 52.173387 + ] + ] + }, + "properties": { + "id": 3666232, + "linkIdReversed": 0, + "fromNodeId": 3873687, + "toNodeId": 3873688, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666235, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.4316, + 52.173307 + ], + [ + 5.431607, + 52.173306 + ], + [ + 5.431988, + 52.173225 + ], + [ + 5.432235, + 52.173164 + ] + ] + }, + "properties": { + "id": 3666235, + "linkIdReversed": 0, + "fromNodeId": 3873690, + "toNodeId": 3873691, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666240, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425577, + 52.172924 + ], + [ + 5.425919, + 52.173229 + ], + [ + 5.425982, + 52.173288 + ] + ] + }, + "properties": { + "id": 3666240, + "linkIdReversed": 0, + "fromNodeId": 596861, + "toNodeId": 3873694, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666241, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425982, + 52.173288 + ], + [ + 5.426368, + 52.173653 + ], + [ + 5.426373, + 52.173657 + ] + ] + }, + "properties": { + "id": 3666241, + "linkIdReversed": 0, + "fromNodeId": 3873694, + "toNodeId": 3873695, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666236, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432235, + 52.173164 + ], + [ + 5.432294, + 52.173149 + ], + [ + 5.432825, + 52.172962 + ] + ] + }, + "properties": { + "id": 3666236, + "linkIdReversed": 0, + "fromNodeId": 3873691, + "toNodeId": 596862, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666244, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427197, + 52.174379 + ], + [ + 5.427609, + 52.17474 + ] + ] + }, + "properties": { + "id": 3666244, + "linkIdReversed": 0, + "fromNodeId": 3873697, + "toNodeId": 596864, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666245, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432825, + 52.172962 + ], + [ + 5.433299, + 52.172748 + ] + ] + }, + "properties": { + "id": 3666245, + "linkIdReversed": 0, + "fromNodeId": 596862, + "toNodeId": 3873698, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.191 + } + }, + { + "type": "Feature", + "id": 3666242, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426373, + 52.173657 + ], + [ + 5.426785, + 52.174018 + ] + ] + }, + "properties": { + "id": 3666242, + "linkIdReversed": 0, + "fromNodeId": 3873695, + "toNodeId": 3873696, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666243, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426785, + 52.174018 + ], + [ + 5.427197, + 52.174379 + ] + ] + }, + "properties": { + "id": 3666243, + "linkIdReversed": 0, + "fromNodeId": 3873696, + "toNodeId": 3873697, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3667013, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423609, + 52.17878 + ], + [ + 5.423952, + 52.178426 + ] + ] + }, + "properties": { + "id": 3667013, + "linkIdReversed": 0, + "fromNodeId": 597011, + "toNodeId": 3874148, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667134, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427609, + 52.17474 + ], + [ + 5.427911, + 52.175013 + ] + ] + }, + "properties": { + "id": 3667134, + "linkIdReversed": 0, + "fromNodeId": 596864, + "toNodeId": 3874250, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 36.71 + } + }, + { + "type": "Feature", + "id": 3666943, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428893, + 52.176567 + ], + [ + 5.42866, + 52.176369 + ] + ] + }, + "properties": { + "id": 3666943, + "linkIdReversed": 0, + "fromNodeId": 596831, + "toNodeId": 3874089, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 27.238 + } + }, + { + "type": "Feature", + "id": 3666945, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427439, + 52.176617 + ], + [ + 5.427327, + 52.176769 + ], + [ + 5.42723, + 52.176865 + ], + [ + 5.427172, + 52.176952 + ], + [ + 5.427161, + 52.176984 + ] + ] + }, + "properties": { + "id": 3666945, + "linkIdReversed": 0, + "fromNodeId": 596833, + "toNodeId": 3874090, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666946, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427161, + 52.176984 + ], + [ + 5.427141, + 52.17704 + ], + [ + 5.427121, + 52.177132 + ], + [ + 5.427129, + 52.177223 + ], + [ + 5.42715, + 52.177307 + ], + [ + 5.427181, + 52.177376 + ], + [ + 5.427187, + 52.177384 + ] + ] + }, + "properties": { + "id": 3666946, + "linkIdReversed": 0, + "fromNodeId": 3874090, + "toNodeId": 3874091, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666950, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428841, + 52.177664 + ], + [ + 5.428947, + 52.177605 + ], + [ + 5.429062, + 52.177505 + ], + [ + 5.429166, + 52.177399 + ], + [ + 5.429198, + 52.17733 + ] + ] + }, + "properties": { + "id": 3666950, + "linkIdReversed": 0, + "fromNodeId": 3874094, + "toNodeId": 3874095, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666947, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427187, + 52.177384 + ], + [ + 5.427232, + 52.177437 + ], + [ + 5.427304, + 52.177521 + ], + [ + 5.427391, + 52.177582 + ], + [ + 5.427467, + 52.177624 + ], + [ + 5.427556, + 52.17767 + ], + [ + 5.427604, + 52.177691 + ] + ] + }, + "properties": { + "id": 3666947, + "linkIdReversed": 0, + "fromNodeId": 3874091, + "toNodeId": 3874092, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666948, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427604, + 52.177691 + ], + [ + 5.427657, + 52.177715 + ], + [ + 5.427782, + 52.177753 + ], + [ + 5.428007, + 52.177795 + ], + [ + 5.428181, + 52.177799 + ], + [ + 5.428227, + 52.177798 + ] + ] + }, + "properties": { + "id": 3666948, + "linkIdReversed": 0, + "fromNodeId": 3874092, + "toNodeId": 3874093, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666953, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428427, + 52.17617 + ], + [ + 5.428091, + 52.175875 + ] + ] + }, + "properties": { + "id": 3666953, + "linkIdReversed": 0, + "fromNodeId": 597005, + "toNodeId": 3874097, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.098 + } + }, + { + "type": "Feature", + "id": 3666949, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428227, + 52.177798 + ], + [ + 5.428348, + 52.177795 + ], + [ + 5.428487, + 52.177773 + ], + [ + 5.428694, + 52.177719 + ], + [ + 5.428826, + 52.177673 + ], + [ + 5.428841, + 52.177664 + ] + ] + }, + "properties": { + "id": 3666949, + "linkIdReversed": 0, + "fromNodeId": 3874093, + "toNodeId": 3874094, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666951, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429198, + 52.17733 + ], + [ + 5.429225, + 52.177269 + ], + [ + 5.42924, + 52.177147 + ], + [ + 5.429227, + 52.177032 + ], + [ + 5.429199, + 52.176933 + ], + [ + 5.429195, + 52.176928 + ] + ] + }, + "properties": { + "id": 3666951, + "linkIdReversed": 0, + "fromNodeId": 3874095, + "toNodeId": 3874096, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666956, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428755, + 52.175753 + ], + [ + 5.428317, + 52.176041 + ] + ] + }, + "properties": { + "id": 3666956, + "linkIdReversed": 0, + "fromNodeId": 3874098, + "toNodeId": 3874099, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666952, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429195, + 52.176928 + ], + [ + 5.429106, + 52.1768 + ], + [ + 5.428893, + 52.176567 + ] + ] + }, + "properties": { + "id": 3666952, + "linkIdReversed": 0, + "fromNodeId": 3874096, + "toNodeId": 596831, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666954, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428091, + 52.175875 + ], + [ + 5.427756, + 52.175579 + ] + ] + }, + "properties": { + "id": 3666954, + "linkIdReversed": 0, + "fromNodeId": 3874097, + "toNodeId": 596838, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.098 + } + }, + { + "type": "Feature", + "id": 3666959, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429265, + 52.176201 + ], + [ + 5.429654, + 52.176545 + ] + ] + }, + "properties": { + "id": 3666959, + "linkIdReversed": 0, + "fromNodeId": 597007, + "toNodeId": 3874101, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666955, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429194, + 52.175465 + ], + [ + 5.428755, + 52.175753 + ] + ] + }, + "properties": { + "id": 3666955, + "linkIdReversed": 0, + "fromNodeId": 597006, + "toNodeId": 3874098, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666957, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428317, + 52.176041 + ], + [ + 5.427878, + 52.176329 + ] + ] + }, + "properties": { + "id": 3666957, + "linkIdReversed": 0, + "fromNodeId": 3874099, + "toNodeId": 3874100, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666962, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430433, + 52.177232 + ], + [ + 5.430824, + 52.177575 + ] + ] + }, + "properties": { + "id": 3666962, + "linkIdReversed": 0, + "fromNodeId": 3874103, + "toNodeId": 3874104, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666958, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427878, + 52.176329 + ], + [ + 5.427439, + 52.176617 + ] + ] + }, + "properties": { + "id": 3666958, + "linkIdReversed": 0, + "fromNodeId": 3874100, + "toNodeId": 596833, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666960, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429654, + 52.176545 + ], + [ + 5.430043, + 52.176889 + ] + ] + }, + "properties": { + "id": 3666960, + "linkIdReversed": 0, + "fromNodeId": 3874101, + "toNodeId": 3874102, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666961, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430043, + 52.176889 + ], + [ + 5.430279, + 52.177097 + ], + [ + 5.430433, + 52.177232 + ] + ] + }, + "properties": { + "id": 3666961, + "linkIdReversed": 0, + "fromNodeId": 3874102, + "toNodeId": 3874103, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666966, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429265, + 52.176201 + ], + [ + 5.429613, + 52.176346 + ], + [ + 5.429734, + 52.176395 + ], + [ + 5.429861, + 52.176427 + ] + ] + }, + "properties": { + "id": 3666966, + "linkIdReversed": 0, + "fromNodeId": 597007, + "toNodeId": 3874107, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666967, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429861, + 52.176427 + ], + [ + 5.4299, + 52.176437 + ], + [ + 5.430044, + 52.176464 + ], + [ + 5.430235, + 52.176476 + ], + [ + 5.430438, + 52.176464 + ], + [ + 5.430548, + 52.176444 + ] + ] + }, + "properties": { + "id": 3666967, + "linkIdReversed": 0, + "fromNodeId": 3874107, + "toNodeId": 3874108, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666963, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430824, + 52.177575 + ], + [ + 5.431216, + 52.177918 + ] + ] + }, + "properties": { + "id": 3666963, + "linkIdReversed": 0, + "fromNodeId": 3874104, + "toNodeId": 3874105, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666964, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431216, + 52.177918 + ], + [ + 5.431607, + 52.178261 + ] + ] + }, + "properties": { + "id": 3666964, + "linkIdReversed": 0, + "fromNodeId": 3874105, + "toNodeId": 3874106, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666970, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431298, + 52.175788 + ], + [ + 5.431298, + 52.175716 + ], + [ + 5.431243, + 52.175579 + ], + [ + 5.431151, + 52.175453 + ], + [ + 5.431058, + 52.175395 + ] + ] + }, + "properties": { + "id": 3666970, + "linkIdReversed": 0, + "fromNodeId": 3874110, + "toNodeId": 3874111, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666971, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431058, + 52.175395 + ], + [ + 5.430968, + 52.175339 + ], + [ + 5.430759, + 52.175243 + ], + [ + 5.430482, + 52.175175 + ], + [ + 5.430466, + 52.175174 + ] + ] + }, + "properties": { + "id": 3666971, + "linkIdReversed": 0, + "fromNodeId": 3874111, + "toNodeId": 3874112, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666972, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430466, + 52.175174 + ], + [ + 5.430201, + 52.175163 + ], + [ + 5.429923, + 52.17519 + ], + [ + 5.42978, + 52.175228 + ] + ] + }, + "properties": { + "id": 3666972, + "linkIdReversed": 0, + "fromNodeId": 3874112, + "toNodeId": 3874113, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666965, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431607, + 52.178261 + ], + [ + 5.431998, + 52.178604 + ] + ] + }, + "properties": { + "id": 3666965, + "linkIdReversed": 0, + "fromNodeId": 3874106, + "toNodeId": 597008, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666968, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430548, + 52.176444 + ], + [ + 5.430564, + 52.176441 + ], + [ + 5.430718, + 52.176399 + ], + [ + 5.430852, + 52.17635 + ], + [ + 5.430956, + 52.176308 + ], + [ + 5.431067, + 52.176231 + ], + [ + 5.431104, + 52.176194 + ] + ] + }, + "properties": { + "id": 3666968, + "linkIdReversed": 0, + "fromNodeId": 3874108, + "toNodeId": 3874109, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666975, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433133, + 52.173317 + ], + [ + 5.43269, + 52.173648 + ] + ] + }, + "properties": { + "id": 3666975, + "linkIdReversed": 0, + "fromNodeId": 596870, + "toNodeId": 3874114, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666976, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43269, + 52.173648 + ], + [ + 5.432576, + 52.173733 + ], + [ + 5.432343, + 52.173916 + ], + [ + 5.432279, + 52.173993 + ] + ] + }, + "properties": { + "id": 3666976, + "linkIdReversed": 0, + "fromNodeId": 3874114, + "toNodeId": 3874115, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666977, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432279, + 52.173993 + ], + [ + 5.432025, + 52.174301 + ], + [ + 5.431992, + 52.174382 + ] + ] + }, + "properties": { + "id": 3666977, + "linkIdReversed": 0, + "fromNodeId": 3874115, + "toNodeId": 3874116, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666969, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431104, + 52.176194 + ], + [ + 5.431154, + 52.176144 + ], + [ + 5.431248, + 52.176025 + ], + [ + 5.431298, + 52.175888 + ], + [ + 5.431298, + 52.175788 + ] + ] + }, + "properties": { + "id": 3666969, + "linkIdReversed": 0, + "fromNodeId": 3874109, + "toNodeId": 3874110, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666973, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42978, + 52.175228 + ], + [ + 5.429733, + 52.17524 + ], + [ + 5.429437, + 52.175358 + ], + [ + 5.429194, + 52.175465 + ] + ] + }, + "properties": { + "id": 3666973, + "linkIdReversed": 0, + "fromNodeId": 3874113, + "toNodeId": 597006, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666980, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431755, + 52.175225 + ], + [ + 5.431699, + 52.175468 + ], + [ + 5.431674, + 52.175651 + ] + ] + }, + "properties": { + "id": 3666980, + "linkIdReversed": 0, + "fromNodeId": 3874118, + "toNodeId": 3874119, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666981, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431674, + 52.175651 + ], + [ + 5.431614, + 52.176078 + ] + ] + }, + "properties": { + "id": 3666981, + "linkIdReversed": 0, + "fromNodeId": 3874119, + "toNodeId": 3874120, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666974, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428897, + 52.175877 + ], + [ + 5.429265, + 52.176201 + ] + ] + }, + "properties": { + "id": 3666974, + "linkIdReversed": 0, + "fromNodeId": 597009, + "toNodeId": 597007, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.971 + } + }, + { + "type": "Feature", + "id": 3666978, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431992, + 52.174382 + ], + [ + 5.431855, + 52.174713 + ], + [ + 5.431839, + 52.174799 + ] + ] + }, + "properties": { + "id": 3666978, + "linkIdReversed": 0, + "fromNodeId": 3874116, + "toNodeId": 3874117, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666979, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431839, + 52.174799 + ], + [ + 5.431774, + 52.17514 + ], + [ + 5.431755, + 52.175225 + ] + ] + }, + "properties": { + "id": 3666979, + "linkIdReversed": 0, + "fromNodeId": 3874117, + "toNodeId": 3874118, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666985, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431527, + 52.177362 + ], + [ + 5.431572, + 52.177769 + ], + [ + 5.431579, + 52.17779 + ] + ] + }, + "properties": { + "id": 3666985, + "linkIdReversed": 0, + "fromNodeId": 3874123, + "toNodeId": 3874124, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666982, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431614, + 52.176078 + ], + [ + 5.431576, + 52.17635 + ], + [ + 5.431564, + 52.176505 + ] + ] + }, + "properties": { + "id": 3666982, + "linkIdReversed": 0, + "fromNodeId": 3874120, + "toNodeId": 3874121, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666983, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431564, + 52.176505 + ], + [ + 5.431532, + 52.176934 + ] + ] + }, + "properties": { + "id": 3666983, + "linkIdReversed": 0, + "fromNodeId": 3874121, + "toNodeId": 3874122, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666988, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431998, + 52.178604 + ], + [ + 5.432367, + 52.178929 + ] + ] + }, + "properties": { + "id": 3666988, + "linkIdReversed": 0, + "fromNodeId": 597008, + "toNodeId": 3874126, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666989, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432367, + 52.178929 + ], + [ + 5.432737, + 52.179253 + ] + ] + }, + "properties": { + "id": 3666989, + "linkIdReversed": 0, + "fromNodeId": 3874126, + "toNodeId": 3874127, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666984, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431532, + 52.176934 + ], + [ + 5.431525, + 52.177029 + ], + [ + 5.431526, + 52.177353 + ], + [ + 5.431527, + 52.177362 + ] + ] + }, + "properties": { + "id": 3666984, + "linkIdReversed": 0, + "fromNodeId": 3874122, + "toNodeId": 3874123, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666986, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431579, + 52.17779 + ], + [ + 5.431678, + 52.178078 + ], + [ + 5.431741, + 52.178206 + ] + ] + }, + "properties": { + "id": 3666986, + "linkIdReversed": 0, + "fromNodeId": 3874124, + "toNodeId": 3874125, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666987, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431741, + 52.178206 + ], + [ + 5.431812, + 52.178352 + ], + [ + 5.431998, + 52.178604 + ] + ] + }, + "properties": { + "id": 3666987, + "linkIdReversed": 0, + "fromNodeId": 3874125, + "toNodeId": 597008, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666990, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432737, + 52.179253 + ], + [ + 5.43284, + 52.179344 + ], + [ + 5.433105, + 52.179578 + ] + ] + }, + "properties": { + "id": 3666990, + "linkIdReversed": 0, + "fromNodeId": 3874127, + "toNodeId": 3874128, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666991, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433105, + 52.179578 + ], + [ + 5.433461, + 52.179893 + ], + [ + 5.433472, + 52.179903 + ] + ] + }, + "properties": { + "id": 3666991, + "linkIdReversed": 0, + "fromNodeId": 3874128, + "toNodeId": 3874129, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666997, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43262, + 52.173571 + ], + [ + 5.432107, + 52.173825 + ] + ] + }, + "properties": { + "id": 3666997, + "linkIdReversed": 0, + "fromNodeId": 3874133, + "toNodeId": 3874134, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667000, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431105, + 52.174351 + ], + [ + 5.43086, + 52.17448 + ], + [ + 5.430611, + 52.174619 + ] + ] + }, + "properties": { + "id": 3667000, + "linkIdReversed": 0, + "fromNodeId": 3874136, + "toNodeId": 3874137, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3666996, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433133, + 52.173317 + ], + [ + 5.43262, + 52.173571 + ] + ] + }, + "properties": { + "id": 3666996, + "linkIdReversed": 0, + "fromNodeId": 596870, + "toNodeId": 3874133, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3666998, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432107, + 52.173825 + ], + [ + 5.431993, + 52.173882 + ], + [ + 5.431605, + 52.174087 + ] + ] + }, + "properties": { + "id": 3666998, + "linkIdReversed": 0, + "fromNodeId": 3874134, + "toNodeId": 3874135, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3666999, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431605, + 52.174087 + ], + [ + 5.431105, + 52.174351 + ] + ] + }, + "properties": { + "id": 3666999, + "linkIdReversed": 0, + "fromNodeId": 3874135, + "toNodeId": 3874136, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667001, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430611, + 52.174619 + ], + [ + 5.430122, + 52.17489 + ] + ] + }, + "properties": { + "id": 3667001, + "linkIdReversed": 0, + "fromNodeId": 3874137, + "toNodeId": 3874138, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667005, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424063, + 52.178474 + ], + [ + 5.424496, + 52.178156 + ] + ] + }, + "properties": { + "id": 3667005, + "linkIdReversed": 0, + "fromNodeId": 3874140, + "toNodeId": 3874141, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667006, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424496, + 52.178156 + ], + [ + 5.424671, + 52.178028 + ], + [ + 5.424924, + 52.177836 + ] + ] + }, + "properties": { + "id": 3667006, + "linkIdReversed": 0, + "fromNodeId": 3874141, + "toNodeId": 3874142, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667002, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430122, + 52.17489 + ], + [ + 5.42998, + 52.174969 + ], + [ + 5.429654, + 52.175175 + ] + ] + }, + "properties": { + "id": 3667002, + "linkIdReversed": 0, + "fromNodeId": 3874138, + "toNodeId": 3874139, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667003, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429654, + 52.175175 + ], + [ + 5.429194, + 52.175465 + ] + ] + }, + "properties": { + "id": 3667003, + "linkIdReversed": 0, + "fromNodeId": 3874139, + "toNodeId": 597006, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667009, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42578, + 52.177195 + ], + [ + 5.426212, + 52.176877 + ] + ] + }, + "properties": { + "id": 3667009, + "linkIdReversed": 0, + "fromNodeId": 3874144, + "toNodeId": 3874145, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667010, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426212, + 52.176877 + ], + [ + 5.426514, + 52.176655 + ], + [ + 5.426648, + 52.176562 + ] + ] + }, + "properties": { + "id": 3667010, + "linkIdReversed": 0, + "fromNodeId": 3874145, + "toNodeId": 3874146, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667004, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423609, + 52.17878 + ], + [ + 5.423953, + 52.178555 + ], + [ + 5.424063, + 52.178474 + ] + ] + }, + "properties": { + "id": 3667004, + "linkIdReversed": 0, + "fromNodeId": 597011, + "toNodeId": 3874140, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667007, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424924, + 52.177836 + ], + [ + 5.425349, + 52.177514 + ] + ] + }, + "properties": { + "id": 3667007, + "linkIdReversed": 0, + "fromNodeId": 3874142, + "toNodeId": 3874143, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667008, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425349, + 52.177514 + ], + [ + 5.425446, + 52.177441 + ], + [ + 5.42578, + 52.177195 + ] + ] + }, + "properties": { + "id": 3667008, + "linkIdReversed": 0, + "fromNodeId": 3874143, + "toNodeId": 3874144, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667014, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423952, + 52.178426 + ], + [ + 5.42422, + 52.17815 + ], + [ + 5.424268, + 52.178064 + ] + ] + }, + "properties": { + "id": 3667014, + "linkIdReversed": 0, + "fromNodeId": 3874148, + "toNodeId": 3874149, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667011, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426648, + 52.176562 + ], + [ + 5.427095, + 52.176251 + ] + ] + }, + "properties": { + "id": 3667011, + "linkIdReversed": 0, + "fromNodeId": 3874146, + "toNodeId": 3874147, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667012, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427095, + 52.176251 + ], + [ + 5.427542, + 52.175941 + ] + ] + }, + "properties": { + "id": 3667012, + "linkIdReversed": 0, + "fromNodeId": 3874147, + "toNodeId": 596837, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667015, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424268, + 52.178064 + ], + [ + 5.42441, + 52.177811 + ], + [ + 5.424465, + 52.17767 + ] + ] + }, + "properties": { + "id": 3667015, + "linkIdReversed": 0, + "fromNodeId": 3874149, + "toNodeId": 3874150, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667020, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421906, + 52.179994 + ], + [ + 5.422327, + 52.179688 + ] + ] + }, + "properties": { + "id": 3667020, + "linkIdReversed": 0, + "fromNodeId": 3874153, + "toNodeId": 3874154, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667021, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422327, + 52.179688 + ], + [ + 5.422725, + 52.179398 + ], + [ + 5.422748, + 52.179382 + ] + ] + }, + "properties": { + "id": 3667021, + "linkIdReversed": 0, + "fromNodeId": 3874154, + "toNodeId": 3874155, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667016, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424465, + 52.17767 + ], + [ + 5.42462, + 52.177269 + ] + ] + }, + "properties": { + "id": 3667016, + "linkIdReversed": 0, + "fromNodeId": 3874150, + "toNodeId": 597012, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667024, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427542, + 52.175941 + ], + [ + 5.427981, + 52.175668 + ] + ] + }, + "properties": { + "id": 3667024, + "linkIdReversed": 0, + "fromNodeId": 596837, + "toNodeId": 3874157, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667025, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427981, + 52.175668 + ], + [ + 5.428419, + 52.175394 + ] + ] + }, + "properties": { + "id": 3667025, + "linkIdReversed": 0, + "fromNodeId": 3874157, + "toNodeId": 3874158, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667027, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428858, + 52.175121 + ], + [ + 5.429296, + 52.174847 + ] + ] + }, + "properties": { + "id": 3667027, + "linkIdReversed": 0, + "fromNodeId": 3874159, + "toNodeId": 597014, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667022, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422748, + 52.179382 + ], + [ + 5.423178, + 52.179081 + ] + ] + }, + "properties": { + "id": 3667022, + "linkIdReversed": 0, + "fromNodeId": 3874155, + "toNodeId": 3874156, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667023, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423178, + 52.179081 + ], + [ + 5.423609, + 52.17878 + ] + ] + }, + "properties": { + "id": 3667023, + "linkIdReversed": 0, + "fromNodeId": 3874156, + "toNodeId": 597011, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667034, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421688, + 52.180337 + ], + [ + 5.42216, + 52.179998 + ] + ] + }, + "properties": { + "id": 3667034, + "linkIdReversed": 0, + "fromNodeId": 3874165, + "toNodeId": 3874166, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667035, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42216, + 52.179998 + ], + [ + 5.422633, + 52.17966 + ] + ] + }, + "properties": { + "id": 3667035, + "linkIdReversed": 0, + "fromNodeId": 3874166, + "toNodeId": 3874167, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667036, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422633, + 52.17966 + ], + [ + 5.423105, + 52.179322 + ] + ] + }, + "properties": { + "id": 3667036, + "linkIdReversed": 0, + "fromNodeId": 3874167, + "toNodeId": 3874168, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667037, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423105, + 52.179322 + ], + [ + 5.423266, + 52.179207 + ], + [ + 5.423577, + 52.178984 + ] + ] + }, + "properties": { + "id": 3667037, + "linkIdReversed": 0, + "fromNodeId": 3874168, + "toNodeId": 3874169, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667038, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423577, + 52.178984 + ], + [ + 5.424049, + 52.178645 + ] + ] + }, + "properties": { + "id": 3667038, + "linkIdReversed": 0, + "fromNodeId": 3874169, + "toNodeId": 3874170, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667026, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428419, + 52.175394 + ], + [ + 5.428858, + 52.175121 + ] + ] + }, + "properties": { + "id": 3667026, + "linkIdReversed": 0, + "fromNodeId": 3874158, + "toNodeId": 3874159, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667041, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424993, + 52.177968 + ], + [ + 5.425465, + 52.17763 + ] + ] + }, + "properties": { + "id": 3667041, + "linkIdReversed": 0, + "fromNodeId": 3874172, + "toNodeId": 3874173, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667039, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424049, + 52.178645 + ], + [ + 5.424521, + 52.178307 + ] + ] + }, + "properties": { + "id": 3667039, + "linkIdReversed": 0, + "fromNodeId": 3874170, + "toNodeId": 3874171, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667044, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426408, + 52.176953 + ], + [ + 5.426759, + 52.176701 + ], + [ + 5.426884, + 52.176616 + ] + ] + }, + "properties": { + "id": 3667044, + "linkIdReversed": 0, + "fromNodeId": 3874175, + "toNodeId": 3874176, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667045, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426884, + 52.176616 + ], + [ + 5.427371, + 52.176286 + ] + ] + }, + "properties": { + "id": 3667045, + "linkIdReversed": 0, + "fromNodeId": 3874176, + "toNodeId": 3874177, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667046, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427371, + 52.176286 + ], + [ + 5.42784, + 52.175968 + ], + [ + 5.427859, + 52.175956 + ] + ] + }, + "properties": { + "id": 3667046, + "linkIdReversed": 0, + "fromNodeId": 3874177, + "toNodeId": 3874178, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667040, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424521, + 52.178307 + ], + [ + 5.424993, + 52.177968 + ] + ] + }, + "properties": { + "id": 3667040, + "linkIdReversed": 0, + "fromNodeId": 3874171, + "toNodeId": 3874172, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667042, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425465, + 52.17763 + ], + [ + 5.425936, + 52.177291 + ] + ] + }, + "properties": { + "id": 3667042, + "linkIdReversed": 0, + "fromNodeId": 3874173, + "toNodeId": 3874174, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667049, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428867, + 52.175315 + ], + [ + 5.429382, + 52.175002 + ] + ] + }, + "properties": { + "id": 3667049, + "linkIdReversed": 0, + "fromNodeId": 3874180, + "toNodeId": 3874181, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667043, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425936, + 52.177291 + ], + [ + 5.426408, + 52.176953 + ] + ] + }, + "properties": { + "id": 3667043, + "linkIdReversed": 0, + "fromNodeId": 3874174, + "toNodeId": 3874175, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667051, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429909, + 52.174696 + ], + [ + 5.430446, + 52.174396 + ] + ] + }, + "properties": { + "id": 3667051, + "linkIdReversed": 0, + "fromNodeId": 3874182, + "toNodeId": 3874183, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667047, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427859, + 52.175956 + ], + [ + 5.428362, + 52.175635 + ] + ] + }, + "properties": { + "id": 3667047, + "linkIdReversed": 0, + "fromNodeId": 3874178, + "toNodeId": 3874179, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667048, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428362, + 52.175635 + ], + [ + 5.42879, + 52.175362 + ], + [ + 5.428867, + 52.175315 + ] + ] + }, + "properties": { + "id": 3667048, + "linkIdReversed": 0, + "fromNodeId": 3874179, + "toNodeId": 3874180, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667054, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431528, + 52.173803 + ], + [ + 5.432072, + 52.173508 + ] + ] + }, + "properties": { + "id": 3667054, + "linkIdReversed": 0, + "fromNodeId": 3874185, + "toNodeId": 597016, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667050, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429382, + 52.175002 + ], + [ + 5.429625, + 52.174854 + ], + [ + 5.429909, + 52.174696 + ] + ] + }, + "properties": { + "id": 3667050, + "linkIdReversed": 0, + "fromNodeId": 3874181, + "toNodeId": 3874182, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667052, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430446, + 52.174396 + ], + [ + 5.430895, + 52.174145 + ], + [ + 5.430984, + 52.174097 + ] + ] + }, + "properties": { + "id": 3667052, + "linkIdReversed": 0, + "fromNodeId": 3874183, + "toNodeId": 3874184, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667053, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430984, + 52.174097 + ], + [ + 5.431528, + 52.173803 + ] + ] + }, + "properties": { + "id": 3667053, + "linkIdReversed": 0, + "fromNodeId": 3874184, + "toNodeId": 3874185, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667060, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432072, + 52.173508 + ], + [ + 5.432588, + 52.173256 + ] + ] + }, + "properties": { + "id": 3667060, + "linkIdReversed": 0, + "fromNodeId": 597016, + "toNodeId": 3874189, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.102 + } + }, + { + "type": "Feature", + "id": 3667061, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432588, + 52.173256 + ], + [ + 5.432932, + 52.173088 + ], + [ + 5.433107, + 52.173006 + ] + ] + }, + "properties": { + "id": 3667061, + "linkIdReversed": 0, + "fromNodeId": 3874189, + "toNodeId": 3874190, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.102 + } + }, + { + "type": "Feature", + "id": 3667062, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433107, + 52.173006 + ], + [ + 5.433631, + 52.17276 + ] + ] + }, + "properties": { + "id": 3667062, + "linkIdReversed": 0, + "fromNodeId": 3874190, + "toNodeId": 3874191, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.102 + } + }, + { + "type": "Feature", + "id": 3667067, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431265, + 52.173805 + ], + [ + 5.431642, + 52.173628 + ] + ] + }, + "properties": { + "id": 3667067, + "linkIdReversed": 0, + "fromNodeId": 597020, + "toNodeId": 3874195, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 32.463 + } + }, + { + "type": "Feature", + "id": 3667071, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429147, + 52.176331 + ], + [ + 5.429554, + 52.176691 + ] + ] + }, + "properties": { + "id": 3667071, + "linkIdReversed": 0, + "fromNodeId": 3874196, + "toNodeId": 3874197, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667068, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431642, + 52.173628 + ], + [ + 5.431703, + 52.173599 + ], + [ + 5.432072, + 52.173508 + ] + ] + }, + "properties": { + "id": 3667068, + "linkIdReversed": 0, + "fromNodeId": 3874195, + "toNodeId": 597016, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 32.463 + } + }, + { + "type": "Feature", + "id": 3667070, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42874, + 52.175972 + ], + [ + 5.429147, + 52.176331 + ] + ] + }, + "properties": { + "id": 3667070, + "linkIdReversed": 0, + "fromNodeId": 596859, + "toNodeId": 3874196, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667075, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430781, + 52.177766 + ], + [ + 5.431193, + 52.178124 + ] + ] + }, + "properties": { + "id": 3667075, + "linkIdReversed": 0, + "fromNodeId": 3874200, + "toNodeId": 3874201, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667076, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431193, + 52.178124 + ], + [ + 5.431604, + 52.178481 + ] + ] + }, + "properties": { + "id": 3667076, + "linkIdReversed": 0, + "fromNodeId": 3874201, + "toNodeId": 3874202, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667077, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431604, + 52.178481 + ], + [ + 5.432016, + 52.178839 + ] + ] + }, + "properties": { + "id": 3667077, + "linkIdReversed": 0, + "fromNodeId": 3874202, + "toNodeId": 3874203, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667072, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429554, + 52.176691 + ], + [ + 5.429961, + 52.17705 + ] + ] + }, + "properties": { + "id": 3667072, + "linkIdReversed": 0, + "fromNodeId": 3874197, + "toNodeId": 3874198, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667079, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432427, + 52.179196 + ], + [ + 5.432838, + 52.179553 + ] + ] + }, + "properties": { + "id": 3667079, + "linkIdReversed": 0, + "fromNodeId": 3874204, + "toNodeId": 3874205, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667073, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429961, + 52.17705 + ], + [ + 5.430139, + 52.177208 + ], + [ + 5.43037, + 52.177409 + ] + ] + }, + "properties": { + "id": 3667073, + "linkIdReversed": 0, + "fromNodeId": 3874198, + "toNodeId": 3874199, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667078, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432016, + 52.178839 + ], + [ + 5.432427, + 52.179196 + ] + ] + }, + "properties": { + "id": 3667078, + "linkIdReversed": 0, + "fromNodeId": 3874203, + "toNodeId": 3874204, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667080, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432838, + 52.179553 + ], + [ + 5.43325, + 52.179911 + ] + ] + }, + "properties": { + "id": 3667080, + "linkIdReversed": 0, + "fromNodeId": 3874205, + "toNodeId": 3874206, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667074, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43037, + 52.177409 + ], + [ + 5.430781, + 52.177766 + ] + ] + }, + "properties": { + "id": 3667074, + "linkIdReversed": 0, + "fromNodeId": 3874199, + "toNodeId": 3874200, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667081, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43325, + 52.179911 + ], + [ + 5.433661, + 52.180268 + ] + ] + }, + "properties": { + "id": 3667081, + "linkIdReversed": 0, + "fromNodeId": 3874206, + "toNodeId": 3874207, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667121, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429482, + 52.174024 + ], + [ + 5.429452, + 52.173988 + ], + [ + 5.429347, + 52.173901 + ], + [ + 5.429214, + 52.173817 + ], + [ + 5.429055, + 52.173752 + ], + [ + 5.42898, + 52.173731 + ] + ] + }, + "properties": { + "id": 3667121, + "linkIdReversed": 0, + "fromNodeId": 3874239, + "toNodeId": 3874240, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667119, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429296, + 52.174847 + ], + [ + 5.429416, + 52.174686 + ], + [ + 5.429527, + 52.174538 + ], + [ + 5.429559, + 52.174446 + ] + ] + }, + "properties": { + "id": 3667119, + "linkIdReversed": 0, + "fromNodeId": 597014, + "toNodeId": 3874238, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667124, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42771, + 52.173918 + ], + [ + 5.427675, + 52.173943 + ], + [ + 5.427555, + 52.174061 + ], + [ + 5.427491, + 52.174183 + ], + [ + 5.427475, + 52.174274 + ], + [ + 5.427475, + 52.174316 + ] + ] + }, + "properties": { + "id": 3667124, + "linkIdReversed": 0, + "fromNodeId": 3874242, + "toNodeId": 3874243, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667125, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427475, + 52.174316 + ], + [ + 5.427474, + 52.17437 + ], + [ + 5.427494, + 52.174442 + ], + [ + 5.427509, + 52.174507 + ], + [ + 5.427609, + 52.17474 + ] + ] + }, + "properties": { + "id": 3667125, + "linkIdReversed": 0, + "fromNodeId": 3874243, + "toNodeId": 596864, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667120, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429559, + 52.174446 + ], + [ + 5.429575, + 52.1744 + ], + [ + 5.429591, + 52.174274 + ], + [ + 5.42958, + 52.174206 + ], + [ + 5.42955, + 52.174141 + ], + [ + 5.429506, + 52.174053 + ], + [ + 5.429482, + 52.174024 + ] + ] + }, + "properties": { + "id": 3667120, + "linkIdReversed": 0, + "fromNodeId": 3874238, + "toNodeId": 3874239, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667122, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42898, + 52.173731 + ], + [ + 5.428873, + 52.173702 + ], + [ + 5.428669, + 52.173676 + ], + [ + 5.428507, + 52.173672 + ], + [ + 5.428346, + 52.173679 + ], + [ + 5.428292, + 52.173688 + ] + ] + }, + "properties": { + "id": 3667122, + "linkIdReversed": 0, + "fromNodeId": 3874240, + "toNodeId": 3874241, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667128, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430281, + 52.174327 + ], + [ + 5.430482, + 52.174225 + ], + [ + 5.430775, + 52.174068 + ] + ] + }, + "properties": { + "id": 3667128, + "linkIdReversed": 0, + "fromNodeId": 3874245, + "toNodeId": 3874246, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667129, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430775, + 52.174068 + ], + [ + 5.431265, + 52.173805 + ] + ] + }, + "properties": { + "id": 3667129, + "linkIdReversed": 0, + "fromNodeId": 3874246, + "toNodeId": 597020, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667130, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430015, + 52.17728 + ], + [ + 5.429664, + 52.176974 + ] + ] + }, + "properties": { + "id": 3667130, + "linkIdReversed": 0, + "fromNodeId": 597029, + "toNodeId": 3874247, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667131, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429664, + 52.176974 + ], + [ + 5.429312, + 52.176668 + ] + ] + }, + "properties": { + "id": 3667131, + "linkIdReversed": 0, + "fromNodeId": 3874247, + "toNodeId": 3874248, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667123, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428292, + 52.173688 + ], + [ + 5.42819, + 52.173706 + ], + [ + 5.428039, + 52.17374 + ], + [ + 5.427924, + 52.173794 + ], + [ + 5.427783, + 52.173866 + ], + [ + 5.42771, + 52.173918 + ] + ] + }, + "properties": { + "id": 3667123, + "linkIdReversed": 0, + "fromNodeId": 3874241, + "toNodeId": 3874242, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667126, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429296, + 52.174847 + ], + [ + 5.429658, + 52.174641 + ], + [ + 5.429779, + 52.17458 + ] + ] + }, + "properties": { + "id": 3667126, + "linkIdReversed": 0, + "fromNodeId": 597014, + "toNodeId": 3874244, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667135, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427911, + 52.175013 + ], + [ + 5.428214, + 52.175285 + ] + ] + }, + "properties": { + "id": 3667135, + "linkIdReversed": 0, + "fromNodeId": 3874250, + "toNodeId": 597030, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 36.71 + } + }, + { + "type": "Feature", + "id": 3667136, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428214, + 52.175285 + ], + [ + 5.428555, + 52.175581 + ] + ] + }, + "properties": { + "id": 3667136, + "linkIdReversed": 0, + "fromNodeId": 597030, + "toNodeId": 3874251, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.38 + } + }, + { + "type": "Feature", + "id": 3667137, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428555, + 52.175581 + ], + [ + 5.428897, + 52.175877 + ] + ] + }, + "properties": { + "id": 3667137, + "linkIdReversed": 0, + "fromNodeId": 3874251, + "toNodeId": 597009, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.38 + } + }, + { + "type": "Feature", + "id": 3667127, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429779, + 52.17458 + ], + [ + 5.430281, + 52.174327 + ] + ] + }, + "properties": { + "id": 3667127, + "linkIdReversed": 0, + "fromNodeId": 3874244, + "toNodeId": 3874245, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667132, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429312, + 52.176668 + ], + [ + 5.428961, + 52.176362 + ] + ] + }, + "properties": { + "id": 3667132, + "linkIdReversed": 0, + "fromNodeId": 3874248, + "toNodeId": 3874249, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667133, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428961, + 52.176362 + ], + [ + 5.42861, + 52.176056 + ] + ] + }, + "properties": { + "id": 3667133, + "linkIdReversed": 0, + "fromNodeId": 3874249, + "toNodeId": 596855, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3669263, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433525, + 52.172981 + ], + [ + 5.433012, + 52.173222 + ], + [ + 5.43295, + 52.173251 + ] + ] + }, + "properties": { + "id": 3669263, + "linkIdReversed": 0, + "fromNodeId": 3875465, + "toNodeId": 3875466, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669264, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43295, + 52.173251 + ], + [ + 5.432378, + 52.173524 + ] + ] + }, + "properties": { + "id": 3669264, + "linkIdReversed": 0, + "fromNodeId": 3875466, + "toNodeId": 3875467, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669265, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432378, + 52.173524 + ], + [ + 5.431947, + 52.173729 + ], + [ + 5.431813, + 52.173802 + ] + ] + }, + "properties": { + "id": 3669265, + "linkIdReversed": 0, + "fromNodeId": 3875467, + "toNodeId": 3875468, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669266, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431813, + 52.173802 + ], + [ + 5.43127, + 52.174096 + ] + ] + }, + "properties": { + "id": 3669266, + "linkIdReversed": 0, + "fromNodeId": 3875468, + "toNodeId": 3875469, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669267, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43127, + 52.174096 + ], + [ + 5.430961, + 52.174263 + ], + [ + 5.43073, + 52.174391 + ] + ] + }, + "properties": { + "id": 3669267, + "linkIdReversed": 0, + "fromNodeId": 3875469, + "toNodeId": 3875470, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669268, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43073, + 52.174391 + ], + [ + 5.430192, + 52.174689 + ] + ] + }, + "properties": { + "id": 3669268, + "linkIdReversed": 0, + "fromNodeId": 3875470, + "toNodeId": 3875471, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669269, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430192, + 52.174689 + ], + [ + 5.429709, + 52.174957 + ], + [ + 5.429657, + 52.174988 + ] + ] + }, + "properties": { + "id": 3669269, + "linkIdReversed": 0, + "fromNodeId": 3875471, + "toNodeId": 3875472, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669270, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429657, + 52.174988 + ], + [ + 5.429139, + 52.175299 + ] + ] + }, + "properties": { + "id": 3669270, + "linkIdReversed": 0, + "fromNodeId": 3875472, + "toNodeId": 3875473, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669271, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429139, + 52.175299 + ], + [ + 5.42885, + 52.175472 + ], + [ + 5.428626, + 52.175613 + ] + ] + }, + "properties": { + "id": 3669271, + "linkIdReversed": 0, + "fromNodeId": 3875473, + "toNodeId": 3875474, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669272, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428626, + 52.175613 + ], + [ + 5.428121, + 52.175932 + ] + ] + }, + "properties": { + "id": 3669272, + "linkIdReversed": 0, + "fromNodeId": 3875474, + "toNodeId": 3875475, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669273, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428121, + 52.175932 + ], + [ + 5.427924, + 52.176056 + ], + [ + 5.427628, + 52.176257 + ] + ] + }, + "properties": { + "id": 3669273, + "linkIdReversed": 0, + "fromNodeId": 3875475, + "toNodeId": 3875476, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669274, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427628, + 52.176257 + ], + [ + 5.427143, + 52.176587 + ] + ] + }, + "properties": { + "id": 3669274, + "linkIdReversed": 0, + "fromNodeId": 3875476, + "toNodeId": 3875477, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669275, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427143, + 52.176587 + ], + [ + 5.426919, + 52.176739 + ], + [ + 5.426665, + 52.176921 + ] + ] + }, + "properties": { + "id": 3669275, + "linkIdReversed": 0, + "fromNodeId": 3875477, + "toNodeId": 3875478, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669276, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426665, + 52.176921 + ], + [ + 5.426194, + 52.177259 + ] + ] + }, + "properties": { + "id": 3669276, + "linkIdReversed": 0, + "fromNodeId": 3875478, + "toNodeId": 3875479, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669277, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426194, + 52.177259 + ], + [ + 5.425723, + 52.177597 + ] + ] + }, + "properties": { + "id": 3669277, + "linkIdReversed": 0, + "fromNodeId": 3875479, + "toNodeId": 3875480, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669278, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425723, + 52.177597 + ], + [ + 5.425252, + 52.177934 + ] + ] + }, + "properties": { + "id": 3669278, + "linkIdReversed": 0, + "fromNodeId": 3875480, + "toNodeId": 3875481, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669279, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425252, + 52.177934 + ], + [ + 5.424781, + 52.178272 + ] + ] + }, + "properties": { + "id": 3669279, + "linkIdReversed": 0, + "fromNodeId": 3875481, + "toNodeId": 3875482, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669280, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424781, + 52.178272 + ], + [ + 5.42431, + 52.17861 + ] + ] + }, + "properties": { + "id": 3669280, + "linkIdReversed": 0, + "fromNodeId": 3875482, + "toNodeId": 3875483, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669281, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42431, + 52.17861 + ], + [ + 5.423839, + 52.178948 + ] + ] + }, + "properties": { + "id": 3669281, + "linkIdReversed": 0, + "fromNodeId": 3875483, + "toNodeId": 3875484, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669282, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423839, + 52.178948 + ], + [ + 5.423381, + 52.179276 + ], + [ + 5.423368, + 52.179285 + ] + ] + }, + "properties": { + "id": 3669282, + "linkIdReversed": 0, + "fromNodeId": 3875484, + "toNodeId": 3875485, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669283, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423368, + 52.179285 + ], + [ + 5.422898, + 52.179624 + ] + ] + }, + "properties": { + "id": 3669283, + "linkIdReversed": 0, + "fromNodeId": 3875485, + "toNodeId": 3875486, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669284, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422898, + 52.179624 + ], + [ + 5.422429, + 52.179962 + ] + ] + }, + "properties": { + "id": 3669284, + "linkIdReversed": 0, + "fromNodeId": 3875486, + "toNodeId": 3875487, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669285, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422429, + 52.179962 + ], + [ + 5.421959, + 52.180301 + ] + ] + }, + "properties": { + "id": 3669285, + "linkIdReversed": 0, + "fromNodeId": 3875487, + "toNodeId": 3875488, + "speedInKilometersPerHour": 120.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3675765, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42481, + 52.172878 + ], + [ + 5.424593, + 52.1726 + ], + [ + 5.424523, + 52.172503 + ] + ] + }, + "properties": { + "id": 3675765, + "linkIdReversed": 0, + "fromNodeId": 599091, + "toNodeId": 3878366, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.103 + } + }, + { + "type": "Feature", + "id": 3675766, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424523, + 52.172503 + ], + [ + 5.424343, + 52.172253 + ], + [ + 5.424255, + 52.172123 + ] + ] + }, + "properties": { + "id": 3675766, + "linkIdReversed": 0, + "fromNodeId": 3878366, + "toNodeId": 3878367, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.103 + } + }, + { + "type": "Feature", + "id": 3675773, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425323, + 52.173673 + ], + [ + 5.425224, + 52.173466 + ], + [ + 5.425101, + 52.173267 + ] + ] + }, + "properties": { + "id": 3675773, + "linkIdReversed": 0, + "fromNodeId": 3878372, + "toNodeId": 3878373, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3675774, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425101, + 52.173267 + ], + [ + 5.425051, + 52.173187 + ], + [ + 5.42481, + 52.172878 + ] + ] + }, + "properties": { + "id": 3675774, + "linkIdReversed": 0, + "fromNodeId": 3878373, + "toNodeId": 599091, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3675771, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425338, + 52.174526 + ], + [ + 5.425378, + 52.174103 + ], + [ + 5.425378, + 52.174098 + ] + ] + }, + "properties": { + "id": 3675771, + "linkIdReversed": 0, + "fromNodeId": 599093, + "toNodeId": 3878371, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3675772, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425378, + 52.174098 + ], + [ + 5.425385, + 52.173904 + ], + [ + 5.425326, + 52.173679 + ], + [ + 5.425323, + 52.173673 + ] + ] + }, + "properties": { + "id": 3675772, + "linkIdReversed": 0, + "fromNodeId": 3878371, + "toNodeId": 3878372, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3684607, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42206, + 52.175152 + ], + [ + 5.422059, + 52.175592 + ] + ] + }, + "properties": { + "id": 3684607, + "linkIdReversed": 0, + "fromNodeId": 601546, + "toNodeId": 3882053, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684608, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422059, + 52.175592 + ], + [ + 5.422059, + 52.175766 + ], + [ + 5.42206, + 52.176032 + ] + ] + }, + "properties": { + "id": 3684608, + "linkIdReversed": 0, + "fromNodeId": 3882053, + "toNodeId": 3882054, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684609, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42206, + 52.176032 + ], + [ + 5.422062, + 52.176373 + ], + [ + 5.422056, + 52.176472 + ] + ] + }, + "properties": { + "id": 3684609, + "linkIdReversed": 0, + "fromNodeId": 3882054, + "toNodeId": 3882055, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684614, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422056, + 52.176472 + ], + [ + 5.422062, + 52.176373 + ], + [ + 5.42206, + 52.176032 + ] + ] + }, + "properties": { + "id": 3684614, + "linkIdReversed": 0, + "fromNodeId": 3882058, + "toNodeId": 3882059, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684615, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42206, + 52.176032 + ], + [ + 5.422059, + 52.175766 + ], + [ + 5.422059, + 52.175592 + ] + ] + }, + "properties": { + "id": 3684615, + "linkIdReversed": 0, + "fromNodeId": 3882059, + "toNodeId": 3882060, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684616, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422059, + 52.175592 + ], + [ + 5.42206, + 52.175152 + ] + ] + }, + "properties": { + "id": 3684616, + "linkIdReversed": 0, + "fromNodeId": 3882060, + "toNodeId": 601546, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684909, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421854, + 52.173817 + ], + [ + 5.421967, + 52.173874 + ], + [ + 5.422039, + 52.173943 + ], + [ + 5.422042, + 52.174116 + ] + ] + }, + "properties": { + "id": 3684909, + "linkIdReversed": 0, + "fromNodeId": 601607, + "toNodeId": 3882193, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684910, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422042, + 52.174116 + ], + [ + 5.422045, + 52.174305 + ], + [ + 5.422048, + 52.174462 + ] + ] + }, + "properties": { + "id": 3684910, + "linkIdReversed": 0, + "fromNodeId": 3882193, + "toNodeId": 3882194, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684913, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42206, + 52.175152 + ], + [ + 5.422054, + 52.174807 + ] + ] + }, + "properties": { + "id": 3684913, + "linkIdReversed": 0, + "fromNodeId": 601546, + "toNodeId": 3882196, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684914, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422054, + 52.174807 + ], + [ + 5.422048, + 52.174462 + ] + ] + }, + "properties": { + "id": 3684914, + "linkIdReversed": 0, + "fromNodeId": 3882196, + "toNodeId": 3882197, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684915, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422048, + 52.174462 + ], + [ + 5.422045, + 52.174305 + ], + [ + 5.422042, + 52.174116 + ] + ] + }, + "properties": { + "id": 3684915, + "linkIdReversed": 0, + "fromNodeId": 3882197, + "toNodeId": 3882198, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684916, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422042, + 52.174116 + ], + [ + 5.422039, + 52.173943 + ], + [ + 5.421967, + 52.173874 + ], + [ + 5.421854, + 52.173817 + ] + ] + }, + "properties": { + "id": 3684916, + "linkIdReversed": 0, + "fromNodeId": 3882198, + "toNodeId": 601607, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684921, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421867, + 52.173466 + ], + [ + 5.421854, + 52.173817 + ] + ] + }, + "properties": { + "id": 3684921, + "linkIdReversed": 0, + "fromNodeId": 601609, + "toNodeId": 601607, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 39.066 + } + }, + { + "type": "Feature", + "id": 3684922, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421854, + 52.173817 + ], + [ + 5.421867, + 52.173466 + ] + ] + }, + "properties": { + "id": 3684922, + "linkIdReversed": 0, + "fromNodeId": 601607, + "toNodeId": 601609, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 39.066 + } + }, + { + "type": "Feature", + "id": 3684911, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422048, + 52.174462 + ], + [ + 5.422054, + 52.174807 + ] + ] + }, + "properties": { + "id": 3684911, + "linkIdReversed": 0, + "fromNodeId": 3882194, + "toNodeId": 3882195, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684912, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422054, + 52.174807 + ], + [ + 5.42206, + 52.175152 + ] + ] + }, + "properties": { + "id": 3684912, + "linkIdReversed": 0, + "fromNodeId": 3882195, + "toNodeId": 601546, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3685165, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421873, + 52.172724 + ], + [ + 5.42187, + 52.173095 + ] + ] + }, + "properties": { + "id": 3685165, + "linkIdReversed": 0, + "fromNodeId": 3882328, + "toNodeId": 3882329, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.26 + } + }, + { + "type": "Feature", + "id": 3685166, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42187, + 52.173095 + ], + [ + 5.421867, + 52.173466 + ] + ] + }, + "properties": { + "id": 3685166, + "linkIdReversed": 0, + "fromNodeId": 3882329, + "toNodeId": 601609, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.26 + } + }, + { + "type": "Feature", + "id": 3685167, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421867, + 52.173466 + ], + [ + 5.42187, + 52.173095 + ] + ] + }, + "properties": { + "id": 3685167, + "linkIdReversed": 0, + "fromNodeId": 601609, + "toNodeId": 3882330, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.26 + } + }, + { + "type": "Feature", + "id": 3685168, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42187, + 52.173095 + ], + [ + 5.421873, + 52.172724 + ] + ] + }, + "properties": { + "id": 3685168, + "linkIdReversed": 0, + "fromNodeId": 3882330, + "toNodeId": 3882331, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.26 + } + }, + { + "type": "Feature", + "id": 3686220, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42462, + 52.177269 + ], + [ + 5.424733, + 52.176878 + ] + ] + }, + "properties": { + "id": 3686220, + "linkIdReversed": 0, + "fromNodeId": 597012, + "toNodeId": 3882838, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686221, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424733, + 52.176878 + ], + [ + 5.424845, + 52.176487 + ] + ] + }, + "properties": { + "id": 3686221, + "linkIdReversed": 0, + "fromNodeId": 3882838, + "toNodeId": 3882839, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686216, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42252, + 52.18013 + ], + [ + 5.42204, + 52.180435 + ] + ] + }, + "properties": { + "id": 3686216, + "linkIdReversed": 0, + "fromNodeId": 596834, + "toNodeId": 3882835, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.267 + } + }, + { + "type": "Feature", + "id": 3686224, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425031, + 52.175702 + ], + [ + 5.425134, + 52.17531 + ] + ] + }, + "properties": { + "id": 3686224, + "linkIdReversed": 0, + "fromNodeId": 3882841, + "toNodeId": 3882842, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686225, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425134, + 52.17531 + ], + [ + 5.425236, + 52.174918 + ] + ] + }, + "properties": { + "id": 3686225, + "linkIdReversed": 0, + "fromNodeId": 3882842, + "toNodeId": 3882843, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686226, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425236, + 52.174918 + ], + [ + 5.425338, + 52.174526 + ] + ] + }, + "properties": { + "id": 3686226, + "linkIdReversed": 0, + "fromNodeId": 3882843, + "toNodeId": 599093, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686217, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42204, + 52.180435 + ], + [ + 5.42156, + 52.180741 + ] + ] + }, + "properties": { + "id": 3686217, + "linkIdReversed": 0, + "fromNodeId": 3882835, + "toNodeId": 3882836, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.267 + } + }, + { + "type": "Feature", + "id": 3686222, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424845, + 52.176487 + ], + [ + 5.42489, + 52.176331 + ], + [ + 5.424929, + 52.176094 + ] + ] + }, + "properties": { + "id": 3686222, + "linkIdReversed": 0, + "fromNodeId": 3882839, + "toNodeId": 3882840, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686223, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424929, + 52.176094 + ], + [ + 5.42493, + 52.17609 + ], + [ + 5.425031, + 52.175702 + ] + ] + }, + "properties": { + "id": 3686223, + "linkIdReversed": 0, + "fromNodeId": 3882840, + "toNodeId": 3882841, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 6369279, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423044, + 52.181034 + ], + [ + 5.423499, + 52.180712 + ] + ] + }, + "properties": { + "id": 6369279, + "linkIdReversed": 0, + "fromNodeId": 5442740, + "toNodeId": 5442741, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369280, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423499, + 52.180712 + ], + [ + 5.423955, + 52.180391 + ] + ] + }, + "properties": { + "id": 6369280, + "linkIdReversed": 0, + "fromNodeId": 5442741, + "toNodeId": 5442742, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369281, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423955, + 52.180391 + ], + [ + 5.424184, + 52.180229 + ], + [ + 5.424419, + 52.180107 + ], + [ + 5.424449, + 52.180094 + ] + ] + }, + "properties": { + "id": 6369281, + "linkIdReversed": 0, + "fromNodeId": 5442742, + "toNodeId": 5442743, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369282, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424449, + 52.180094 + ], + [ + 5.424675, + 52.179996 + ], + [ + 5.424941, + 52.179909 + ], + [ + 5.42505, + 52.179885 + ] + ] + }, + "properties": { + "id": 6369282, + "linkIdReversed": 0, + "fromNodeId": 5442743, + "toNodeId": 5442744, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369283, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42505, + 52.179885 + ], + [ + 5.425237, + 52.179844 + ], + [ + 5.42572, + 52.179779 + ] + ] + }, + "properties": { + "id": 6369283, + "linkIdReversed": 0, + "fromNodeId": 5442744, + "toNodeId": 1117050, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369284, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42572, + 52.179779 + ], + [ + 5.425237, + 52.179844 + ], + [ + 5.42505, + 52.179885 + ] + ] + }, + "properties": { + "id": 6369284, + "linkIdReversed": 0, + "fromNodeId": 1117050, + "toNodeId": 5442745, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369285, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42505, + 52.179885 + ], + [ + 5.424941, + 52.179909 + ], + [ + 5.424675, + 52.179996 + ], + [ + 5.424449, + 52.180094 + ] + ] + }, + "properties": { + "id": 6369285, + "linkIdReversed": 0, + "fromNodeId": 5442745, + "toNodeId": 5442746, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369286, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424449, + 52.180094 + ], + [ + 5.424419, + 52.180107 + ], + [ + 5.424184, + 52.180229 + ], + [ + 5.423955, + 52.180391 + ] + ] + }, + "properties": { + "id": 6369286, + "linkIdReversed": 0, + "fromNodeId": 5442746, + "toNodeId": 5442747, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369287, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423955, + 52.180391 + ], + [ + 5.423499, + 52.180712 + ] + ] + }, + "properties": { + "id": 6369287, + "linkIdReversed": 0, + "fromNodeId": 5442747, + "toNodeId": 5442748, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369288, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423499, + 52.180712 + ], + [ + 5.423044, + 52.181034 + ] + ] + }, + "properties": { + "id": 6369288, + "linkIdReversed": 0, + "fromNodeId": 5442748, + "toNodeId": 5442749, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6405115, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432927, + 52.180256 + ], + [ + 5.432499, + 52.180435 + ], + [ + 5.432473, + 52.180446 + ] + ] + }, + "properties": { + "id": 6405115, + "linkIdReversed": 0, + "fromNodeId": 1121748, + "toNodeId": 5467882, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405118, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431663, + 52.180894 + ], + [ + 5.431594, + 52.180969 + ], + [ + 5.431524, + 52.18108 + ], + [ + 5.431477, + 52.18121 + ] + ] + }, + "properties": { + "id": 6405118, + "linkIdReversed": 0, + "fromNodeId": 5467884, + "toNodeId": 1121749, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405116, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432473, + 52.180446 + ], + [ + 5.432129, + 52.180595 + ], + [ + 5.432028, + 52.180645 + ] + ] + }, + "properties": { + "id": 6405116, + "linkIdReversed": 0, + "fromNodeId": 5467882, + "toNodeId": 5467883, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405117, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432028, + 52.180645 + ], + [ + 5.431884, + 52.180717 + ], + [ + 5.431712, + 52.18084 + ], + [ + 5.431663, + 52.180894 + ] + ] + }, + "properties": { + "id": 6405117, + "linkIdReversed": 0, + "fromNodeId": 5467883, + "toNodeId": 5467884, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405120, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.4335, + 52.180016 + ], + [ + 5.432927, + 52.180256 + ] + ] + }, + "properties": { + "id": 6405120, + "linkIdReversed": 0, + "fromNodeId": 5467885, + "toNodeId": 1121748, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.431 + } + }, + { + "type": "Feature", + "id": 6405165, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424756, + 52.181271 + ], + [ + 5.425247, + 52.181191 + ] + ] + }, + "properties": { + "id": 6405165, + "linkIdReversed": 0, + "fromNodeId": 1117049, + "toNodeId": 5467903, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405166, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425247, + 52.181191 + ], + [ + 5.425737, + 52.18111 + ] + ] + }, + "properties": { + "id": 6405166, + "linkIdReversed": 0, + "fromNodeId": 5467903, + "toNodeId": 5467904, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405167, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425737, + 52.18111 + ], + [ + 5.426228, + 52.18103 + ] + ] + }, + "properties": { + "id": 6405167, + "linkIdReversed": 0, + "fromNodeId": 5467904, + "toNodeId": 1121765, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405168, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426228, + 52.18103 + ], + [ + 5.425737, + 52.18111 + ] + ] + }, + "properties": { + "id": 6405168, + "linkIdReversed": 0, + "fromNodeId": 1121765, + "toNodeId": 5467905, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405169, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425737, + 52.18111 + ], + [ + 5.425247, + 52.181191 + ] + ] + }, + "properties": { + "id": 6405169, + "linkIdReversed": 0, + "fromNodeId": 5467905, + "toNodeId": 5467906, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405170, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425247, + 52.181191 + ], + [ + 5.424756, + 52.181271 + ] + ] + }, + "properties": { + "id": 6405170, + "linkIdReversed": 0, + "fromNodeId": 5467906, + "toNodeId": 1117049, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405177, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426726, + 52.180954 + ], + [ + 5.426228, + 52.18103 + ] + ] + }, + "properties": { + "id": 6405177, + "linkIdReversed": 0, + "fromNodeId": 5467910, + "toNodeId": 1121765, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405178, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426228, + 52.18103 + ], + [ + 5.426726, + 52.180954 + ] + ] + }, + "properties": { + "id": 6405178, + "linkIdReversed": 0, + "fromNodeId": 1121765, + "toNodeId": 5467911, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405179, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426726, + 52.180954 + ], + [ + 5.427223, + 52.180878 + ] + ] + }, + "properties": { + "id": 6405179, + "linkIdReversed": 0, + "fromNodeId": 5467911, + "toNodeId": 5467912, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405180, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427223, + 52.180878 + ], + [ + 5.42747, + 52.18084 + ], + [ + 5.427719, + 52.180798 + ] + ] + }, + "properties": { + "id": 6405180, + "linkIdReversed": 0, + "fromNodeId": 5467912, + "toNodeId": 1121766, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405175, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427719, + 52.180798 + ], + [ + 5.42747, + 52.18084 + ], + [ + 5.427223, + 52.180878 + ] + ] + }, + "properties": { + "id": 6405175, + "linkIdReversed": 0, + "fromNodeId": 1121766, + "toNodeId": 5467909, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405183, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426228, + 52.18103 + ], + [ + 5.426059, + 52.180613 + ] + ] + }, + "properties": { + "id": 6405183, + "linkIdReversed": 0, + "fromNodeId": 1121765, + "toNodeId": 5467913, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405184, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426059, + 52.180613 + ], + [ + 5.425889, + 52.180196 + ] + ] + }, + "properties": { + "id": 6405184, + "linkIdReversed": 0, + "fromNodeId": 5467913, + "toNodeId": 5467914, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405176, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427223, + 52.180878 + ], + [ + 5.426726, + 52.180954 + ] + ] + }, + "properties": { + "id": 6405176, + "linkIdReversed": 0, + "fromNodeId": 5467909, + "toNodeId": 5467910, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405181, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426316, + 52.181244 + ], + [ + 5.426228, + 52.18103 + ] + ] + }, + "properties": { + "id": 6405181, + "linkIdReversed": 0, + "fromNodeId": 1121767, + "toNodeId": 1121765, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 24.561 + } + }, + { + "type": "Feature", + "id": 6405182, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426228, + 52.18103 + ], + [ + 5.426316, + 52.181244 + ] + ] + }, + "properties": { + "id": 6405182, + "linkIdReversed": 0, + "fromNodeId": 1121765, + "toNodeId": 1121767, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 24.561 + } + }, + { + "type": "Feature", + "id": 6405185, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425889, + 52.180196 + ], + [ + 5.42572, + 52.179779 + ] + ] + }, + "properties": { + "id": 6405185, + "linkIdReversed": 0, + "fromNodeId": 5467914, + "toNodeId": 1117050, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405186, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42572, + 52.179779 + ], + [ + 5.425889, + 52.180196 + ] + ] + }, + "properties": { + "id": 6405186, + "linkIdReversed": 0, + "fromNodeId": 1117050, + "toNodeId": 5467915, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405187, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425889, + 52.180196 + ], + [ + 5.426059, + 52.180613 + ] + ] + }, + "properties": { + "id": 6405187, + "linkIdReversed": 0, + "fromNodeId": 5467915, + "toNodeId": 5467916, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405188, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426059, + 52.180613 + ], + [ + 5.426228, + 52.18103 + ] + ] + }, + "properties": { + "id": 6405188, + "linkIdReversed": 0, + "fromNodeId": 5467916, + "toNodeId": 1121765, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405219, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426411, + 52.179772 + ], + [ + 5.426481, + 52.179771 + ], + [ + 5.427101, + 52.179794 + ] + ] + }, + "properties": { + "id": 6405219, + "linkIdReversed": 0, + "fromNodeId": 5467931, + "toNodeId": 5467932, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405222, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428481, + 52.179846 + ], + [ + 5.429171, + 52.179872 + ] + ] + }, + "properties": { + "id": 6405222, + "linkIdReversed": 0, + "fromNodeId": 5467934, + "toNodeId": 5467935, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405218, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42572, + 52.179779 + ], + [ + 5.426411, + 52.179772 + ] + ] + }, + "properties": { + "id": 6405218, + "linkIdReversed": 0, + "fromNodeId": 1117050, + "toNodeId": 5467931, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405220, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427101, + 52.179794 + ], + [ + 5.427791, + 52.17982 + ] + ] + }, + "properties": { + "id": 6405220, + "linkIdReversed": 0, + "fromNodeId": 5467932, + "toNodeId": 5467933, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405221, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427791, + 52.17982 + ], + [ + 5.428481, + 52.179846 + ] + ] + }, + "properties": { + "id": 6405221, + "linkIdReversed": 0, + "fromNodeId": 5467933, + "toNodeId": 5467934, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405223, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429171, + 52.179872 + ], + [ + 5.429861, + 52.179897 + ] + ] + }, + "properties": { + "id": 6405223, + "linkIdReversed": 0, + "fromNodeId": 5467935, + "toNodeId": 5467936, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405224, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429861, + 52.179897 + ], + [ + 5.43036, + 52.179916 + ], + [ + 5.430534, + 52.179965 + ] + ] + }, + "properties": { + "id": 6405224, + "linkIdReversed": 0, + "fromNodeId": 5467936, + "toNodeId": 5467937, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405225, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430534, + 52.179965 + ], + [ + 5.430536, + 52.179966 + ], + [ + 5.430629, + 52.18008 + ], + [ + 5.430644, + 52.180176 + ], + [ + 5.430639, + 52.180237 + ], + [ + 5.430609, + 52.180374 + ] + ] + }, + "properties": { + "id": 6405225, + "linkIdReversed": 0, + "fromNodeId": 5467937, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405226, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430609, + 52.180374 + ], + [ + 5.430639, + 52.180237 + ], + [ + 5.430644, + 52.180176 + ], + [ + 5.430629, + 52.18008 + ], + [ + 5.430536, + 52.179966 + ], + [ + 5.430534, + 52.179965 + ] + ] + }, + "properties": { + "id": 6405226, + "linkIdReversed": 0, + "fromNodeId": 1121779, + "toNodeId": 5467938, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405227, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430534, + 52.179965 + ], + [ + 5.43036, + 52.179916 + ], + [ + 5.429861, + 52.179897 + ] + ] + }, + "properties": { + "id": 6405227, + "linkIdReversed": 0, + "fromNodeId": 5467938, + "toNodeId": 5467939, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405231, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427791, + 52.17982 + ], + [ + 5.427101, + 52.179794 + ] + ] + }, + "properties": { + "id": 6405231, + "linkIdReversed": 0, + "fromNodeId": 5467942, + "toNodeId": 5467943, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405228, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429861, + 52.179897 + ], + [ + 5.429171, + 52.179872 + ] + ] + }, + "properties": { + "id": 6405228, + "linkIdReversed": 0, + "fromNodeId": 5467939, + "toNodeId": 5467940, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405229, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429171, + 52.179872 + ], + [ + 5.428481, + 52.179846 + ] + ] + }, + "properties": { + "id": 6405229, + "linkIdReversed": 0, + "fromNodeId": 5467940, + "toNodeId": 5467941, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405234, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430609, + 52.180374 + ], + [ + 5.429931, + 52.180485 + ] + ] + }, + "properties": { + "id": 6405234, + "linkIdReversed": 0, + "fromNodeId": 1121779, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.993 + } + }, + { + "type": "Feature", + "id": 6405235, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429931, + 52.180485 + ], + [ + 5.430609, + 52.180374 + ] + ] + }, + "properties": { + "id": 6405235, + "linkIdReversed": 0, + "fromNodeId": 1121780, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.993 + } + }, + { + "type": "Feature", + "id": 6405237, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431004, + 52.18128 + ], + [ + 5.431042, + 52.181019 + ], + [ + 5.431057, + 52.180851 + ] + ] + }, + "properties": { + "id": 6405237, + "linkIdReversed": 0, + "fromNodeId": 5467945, + "toNodeId": 5467946, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.913 + } + }, + { + "type": "Feature", + "id": 6405230, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428481, + 52.179846 + ], + [ + 5.427791, + 52.17982 + ] + ] + }, + "properties": { + "id": 6405230, + "linkIdReversed": 0, + "fromNodeId": 5467941, + "toNodeId": 5467942, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405232, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427101, + 52.179794 + ], + [ + 5.426481, + 52.179771 + ], + [ + 5.426411, + 52.179772 + ] + ] + }, + "properties": { + "id": 6405232, + "linkIdReversed": 0, + "fromNodeId": 5467943, + "toNodeId": 5467944, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405240, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429931, + 52.180485 + ], + [ + 5.429378, + 52.180563 + ] + ] + }, + "properties": { + "id": 6405240, + "linkIdReversed": 0, + "fromNodeId": 1121780, + "toNodeId": 5467948, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405241, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429378, + 52.180563 + ], + [ + 5.428825, + 52.180642 + ] + ] + }, + "properties": { + "id": 6405241, + "linkIdReversed": 0, + "fromNodeId": 5467948, + "toNodeId": 5467949, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405233, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426411, + 52.179772 + ], + [ + 5.42572, + 52.179779 + ] + ] + }, + "properties": { + "id": 6405233, + "linkIdReversed": 0, + "fromNodeId": 5467944, + "toNodeId": 1117050, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405238, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431057, + 52.180851 + ], + [ + 5.43107, + 52.18071 + ], + [ + 5.431116, + 52.18045 + ], + [ + 5.431117, + 52.180422 + ] + ] + }, + "properties": { + "id": 6405238, + "linkIdReversed": 0, + "fromNodeId": 5467946, + "toNodeId": 5467947, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.913 + } + }, + { + "type": "Feature", + "id": 6405239, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431117, + 52.180422 + ], + [ + 5.431123, + 52.180313 + ], + [ + 5.430609, + 52.180374 + ] + ] + }, + "properties": { + "id": 6405239, + "linkIdReversed": 0, + "fromNodeId": 5467947, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.913 + } + }, + { + "type": "Feature", + "id": 6405242, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428825, + 52.180642 + ], + [ + 5.428272, + 52.18072 + ] + ] + }, + "properties": { + "id": 6405242, + "linkIdReversed": 0, + "fromNodeId": 5467949, + "toNodeId": 5467950, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405246, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428825, + 52.180642 + ], + [ + 5.429378, + 52.180563 + ] + ] + }, + "properties": { + "id": 6405246, + "linkIdReversed": 0, + "fromNodeId": 5467952, + "toNodeId": 5467953, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405243, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428272, + 52.18072 + ], + [ + 5.427719, + 52.180798 + ] + ] + }, + "properties": { + "id": 6405243, + "linkIdReversed": 0, + "fromNodeId": 5467950, + "toNodeId": 1121766, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405244, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427719, + 52.180798 + ], + [ + 5.428272, + 52.18072 + ] + ] + }, + "properties": { + "id": 6405244, + "linkIdReversed": 0, + "fromNodeId": 1121766, + "toNodeId": 5467951, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405245, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428272, + 52.18072 + ], + [ + 5.428825, + 52.180642 + ] + ] + }, + "properties": { + "id": 6405245, + "linkIdReversed": 0, + "fromNodeId": 5467951, + "toNodeId": 5467952, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405247, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429378, + 52.180563 + ], + [ + 5.429931, + 52.180485 + ] + ] + }, + "properties": { + "id": 6405247, + "linkIdReversed": 0, + "fromNodeId": 5467953, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405252, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429875, + 52.180884 + ], + [ + 5.429819, + 52.181284 + ] + ] + }, + "properties": { + "id": 6405252, + "linkIdReversed": 0, + "fromNodeId": 5467956, + "toNodeId": 5467957, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.599 + } + }, + { + "type": "Feature", + "id": 6405249, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429819, + 52.181284 + ], + [ + 5.429875, + 52.180884 + ] + ] + }, + "properties": { + "id": 6405249, + "linkIdReversed": 0, + "fromNodeId": 5467954, + "toNodeId": 5467955, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.599 + } + }, + { + "type": "Feature", + "id": 6405250, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429875, + 52.180884 + ], + [ + 5.429931, + 52.180485 + ] + ] + }, + "properties": { + "id": 6405250, + "linkIdReversed": 0, + "fromNodeId": 5467955, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.599 + } + }, + { + "type": "Feature", + "id": 6405251, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429931, + 52.180485 + ], + [ + 5.429875, + 52.180884 + ] + ] + }, + "properties": { + "id": 6405251, + "linkIdReversed": 0, + "fromNodeId": 1121780, + "toNodeId": 5467956, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.599 + } + }, + { + "type": "Feature", + "id": 6405256, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427839, + 52.181107 + ], + [ + 5.427719, + 52.180798 + ] + ] + }, + "properties": { + "id": 6405256, + "linkIdReversed": 0, + "fromNodeId": 5467959, + "toNodeId": 1121766, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.349 + } + }, + { + "type": "Feature", + "id": 6405257, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427719, + 52.180798 + ], + [ + 5.427839, + 52.181107 + ] + ] + }, + "properties": { + "id": 6405257, + "linkIdReversed": 0, + "fromNodeId": 1121766, + "toNodeId": 5467960, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 35.349 + } + }, + { + "type": "Feature", + "id": 6409986, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433145, + 52.172166 + ], + [ + 5.432642, + 52.172405 + ], + [ + 5.432593, + 52.172423 + ] + ] + }, + "properties": { + "id": 6409986, + "linkIdReversed": 0, + "fromNodeId": 5470745, + "toNodeId": 5470746, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409987, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432593, + 52.172423 + ], + [ + 5.43231, + 52.172531 + ], + [ + 5.431984, + 52.172625 + ] + ] + }, + "properties": { + "id": 6409987, + "linkIdReversed": 0, + "fromNodeId": 5470746, + "toNodeId": 5470747, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409988, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431984, + 52.172625 + ], + [ + 5.431937, + 52.172638 + ], + [ + 5.431495, + 52.172714 + ], + [ + 5.431314, + 52.172729 + ] + ] + }, + "properties": { + "id": 6409988, + "linkIdReversed": 0, + "fromNodeId": 5470747, + "toNodeId": 5470748, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409989, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431314, + 52.172729 + ], + [ + 5.431076, + 52.172749 + ], + [ + 5.430624, + 52.172745 + ] + ] + }, + "properties": { + "id": 6409989, + "linkIdReversed": 0, + "fromNodeId": 5470748, + "toNodeId": 5470749, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409990, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430624, + 52.172745 + ], + [ + 5.430595, + 52.172745 + ], + [ + 5.430142, + 52.172695 + ], + [ + 5.429948, + 52.172655 + ] + ] + }, + "properties": { + "id": 6409990, + "linkIdReversed": 0, + "fromNodeId": 5470749, + "toNodeId": 5470750, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409991, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429948, + 52.172655 + ], + [ + 5.429864, + 52.172638 + ], + [ + 5.429593, + 52.172562 + ], + [ + 5.429338, + 52.172458 + ] + ] + }, + "properties": { + "id": 6409991, + "linkIdReversed": 0, + "fromNodeId": 5470750, + "toNodeId": 5470751, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409992, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429338, + 52.172458 + ], + [ + 5.429275, + 52.172432 + ], + [ + 5.429121, + 52.172352 + ], + [ + 5.428904, + 52.172237 + ], + [ + 5.428808, + 52.172184 + ] + ] + }, + "properties": { + "id": 6409992, + "linkIdReversed": 0, + "fromNodeId": 5470751, + "toNodeId": 5470752, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6410877, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432878, + 52.18021 + ], + [ + 5.433451, + 52.17997 + ] + ] + }, + "properties": { + "id": 6410877, + "linkIdReversed": 0, + "fromNodeId": 1122767, + "toNodeId": 5471354, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.431 + } + }, + { + "type": "Feature", + "id": 6410880, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431435, + 52.181028 + ], + [ + 5.43153, + 52.180908 + ], + [ + 5.43167, + 52.180786 + ], + [ + 5.431812, + 52.180696 + ] + ] + }, + "properties": { + "id": 6410880, + "linkIdReversed": 0, + "fromNodeId": 5471355, + "toNodeId": 5471356, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.451 + } + }, + { + "type": "Feature", + "id": 6410881, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431812, + 52.180696 + ], + [ + 5.431916, + 52.18063 + ], + [ + 5.432222, + 52.180496 + ], + [ + 5.432336, + 52.180446 + ] + ] + }, + "properties": { + "id": 6410881, + "linkIdReversed": 0, + "fromNodeId": 5471356, + "toNodeId": 5471357, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.451 + } + }, + { + "type": "Feature", + "id": 6410882, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432336, + 52.180446 + ], + [ + 5.432878, + 52.18021 + ] + ] + }, + "properties": { + "id": 6410882, + "linkIdReversed": 0, + "fromNodeId": 5471357, + "toNodeId": 1122767, + "speedInKilometersPerHour": 50.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.451 + } + }, + { + "type": "Feature", + "id": 7223061, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433661, + 52.180611 + ], + [ + 5.43331, + 52.180338 + ] + ] + }, + "properties": { + "id": 7223061, + "linkIdReversed": 0, + "fromNodeId": 5985262, + "toNodeId": 5985263, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.697 + } + }, + { + "type": "Feature", + "id": 7223062, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43331, + 52.180338 + ], + [ + 5.432959, + 52.180065 + ] + ] + }, + "properties": { + "id": 7223062, + "linkIdReversed": 0, + "fromNodeId": 5985263, + "toNodeId": 596832, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.697 + } + }, + { + "type": "Feature", + "id": 7223065, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433601, + 52.180439 + ], + [ + 5.433382, + 52.180233 + ], + [ + 5.433212, + 52.180084 + ] + ] + }, + "properties": { + "id": 7223065, + "linkIdReversed": 0, + "fromNodeId": 5985265, + "toNodeId": 5985266, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223066, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433212, + 52.180084 + ], + [ + 5.432811, + 52.179734 + ] + ] + }, + "properties": { + "id": 7223066, + "linkIdReversed": 0, + "fromNodeId": 5985266, + "toNodeId": 5985267, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223067, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432811, + 52.179734 + ], + [ + 5.43241, + 52.179384 + ] + ] + }, + "properties": { + "id": 7223067, + "linkIdReversed": 0, + "fromNodeId": 5985267, + "toNodeId": 5985268, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223068, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43241, + 52.179384 + ], + [ + 5.432009, + 52.179034 + ] + ] + }, + "properties": { + "id": 7223068, + "linkIdReversed": 0, + "fromNodeId": 5985268, + "toNodeId": 5985269, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223069, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432009, + 52.179034 + ], + [ + 5.431713, + 52.178776 + ], + [ + 5.431609, + 52.178684 + ] + ] + }, + "properties": { + "id": 7223069, + "linkIdReversed": 0, + "fromNodeId": 5985269, + "toNodeId": 5985270, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223070, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431609, + 52.178684 + ], + [ + 5.43121, + 52.178333 + ] + ] + }, + "properties": { + "id": 7223070, + "linkIdReversed": 0, + "fromNodeId": 5985270, + "toNodeId": 5985271, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223071, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43121, + 52.178333 + ], + [ + 5.430812, + 52.177982 + ] + ] + }, + "properties": { + "id": 7223071, + "linkIdReversed": 0, + "fromNodeId": 5985271, + "toNodeId": 5985272, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223072, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430812, + 52.177982 + ], + [ + 5.430413, + 52.177631 + ] + ] + }, + "properties": { + "id": 7223072, + "linkIdReversed": 0, + "fromNodeId": 5985272, + "toNodeId": 5985273, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223073, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430413, + 52.177631 + ], + [ + 5.430015, + 52.17728 + ] + ] + }, + "properties": { + "id": 7223073, + "linkIdReversed": 0, + "fromNodeId": 5985273, + "toNodeId": 597029, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7930097, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428925, + 52.172131 + ], + [ + 5.428988, + 52.172165 + ], + [ + 5.429345, + 52.172329 + ], + [ + 5.42949, + 52.172383 + ] + ] + }, + "properties": { + "id": 7930097, + "linkIdReversed": 0, + "fromNodeId": 6349336, + "toNodeId": 6349337, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930098, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42949, + 52.172383 + ], + [ + 5.429684, + 52.172455 + ], + [ + 5.430015, + 52.172539 + ], + [ + 5.430126, + 52.172557 + ] + ] + }, + "properties": { + "id": 7930098, + "linkIdReversed": 0, + "fromNodeId": 6349337, + "toNodeId": 6349338, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930099, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430126, + 52.172557 + ], + [ + 5.430324, + 52.172588 + ], + [ + 5.430683, + 52.172626 + ], + [ + 5.430814, + 52.172629 + ] + ] + }, + "properties": { + "id": 7930099, + "linkIdReversed": 0, + "fromNodeId": 6349338, + "toNodeId": 6349339, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930100, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430814, + 52.172629 + ], + [ + 5.431061, + 52.172634 + ], + [ + 5.431426, + 52.172611 + ], + [ + 5.431509, + 52.172599 + ] + ] + }, + "properties": { + "id": 7930100, + "linkIdReversed": 0, + "fromNodeId": 6349339, + "toNodeId": 6349340, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930101, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431509, + 52.172599 + ], + [ + 5.431897, + 52.172543 + ], + [ + 5.432171, + 52.172468 + ] + ] + }, + "properties": { + "id": 7930101, + "linkIdReversed": 0, + "fromNodeId": 6349340, + "toNodeId": 6349341, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930102, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432171, + 52.172468 + ], + [ + 5.432286, + 52.172436 + ], + [ + 5.432635, + 52.172298 + ], + [ + 5.432759, + 52.172237 + ] + ] + }, + "properties": { + "id": 7930102, + "linkIdReversed": 0, + "fromNodeId": 6349341, + "toNodeId": 6349342, + "speedInKilometersPerHour": 70.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 250409010, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.947248148629288, + 52.53076273190183 + ], + [ + 4.948557291001228, + 52.53291985134356 + ], + [ + 4.94886664465463, + 52.53342503342875 + ], + [ + 4.948965497946005, + 52.53359437077032 + ], + [ + 4.949374495751862, + 52.53426871632042 + ], + [ + 4.95419827957171, + 52.542215076763995 + ], + [ + 4.955520091139497, + 52.544387611068366 + ] + ] + }, + "properties": { + "id": 250409010, + "linkIdReversed": 0, + "fromNodeId": 250409077, + "toNodeId": 251412022, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 1616.582539926782 + } + }, + { + "type": "Feature", + "id": 251412004, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.955520091139497, + 52.544387611068366 + ], + [ + 4.95888698576146, + 52.549936451914796 + ] + ] + }, + "properties": { + "id": 251412004, + "linkIdReversed": 0, + "fromNodeId": 251412022, + "toNodeId": 251413022, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 658.3041279537974 + } + }, + { + "type": "Feature", + "id": 251414001, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.958886985761445, + 52.54993645191476 + ], + [ + 4.960383881737848, + 52.552396241415174 + ], + [ + 4.962264585920772, + 52.55549453093445 + ], + [ + 4.968690960327826, + 52.56606568694231 + ], + [ + 4.969200678139358, + 52.566909022733824 + ], + [ + 4.970011453381847, + 52.568238188929 + ], + [ + 4.970427713864023, + 52.56891093554989 + ], + [ + 4.970926957268423, + 52.56970692190644 + ], + [ + 4.971237852366785, + 52.570192963737284 + ], + [ + 4.971603870946863, + 52.570758751142854 + ], + [ + 4.972043170813728, + 52.571426037824764 + ], + [ + 4.972598666760501, + 52.57225178844778 + ], + [ + 4.9732864118048825, + 52.57325657423782 + ], + [ + 4.973629729416568, + 52.573753481804225 + ], + [ + 4.9738622326336674, + 52.57408391084387 + ], + [ + 4.974450198688449, + 52.57490817525072 + ], + [ + 4.974924094770247, + 52.575566636374994 + ], + [ + 4.979711837557625, + 52.58221191887893 + ], + [ + 4.982129717202658, + 52.58556236483793 + ] + ] + }, + "properties": { + "id": 251414001, + "linkIdReversed": 0, + "fromNodeId": 251413022, + "toNodeId": 255421058, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 4267.378146356175 + } + }, + { + "type": "Feature", + "id": 252408066, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.965621315705855, + 52.5267374843479 + ], + [ + 4.965625977489429, + 52.526877380365455 + ] + ] + }, + "properties": { + "id": 252408066, + "linkIdReversed": 0, + "fromNodeId": 252408136, + "toNodeId": 252408137, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 100.0, + "distanceInMeters": 15.569320633874792 + } + }, + { + "type": "Feature", + "id": 252408103, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.964733871443549, + 52.525400977491294 + ], + [ + 4.964807085048099, + 52.52552259913386 + ], + [ + 4.964892202397557, + 52.52565610427305 + ], + [ + 4.964948248427335, + 52.525750353587284 + ], + [ + 4.96503345174784, + 52.5258770136202 + ], + [ + 4.965045403907588, + 52.52588881612768 + ], + [ + 4.965057026988621, + 52.52589723018595 + ], + [ + 4.965098384614229, + 52.52591924919565 + ], + [ + 4.965147516360238, + 52.52598323551644 + ], + [ + 4.965570726490267, + 52.5266754029695 + ], + [ + 4.965621315705855, + 52.5267374843479 + ] + ] + }, + "properties": { + "id": 252408103, + "linkIdReversed": 0, + "fromNodeId": 252408156, + "toNodeId": 252408136, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 161.01061959248253 + } + }, + { + "type": "Feature", + "id": 255421011, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.982129717202658, + 52.58556236483793 + ], + [ + 4.985233092988455, + 52.58986532206415 + ], + [ + 4.986462658172078, + 52.59156799629122 + ], + [ + 4.9866057277719955, + 52.59176610636921 + ], + [ + 4.987844156596956, + 52.5934808915141 + ], + [ + 4.98827731428672, + 52.5940806267378 + ], + [ + 4.989217166207092, + 52.59538185172558 + ], + [ + 4.9894886433299055, + 52.59575769587263 + ], + [ + 4.990489148888686, + 52.59714277693842 + ], + [ + 4.990506097929822, + 52.59716625958632 + ] + ] + }, + "properties": { + "id": 255421011, + "linkIdReversed": 0, + "fromNodeId": 255421058, + "toNodeId": 256424016, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 1410.4341280730462 + } + }, + { + "type": "Feature", + "id": 258430006, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.004836248734401, + 52.622053334494154 + ], + [ + 5.0049372963431065, + 52.6221275516201 + ], + [ + 5.005145500038084, + 52.62282422460089 + ] + ] + }, + "properties": { + "id": 258430006, + "linkIdReversed": 0, + "fromNodeId": 258430004, + "toNodeId": 258430003, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 89.51630306558884 + } + }, + { + "type": "Feature", + "id": 258430008, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.007738472821023, + 52.62488600838141 + ], + [ + 5.00778034090383, + 52.62519648317199 + ], + [ + 5.00778324284914, + 52.62524106949041 + ], + [ + 5.007785565023439, + 52.62528557015276 + ], + [ + 5.0077873469636724, + 52.62533007092917 + ], + [ + 5.007788629709101, + 52.625374571810966 + ], + [ + 5.007789413771721, + 52.625419072798046 + ], + [ + 5.007789794544715, + 52.62546357387016 + ], + [ + 5.007789809507478, + 52.625508075019404 + ], + [ + 5.00778950355875, + 52.62555257623625 + ], + [ + 5.00778893649978, + 52.62559707750799 + ], + [ + 5.007788159722373, + 52.62564157882372 + ], + [ + 5.007787215552626, + 52.62568608017452 + ], + [ + 5.007786166836313, + 52.625730581546954 + ], + [ + 5.007785069132843, + 52.625775082929266 + ], + [ + 5.007783958601784, + 52.625819602583974 + ], + [ + 5.00778290651196, + 52.62586409957506 + ], + [ + 5.007781954710555, + 52.62590859716905 + ], + [ + 5.007780974094842, + 52.62595309458921 + ], + [ + 5.007779783018107, + 52.62599759074271 + ], + [ + 5.007778397853438, + 52.62604208572808 + ], + [ + 5.007776853031238, + 52.62608657975238 + ], + [ + 5.007775135545703, + 52.626131072737444 + ], + [ + 5.0077732857787645, + 52.62617556492619 + ], + [ + 5.007771305723533, + 52.62622005633058 + ], + [ + 5.007769220963878, + 52.6262644228143 + ], + [ + 5.007767034991661, + 52.62630891951816 + ], + [ + 5.0077647744435, + 52.626353413667445 + ], + [ + 5.007762447083253, + 52.626397905528016 + ], + [ + 5.007760067233462, + 52.62644239559048 + ], + [ + 5.007757655121218, + 52.62648688454757 + ], + [ + 5.007755240142385, + 52.626531176979114 + ], + [ + 5.007752816794909, + 52.62657567099581 + ], + [ + 5.007750410539753, + 52.62662016506657 + ], + [ + 5.007748740924119, + 52.62665155961693 + ], + [ + 5.0077480480517025, + 52.626664661673814 + ], + [ + 5.007745754263828, + 52.62670914480861 + ], + [ + 5.007743555667626, + 52.62675362899403 + ], + [ + 5.007741469899972, + 52.626798114424766 + ], + [ + 5.007739523206488, + 52.62684260139075 + ], + [ + 5.0077377441962625, + 52.62688709020779 + ], + [ + 5.007736150843389, + 52.626931581074366 + ], + [ + 5.007734769174193, + 52.62697607427791 + ], + [ + 5.007733628306991, + 52.62702057013989 + ], + [ + 5.007732740890864, + 52.62706506879998 + ], + [ + 5.007732542302814, + 52.6270757913513 + ], + [ + 5.007732135579344, + 52.62710965207928 + ], + [ + 5.0077318832332995, + 52.627198679660395 + ], + [ + 5.007732273966275, + 52.627243186470466 + ], + [ + 5.007732608151946, + 52.627265384205494 + ], + [ + 5.00773304320949, + 52.62728731941103 + ], + [ + 5.0077342203246245, + 52.62733190311065 + ], + [ + 5.007735808941999, + 52.627376498558895 + ], + [ + 5.007737846153266, + 52.62742110681472 + ], + [ + 5.0077403375406, + 52.627465728037485 + ], + [ + 5.00774127815575, + 52.62748084759359 + ], + [ + 5.007743185279829, + 52.62750890749427 + ], + [ + 5.007746579489357, + 52.627553422357 + ], + [ + 5.007750383060749, + 52.627597912488085 + ], + [ + 5.00775462937346, + 52.62764237587091 + ], + [ + 5.007759316103537, + 52.627686812645955 + ], + [ + 5.007764442951164, + 52.627731222831386 + ], + [ + 5.007770014682107, + 52.62777560613922 + ], + [ + 5.007776019591303, + 52.62781996327677 + ], + [ + 5.007782465270694, + 52.62786429378523 + ], + [ + 5.007789353233805, + 52.627908597573295 + ], + [ + 5.007796682101024, + 52.627952874724244 + ], + [ + 5.007804446925757, + 52.627997125536965 + ], + [ + 5.007812656004133, + 52.62804134951023 + ], + [ + 5.0078212626785135, + 52.6280855494628 + ], + [ + 5.007830159748771, + 52.6281297318712 + ], + [ + 5.007839069593639, + 52.62817391350779 + ], + [ + 5.007847979518852, + 52.628218095139445 + ], + [ + 5.007856885527637, + 52.62826227700767 + ], + [ + 5.007868851095906, + 52.62830627403336 + ], + [ + 5.007881753025356, + 52.62835021448874 + ], + [ + 5.0079109365034125, + 52.62861677090985 + ] + ] + }, + "properties": { + "id": 258430008, + "linkIdReversed": 0, + "fromNodeId": 258430002, + "toNodeId": 258431174, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 100.0, + "distanceInMeters": 415.9042303735131 + } + }, + { + "type": "Feature", + "id": 258430012, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.007554736202064, + 52.62482295219738 + ], + [ + 5.007738472821023, + 52.62488600838141 + ] + ] + }, + "properties": { + "id": 258430012, + "linkIdReversed": 0, + "fromNodeId": 258430006, + "toNodeId": 258430002, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 14.283447938075719 + } + }, + { + "type": "Feature", + "id": 258430013, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.005145500038113, + 52.62282422460089 + ], + [ + 5.0052646019174425, + 52.62322209549128 + ], + [ + 5.005362912525981, + 52.62353090868786 + ], + [ + 5.005469229913485, + 52.623842830076256 + ], + [ + 5.005571454645754, + 52.6241200397231 + ], + [ + 5.005606914541975, + 52.62420728124672 + ], + [ + 5.00564687308648, + 52.624288034093496 + ], + [ + 5.0056756202018, + 52.624339246141524 + ], + [ + 5.0057038920227965, + 52.62438089253343 + ], + [ + 5.0057537765115, + 52.6244463199492 + ], + [ + 5.0057903418054375, + 52.624485471132026 + ], + [ + 5.00582937331322, + 52.62452361736198 + ], + [ + 5.00588062977884, + 52.62456589283694 + ], + [ + 5.005928365041014, + 52.62460004340075 + ], + [ + 5.005993341481756, + 52.62464163576058 + ], + [ + 5.006047970364211, + 52.62467242201993 + ], + [ + 5.006106282329681, + 52.62469999187535 + ], + [ + 5.006187799784303, + 52.62473474310245 + ], + [ + 5.006252135181346, + 52.62475779188075 + ], + [ + 5.006354051503052, + 52.624788893960435 + ], + [ + 5.006423382938233, + 52.62480599747332 + ], + [ + 5.006493492047898, + 52.62482010442467 + ], + [ + 5.006558149749221, + 52.62483101602744 + ], + [ + 5.0066324677115945, + 52.62483951041664 + ], + [ + 5.0067056727879615, + 52.624846052784456 + ], + [ + 5.006840060275464, + 52.624852272287846 + ], + [ + 5.007084433797846, + 52.62485236178048 + ], + [ + 5.007554736202064, + 52.62482295219738 + ] + ] + }, + "properties": { + "id": 258430013, + "linkIdReversed": 0, + "fromNodeId": 258430003, + "toNodeId": 258430006, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 324.72066115974627 + } + }, + { + "type": "Feature", + "id": 258431051, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.00601334381267, + 52.63028869479728 + ], + [ + 5.005943511583534, + 52.62963514745679 + ], + [ + 5.005907755133385, + 52.629384530376214 + ], + [ + 5.005961111560706, + 52.629283159296136 + ] + ] + }, + "properties": { + "id": 258431051, + "linkIdReversed": 0, + "fromNodeId": 258431258, + "toNodeId": 258431144, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 112.71043442454871 + } + }, + { + "type": "Feature", + "id": 258431052, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.004722771483198, + 52.62826301609778 + ], + [ + 5.0046731872522585, + 52.62847684669186 + ], + [ + 5.004563536959099, + 52.630159631197664 + ], + [ + 5.004562162095956, + 52.6302882443765 + ], + [ + 5.004565537715191, + 52.630333376054175 + ], + [ + 5.004572102533059, + 52.6303781342428 + ], + [ + 5.004586436335047, + 52.630432941680226 + ], + [ + 5.004618875717219, + 52.630508641347326 + ], + [ + 5.0046449888851985, + 52.6305507087649 + ], + [ + 5.004676756629147, + 52.6305913654121 + ], + [ + 5.004715224612105, + 52.63062977165461 + ], + [ + 5.004770816976223, + 52.63067162919786 + ], + [ + 5.004822777106413, + 52.63070246849006 + ], + [ + 5.0049015128900765, + 52.630738939807365 + ], + [ + 5.004964803592985, + 52.63076126959746 + ], + [ + 5.0050543097230085, + 52.63078503167603 + ], + [ + 5.005124709415757, + 52.630797167651764 + ], + [ + 5.005233106072736, + 52.63080674388559 + ], + [ + 5.0053637520878, + 52.63080534717825 + ], + [ + 5.005436628880153, + 52.63079806792792 + ], + [ + 5.005562113330659, + 52.630774438234596 + ], + [ + 5.005629212540764, + 52.630755322241264 + ], + [ + 5.0057205636419875, + 52.63071978992758 + ], + [ + 5.005777130424335, + 52.63069107235743 + ], + [ + 5.005854489469978, + 52.63063932360807 + ], + [ + 5.005896155174643, + 52.63060197457992 + ], + [ + 5.0059309664887515, + 52.63056234059888 + ], + [ + 5.005958624457006, + 52.63052219746911 + ], + [ + 5.005980829192441, + 52.63047881226587 + ], + [ + 5.005996647264239, + 52.63043490959518 + ], + [ + 5.006006848085371, + 52.63039033465134 + ], + [ + 5.006012575337939, + 52.63034708265107 + ], + [ + 5.006013343812657, + 52.63028869479728 + ] + ] + }, + "properties": { + "id": 258431052, + "linkIdReversed": 0, + "fromNodeId": 258431130, + "toNodeId": 258431258, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 396.3212239134507 + } + }, + { + "type": "Feature", + "id": 258431059, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.0079109365034125, + 52.62861677090985 + ], + [ + 5.007828182124694, + 52.62870417644299 + ] + ] + }, + "properties": { + "id": 258431059, + "linkIdReversed": 0, + "fromNodeId": 258431174, + "toNodeId": 258431169, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 11.224291915307928 + } + }, + { + "type": "Feature", + "id": 600125200, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.950643285539236, + 52.536999776019165 + ], + [ + 4.949797962609762, + 52.53553109569923 + ], + [ + 4.949377601673171, + 52.534819544495896 + ], + [ + 4.9479564594714205, + 52.53248656681113 + ], + [ + 4.947159787506508, + 52.53119387587783 + ] + ] + }, + "properties": { + "id": 600125200, + "linkIdReversed": 0, + "fromNodeId": 250410065, + "toNodeId": 250410047, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 687.9269951612212 + } + }, + { + "type": "Feature", + "id": 600125207, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.979816201086557, + 52.58281127338077 + ], + [ + 4.977374312300154, + 52.579422172657964 + ], + [ + 4.975171029867436, + 52.57636830879741 + ] + ] + }, + "properties": { + "id": 600125207, + "linkIdReversed": 0, + "fromNodeId": 254421020, + "toNodeId": 254420009, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 783.0072720015352 + } + }, + { + "type": "Feature", + "id": 600125228, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.007828182124694, + 52.62870417644299 + ], + [ + 5.007625207296558, + 52.62870952516662 + ], + [ + 5.007391804828353, + 52.6287011732534 + ], + [ + 5.007319415002216, + 52.628696194641016 + ], + [ + 5.0073032560888455, + 52.62869488761462 + ], + [ + 5.007247141253953, + 52.62869006464877 + ], + [ + 5.0071752329605586, + 52.62868300309632 + ], + [ + 5.007103747120269, + 52.62867493672573 + ], + [ + 5.0070324527510905, + 52.62866608541126 + ], + [ + 5.006961346911245, + 52.628656437592724 + ], + [ + 5.006890549030928, + 52.62864605665079 + ], + [ + 5.006820038006908, + 52.62863499283383 + ], + [ + 5.006750078878618, + 52.628622615178436 + ], + [ + 5.006681142763392, + 52.62860780212886 + ], + [ + 5.006661081407137, + 52.62860339607386 + ], + [ + 5.00661271853425, + 52.628592709778175 + ], + [ + 5.006543023421484, + 52.62857986612831 + ], + [ + 5.006473328349508, + 52.62856702243761 + ], + [ + 5.006403633318293, + 52.62855417870604 + ], + [ + 5.005497559543811, + 52.628387294273125 + ], + [ + 5.005426370192044, + 52.628377568961284 + ], + [ + 5.005356135509321, + 52.62836585182574 + ], + [ + 5.005285865659978, + 52.628354208099296 + ], + [ + 5.005240659991465, + 52.6283471954346 + ], + [ + 5.005215284575944, + 52.62834329473579 + ], + [ + 5.005144202512842, + 52.62833331861639 + ], + [ + 5.0050730203281315, + 52.628323549169465 + ], + [ + 5.005001102404016, + 52.628315298286125 + ], + [ + 5.004722771483198, + 52.628263016097755 + ] + ] + }, + "properties": { + "id": 600125228, + "linkIdReversed": 0, + "fromNodeId": 258431169, + "toNodeId": 258431130, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 217.02341798156982 + } + }, + { + "type": "Feature", + "id": 600125366, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.965625977489429, + 52.526877380365455 + ], + [ + 4.965278602263685, + 52.52695168997949 + ], + [ + 4.965211070545358, + 52.526969703940445 + ], + [ + 4.965142072746538, + 52.5269853400715 + ], + [ + 4.965073005859169, + 52.527000864184394 + ], + [ + 4.96500384052435, + 52.52701622865986 + ], + [ + 4.964934675141481, + 52.527031593094875 + ], + [ + 4.964865509710561, + 52.5270469574895 + ], + [ + 4.964796344231592, + 52.52706232184368 + ], + [ + 4.96472727426949, + 52.52707784115952 + ], + [ + 4.964658216492831, + 52.52709338027792 + ], + [ + 4.964589354056435, + 52.527109236269546 + ], + [ + 4.964520498308545, + 52.527125103149736 + ], + [ + 4.964451642511265, + 52.52714096998983 + ], + [ + 4.964349011181122, + 52.52716459058833 + ], + [ + 4.964313888786264, + 52.52717285966204 + ], + [ + 4.964245225408742, + 52.52718903594248 + ], + [ + 4.964176561980991, + 52.52720521218312 + ], + [ + 4.964107999582587, + 52.527221545161154 + ], + [ + 4.964039487202018, + 52.527237955757336 + ], + [ + 4.9639709747706, + 52.52725436631382 + ], + [ + 4.963902462288336, + 52.52727077683067 + ], + [ + 4.963834002912928, + 52.527287269757736 + ], + [ + 4.9637656294994805, + 52.52730389605543 + ], + [ + 4.963697256034601, + 52.52732052231365 + ], + [ + 4.963628882518327, + 52.527337148532354 + ], + [ + 4.9635605384786174, + 52.52735382051115 + ], + [ + 4.963492225519696, + 52.52737054073861 + ], + [ + 4.9634239746750435, + 52.5273873573501 + ], + [ + 4.963355864226183, + 52.52740439176636 + ], + [ + 4.963287753724848, + 52.52742142614342 + ], + [ + 4.963219680548707, + 52.52743851845689 + ], + [ + 4.963151626796992, + 52.527455640941675 + ], + [ + 4.9630835729925575, + 52.527472763387266 + ], + [ + 4.962961793271493, + 52.52750334413576 + ], + [ + 4.962947414123834, + 52.52750692814793 + ], + [ + 4.962879167746293, + 52.52752375137211 + ], + [ + 4.9628108213523605, + 52.52754041976448 + ], + [ + 4.962742416036142, + 52.52755699695722 + ], + [ + 4.962673951766811, + 52.527573482902014 + ], + [ + 4.962605487446431, + 52.52758996880717 + ], + [ + 4.962536989489783, + 52.527606402666386 + ], + [ + 4.9624684566471, + 52.52762278254401 + ], + [ + 4.962399920283786, + 52.52763915700878 + ], + [ + 4.962331383869717, + 52.5276555314339 + ], + [ + 4.962262740967588, + 52.52767174100068 + ], + [ + 4.962194046831896, + 52.52768787126996 + ], + [ + 4.962116014184371, + 52.52770619260153 + ], + [ + 4.962056491526964, + 52.52771986836637 + ], + [ + 4.9619873437098, + 52.52773525724612 + ], + [ + 4.96191819584451, + 52.52775064608545 + ], + [ + 4.961849047931103, + 52.52776603488441 + ], + [ + 4.961779899969596, + 52.52778142364297 + ], + [ + 4.961710751959958, + 52.52779681236114 + ], + [ + 4.961641647628238, + 52.52781227364201 + ], + [ + 4.961572461782506, + 52.527827599615726 + ], + [ + 4.961503272188605, + 52.52784291940508 + ], + [ + 4.961434082546777, + 52.52785823915395 + ], + [ + 4.961364892857039, + 52.527873558862375 + ], + [ + 4.961295703119355, + 52.52788887853036 + ], + [ + 4.961226513333759, + 52.52790419815791 + ], + [ + 4.9611573308369445, + 52.52791952992723 + ], + [ + 4.961088157324533, + 52.52793487665381 + ], + [ + 4.961018983764124, + 52.52795022333993 + ], + [ + 4.960949810155696, + 52.52796556998568 + ], + [ + 4.96088063649928, + 52.52798091659098 + ], + [ + 4.960811465543666, + 52.52799626772014 + ], + [ + 4.960742302187424, + 52.5280116315071 + ], + [ + 4.960673138783123, + 52.52802699525364 + ], + [ + 4.960603975330802, + 52.528042358959766 + ], + [ + 4.960534811830403, + 52.528057722625455 + ], + [ + 4.960465640532116, + 52.52807307338223 + ], + [ + 4.960396510679752, + 52.52808840424295 + ], + [ + 4.96032733191865, + 52.52810374607055 + ], + [ + 4.9602581531095735, + 52.52811908785772 + ], + [ + 4.96018898747697, + 52.52813445234331 + ], + [ + 4.960119822807633, + 52.528149818527496 + ], + [ + 4.960050658090255, + 52.52816518467124 + ], + [ + 4.959981493324806, + 52.528180550774515 + ], + [ + 4.959912391670771, + 52.528196025438625 + ], + [ + 4.959843340176936, + 52.52821158639507 + ], + [ + 4.959774288634515, + 52.528227147311185 + ], + [ + 4.959705234726543, + 52.528242704203045 + ], + [ + 4.959636180366691, + 52.52825826036105 + ], + [ + 4.959567125958263, + 52.52827381647887 + ], + [ + 4.959498071501263, + 52.528289372556344 + ], + [ + 4.959429016995688, + 52.52830492859353 + ], + [ + 4.959359962441538, + 52.528320484590445 + ], + [ + 4.959290907838831, + 52.52833604054704 + ], + [ + 4.95926529924512, + 52.52834180821838 + ], + [ + 4.959222012319109, + 52.52835155826326 + ], + [ + 4.959152962276922, + 52.52836711307819 + ], + [ + 4.959083912186152, + 52.528382667852895 + ], + [ + 4.959014850431139, + 52.528398203743016 + ], + [ + 4.958945780484633, + 52.52841372638239 + ], + [ + 4.958876710489663, + 52.52842924898148 + ], + [ + 4.958807664697854, + 52.52844481088424 + ], + [ + 4.958738550238706, + 52.52846026142469 + ], + [ + 4.958669406203568, + 52.52847566402105 + ], + [ + 4.958600262120276, + 52.528491066577004 + ], + [ + 4.958531117988811, + 52.52850646909258 + ], + [ + 4.958461973809207, + 52.528521871567726 + ], + [ + 4.95839282958143, + 52.528537274002545 + ], + [ + 4.958323685305515, + 52.528552676396934 + ], + [ + 4.958254540981426, + 52.52856807875088 + ], + [ + 4.9581853937725135, + 52.52858347646239 + ], + [ + 4.958116245510448, + 52.52859887250293 + ], + [ + 4.95804709720023, + 52.5286142685031 + ], + [ + 4.957977948841872, + 52.52862966446286 + ], + [ + 4.957908800435393, + 52.52864506038227 + ], + [ + 4.95783965198076, + 52.52866045626121 + ], + [ + 4.95777050347799, + 52.528675852099795 + ], + [ + 4.957701354927095, + 52.52869124789795 + ], + [ + 4.957434169674751, + 52.52876809659646 + ], + [ + 4.957365036524206, + 52.528783517607735 + ], + [ + 4.957295901402274, + 52.528798935458425 + ], + [ + 4.957226767731772, + 52.52881435570177 + ], + [ + 4.957157633823877, + 52.52882977559778 + ], + [ + 4.957088499867796, + 52.528845195453435 + ], + [ + 4.956950231201817, + 52.5288760340552 + ] + ] + }, + "properties": { + "id": 600125366, + "linkIdReversed": 0, + "fromNodeId": 252408137, + "toNodeId": 251409055, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 629.4849942568959 + } + }, + { + "type": "Feature", + "id": 600125370, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.990171110802718, + 52.59716105697501 + ], + [ + 4.9901459958673104, + 52.597126271818055 + ], + [ + 4.989962844639381, + 52.59687254278591 + ], + [ + 4.989906915285963, + 52.59679506029714 + ], + [ + 4.989887063396907, + 52.59676755803021 + ], + [ + 4.9897892286203085, + 52.59663202041537 + ], + [ + 4.988995066690548, + 52.59553177565722 + ], + [ + 4.9887680604261755, + 52.59521726641741 + ], + [ + 4.988728909895107, + 52.59516302427506 + ], + [ + 4.98829829000024, + 52.59456640027004 + ], + [ + 4.987147815015913, + 52.592972329617794 + ], + [ + 4.987039878554437, + 52.59282276902204 + ], + [ + 4.986053328143897, + 52.59145571703725 + ], + [ + 4.983985683575166, + 52.58859030234661 + ], + [ + 4.983370110838827, + 52.58773714086303 + ], + [ + 4.982683776453958, + 52.58678586341693 + ], + [ + 4.982321062671075, + 52.58628311433985 + ], + [ + 4.982290931356266, + 52.586241349602375 + ], + [ + 4.982186716474863, + 52.586096897222774 + ], + [ + 4.981929056120008, + 52.58573974914176 + ], + [ + 4.981915786282504, + 52.585721399114966 + ] + ] + }, + "properties": { + "id": 600125370, + "linkIdReversed": 0, + "fromNodeId": 256424015, + "toNodeId": 255421059, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 1390.4028399163979 + } + }, + { + "type": "Feature", + "id": 600125371, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.981915786282504, + 52.585721399114966 + ], + [ + 4.981083753206685, + 52.58457080495446 + ], + [ + 4.979816201086571, + 52.582811273380784 + ] + ] + }, + "properties": { + "id": 600125371, + "linkIdReversed": 0, + "fromNodeId": 255421059, + "toNodeId": 254421020, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 353.69935050019126 + } + }, + { + "type": "Feature", + "id": 600125529, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.975171029867421, + 52.5763683087974 + ], + [ + 4.973067815630861, + 52.57347809100994 + ], + [ + 4.971845599488942, + 52.57168535629544 + ], + [ + 4.971351383232337, + 52.57091072136972 + ], + [ + 4.971293146554941, + 52.57082963197981 + ], + [ + 4.9708860048327175, + 52.57020808351716 + ], + [ + 4.9703485082110515, + 52.569334432273145 + ], + [ + 4.970261626452097, + 52.56916336898644 + ], + [ + 4.968329760898569, + 52.56602000935463 + ], + [ + 4.966544099335163, + 52.56303890456425 + ], + [ + 4.964888555642738, + 52.56035481403231 + ], + [ + 4.96310283680431, + 52.55742757609356 + ], + [ + 4.961941660777081, + 52.55550912620783 + ], + [ + 4.961665932040537, + 52.55504978544238 + ], + [ + 4.960084354188542, + 52.55240183579034 + ], + [ + 4.954410640885904, + 52.5430973766155 + ], + [ + 4.953568845568446, + 52.54175519066088 + ], + [ + 4.952089365137705, + 52.53931420596574 + ], + [ + 4.951900767853417, + 52.53900794461077 + ], + [ + 4.950643285539236, + 52.536999776019165 + ] + ] + }, + "properties": { + "id": 600125529, + "linkIdReversed": 0, + "fromNodeId": 254420009, + "toNodeId": 250410065, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 4686.537594825758 + } + }, + { + "type": "Feature", + "id": 600125593, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.9467900079047, + 52.5297577715489 + ], + [ + 4.946949121091648, + 52.5300568657477 + ], + [ + 4.94722246599957, + 52.53055116380845 + ], + [ + 4.947248148629272, + 52.53076273190183 + ] + ] + }, + "properties": { + "id": 600125593, + "linkIdReversed": 0, + "fromNodeId": 250409126, + "toNodeId": 250409077, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 116.63689432990826 + } + }, + { + "type": "Feature", + "id": 600126037, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.949655788026621, + 52.53029440533744 + ], + [ + 4.949361464195368, + 52.529802708389866 + ], + [ + 4.949166546100645, + 52.5295238498283 + ], + [ + 4.948967123976559, + 52.52919036070785 + ], + [ + 4.948907203924798, + 52.52909982804092 + ], + [ + 4.9488410234931655, + 52.52901841148642 + ], + [ + 4.94878604420286, + 52.52896283901991 + ], + [ + 4.948746744255285, + 52.528926139513416 + ], + [ + 4.948701230938234, + 52.528890390374656 + ], + [ + 4.9485991780225, + 52.52882253253366 + ], + [ + 4.948546034438073, + 52.52879138543811 + ], + [ + 4.948465247609643, + 52.52874965956851 + ], + [ + 4.948405603691872, + 52.52872314384556 + ], + [ + 4.948343191319019, + 52.52869925475397 + ], + [ + 4.948248906487126, + 52.52866923432263 + ], + [ + 4.948181856414012, + 52.528651309994736 + ], + [ + 4.948073781475108, + 52.52862871232558 + ], + [ + 4.948001816348121, + 52.528618260692674 + ], + [ + 4.94790424492874, + 52.52860979843142 + ], + [ + 4.947830495115221, + 52.528607067437314 + ], + [ + 4.947736108610603, + 52.528607748900505 + ], + [ + 4.947662905750433, + 52.5286115087139 + ], + [ + 4.947590194862644, + 52.52861810132816 + ], + [ + 4.947518791131077, + 52.528627498307706 + ], + [ + 4.94743290103366, + 52.52864287390663 + ], + [ + 4.9473646276834415, + 52.52865858433987 + ], + [ + 4.947297574863545, + 52.52867721116731 + ], + [ + 4.947194064880816, + 52.528712357338904 + ], + [ + 4.947134246152327, + 52.528737173533244 + ], + [ + 4.947072151809677, + 52.52876719034453 + ], + [ + 4.947018780772414, + 52.528797553130154 + ], + [ + 4.946968566096695, + 52.52883043687319 + ], + [ + 4.946923394474826, + 52.528863875845694 + ], + [ + 4.9468804835020395, + 52.52889995828553 + ], + [ + 4.946841053605416, + 52.52893791940276 + ], + [ + 4.946804073911729, + 52.52897931738264 + ], + [ + 4.946773012666432, + 52.5290197900398 + ], + [ + 4.946744575873215, + 52.52906351686974 + ], + [ + 4.94672169985094, + 52.52910554054749 + ], + [ + 4.946705556544943, + 52.52914139150865 + ], + [ + 4.946690674166707, + 52.52918541487499 + ], + [ + 4.94667536662874, + 52.52926436789995 + ], + [ + 4.946672660381925, + 52.5293094798822 + ], + [ + 4.946673675391808, + 52.52935441424242 + ], + [ + 4.9466777398206565, + 52.52939930509549 + ], + [ + 4.9466900056791845, + 52.52947382990247 + ], + [ + 4.946699698342063, + 52.529518245535684 + ], + [ + 4.946711919353587, + 52.52956256000467 + ], + [ + 4.946735787250405, + 52.52963311409221 + ], + [ + 4.946752931377185, + 52.52967673502239 + ], + [ + 4.9467900079047, + 52.5297577715489 + ] + ] + }, + "properties": { + "id": 600126037, + "linkIdReversed": 0, + "fromNodeId": 250409128, + "toNodeId": 250409126, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 413.18063488254063 + } + }, + { + "type": "Feature", + "id": 600126141, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.956950231160104, + 52.528876034098396 + ], + [ + 4.956812165550626, + 52.528906827552206 + ], + [ + 4.956743181119858, + 52.52892221284561 + ], + [ + 4.956674195333278, + 52.528937596206724 + ], + [ + 4.956605212110846, + 52.52895298367129 + ], + [ + 4.9565362281141425, + 52.52896837001452 + ], + [ + 4.956398261320519, + 52.528999140787796 + ], + [ + 4.956181834396695, + 52.52902958898018 + ], + [ + 4.956112997179685, + 52.529045218898894 + ], + [ + 4.956043849288963, + 52.52906033384129 + ], + [ + 4.95597489654387, + 52.529075772188875 + ], + [ + 4.955905953320936, + 52.529091226438744 + ], + [ + 4.955837010196303, + 52.52910668073887 + ], + [ + 4.955768067166462, + 52.52912213544869 + ], + [ + 4.955699119594089, + 52.529137582552636 + ], + [ + 4.955630088879127, + 52.52915289198723 + ], + [ + 4.955561058117256, + 52.52916820129174 + ], + [ + 4.9554920273076, + 52.529183510555974 + ], + [ + 4.95542299645016, + 52.52919881977995 + ], + [ + 4.955353952640928, + 52.52921410734703 + ], + [ + 4.95528490298103, + 52.52922938550584 + ], + [ + 4.955215853273433, + 52.52924466362436 + ], + [ + 4.955146803518135, + 52.52925994170261 + ], + [ + 4.955077753715135, + 52.529275219740555 + ], + [ + 4.9550087038644355, + 52.52929049773824 + ], + [ + 4.954939654113395, + 52.52930577569619 + ], + [ + 4.954870604168174, + 52.52932105352341 + ], + [ + 4.954801554174371, + 52.52933633140028 + ], + [ + 4.95473250413287, + 52.529351609236784 + ], + [ + 4.954663497548115, + 52.52936695900068 + ], + [ + 4.954594501355421, + 52.529382326108006 + ], + [ + 4.954525507142592, + 52.52939769677745 + ], + [ + 4.954456518539879, + 52.52941307650457 + ], + [ + 4.954387529741829, + 52.52942845619088 + ], + [ + 4.954318541043164, + 52.52944383583755 + ], + [ + 4.954249552296517, + 52.52945921544399 + ], + [ + 4.954180563354539, + 52.529474595009695 + ], + [ + 4.954111574511942, + 52.52948997453571 + ], + [ + 4.954042585474008, + 52.52950535402099 + ], + [ + 4.953973566954579, + 52.529520684377445 + ], + [ + 4.9539052155567775, + 52.529537121227605 + ], + [ + 4.951275373792191, + 52.53016256522819 + ], + [ + 4.951235829063425, + 52.53017256162802 + ], + [ + 4.951169417554139, + 52.53019178229593 + ], + [ + 4.951103353010733, + 52.53021149805747 + ], + [ + 4.951037258247952, + 52.530231163971074 + ], + [ + 4.950970678904472, + 52.530250141342094 + ], + [ + 4.950904018803709, + 52.530269008463435 + ], + [ + 4.950836985178728, + 52.53028734248145 + ], + [ + 4.950769615376031, + 52.53030519691774 + ], + [ + 4.950736485866946, + 52.53031396191933 + ], + [ + 4.950701976907353, + 52.530323091939465 + ], + [ + 4.950634614709915, + 52.53034095603357 + ], + [ + 4.950567267286409, + 52.530358840635074 + ], + [ + 4.950499919954892, + 52.53037672528858 + ], + [ + 4.950432557592307, + 52.530394589447326 + ], + [ + 4.950365458453934, + 52.53041281798588 + ], + [ + 4.950297138828726, + 52.530429356143294 + ], + [ + 4.949972626972173, + 52.53053571532709 + ] + ] + }, + "properties": { + "id": 600126141, + "linkIdReversed": 0, + "fromNodeId": 251409055, + "toNodeId": 250409130, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 508.727485788318 + } + }, + { + "type": "Feature", + "id": 600126143, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.949838795167102, + 52.53057204359935 + ], + [ + 4.949655788026621, + 52.53029440533744 + ] + ] + }, + "properties": { + "id": 600126143, + "linkIdReversed": 0, + "fromNodeId": 250409131, + "toNodeId": 250409128, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 33.29524761882824 + } + }, + { + "type": "Feature", + "id": 600126144, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.949972626972173, + 52.53053571532709 + ], + [ + 4.949909192856507, + 52.53055274641777 + ], + [ + 4.949838795167102, + 52.53057204359935 + ] + ] + }, + "properties": { + "id": 600126144, + "linkIdReversed": 0, + "fromNodeId": 250409130, + "toNodeId": 250409131, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 9.940629878531333 + } + }, + { + "type": "Feature", + "id": 600455879, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.990506097929822, + 52.59716625958632 + ], + [ + 4.990594671875662, + 52.59728897624692 + ], + [ + 4.990626339416316, + 52.59733285082141 + ], + [ + 4.99067502592492, + 52.597400304135746 + ], + [ + 4.9908458691710695, + 52.59763699957224 + ], + [ + 4.99140553267203, + 52.59841236791395 + ], + [ + 4.991668157488042, + 52.59877620295359 + ], + [ + 4.992224779287744, + 52.59954731363604 + ], + [ + 4.992709008895388, + 52.60021811213389 + ], + [ + 4.992822690232393, + 52.600375590540345 + ], + [ + 4.993077219732089, + 52.60072817602161 + ], + [ + 4.993272481709995, + 52.600998657271305 + ], + [ + 4.9936434746494, + 52.601512554891904 + ], + [ + 4.99365462995902, + 52.60152800704024 + ], + [ + 4.9939384166219165, + 52.60192109792651 + ], + [ + 4.994328244387675, + 52.6024610602241 + ], + [ + 4.9944577619718125, + 52.60264045587812 + ], + [ + 4.994971534624732, + 52.60335206940896 + ], + [ + 4.995115486016336, + 52.603551448497875 + ], + [ + 4.995658595160646, + 52.60430366028938 + ], + [ + 4.995774269940593, + 52.604463867424165 + ], + [ + 4.996259061758745, + 52.60513528002634 + ], + [ + 4.996446505422742, + 52.605394874069994 + ], + [ + 4.99661539773003, + 52.60562877320625 + ], + [ + 4.996789215347784, + 52.60586960920997 + ], + [ + 4.99703594668041, + 52.60621146729848 + ], + [ + 4.997433574926619, + 52.60676238780747 + ], + [ + 4.997631519645929, + 52.607036637788156 + ], + [ + 4.997915537102804, + 52.607430134011445 + ], + [ + 4.998163115742023, + 52.60777313922208 + ], + [ + 4.998613801299787, + 52.60839752181081 + ], + [ + 4.998683374360806, + 52.608493907088324 + ], + [ + 4.999183946999505, + 52.60918737726732 + ], + [ + 4.999380176228366, + 52.60945921742078 + ], + [ + 4.999680426317695, + 52.60987515284176 + ], + [ + 4.99993557476304, + 52.610228602466485 + ], + [ + 5.000227451362375, + 52.61063292258224 + ], + [ + 5.00046002101285, + 52.61095508250063 + ], + [ + 5.000534379489359, + 52.61105808407805 + ], + [ + 5.000599891960123, + 52.61114954839421 + ], + [ + 5.000680486051946, + 52.61126206834347 + ], + [ + 5.000770432763695, + 52.611387644924264 + ], + [ + 5.0010046884258195, + 52.6117177027094 + ], + [ + 5.001102541930556, + 52.6118588115437 + ], + [ + 5.001144706367137, + 52.61191961408949 + ], + [ + 5.001170786151719, + 52.61195799728021 + ], + [ + 5.001370496922896, + 52.61225192185639 + ], + [ + 5.001480496724055, + 52.61241875099385 + ], + [ + 5.001580732916328, + 52.61257545314448 + ], + [ + 5.001596113654704, + 52.61259949816721 + ], + [ + 5.001694777788407, + 52.61275374116533 + ], + [ + 5.001876030965471, + 52.61304992329332 + ], + [ + 5.00191357189961, + 52.61311393236941 + ], + [ + 5.001989708506146, + 52.613243748009694 + ], + [ + 5.00207460093447, + 52.61338849170827 + ], + [ + 5.002197365476501, + 52.61360723175695 + ], + [ + 5.002306146507699, + 52.61380105456968 + ], + [ + 5.002326047945942, + 52.61383835151214 + ], + [ + 5.00253204617649, + 52.61422440573436 + ], + [ + 5.002543895228817, + 52.61424789196564 + ], + [ + 5.002605978254725, + 52.61437094710769 + ], + [ + 5.002705255704448, + 52.614567724213416 + ], + [ + 5.002789560257883, + 52.614739986136264 + ], + [ + 5.002796124647798, + 52.61475394161122 + ], + [ + 5.002883042592708, + 52.614938725015456 + ], + [ + 5.0029534639182485, + 52.61508843634039 + ], + [ + 5.003031842065212, + 52.61526173040865 + ], + [ + 5.003067516022821, + 52.6153434390263 + ] + ] + }, + "properties": { + "id": 600455879, + "linkIdReversed": 0, + "fromNodeId": 256424016, + "toNodeId": 600126063, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 2195.7890965586575 + } + }, + { + "type": "Feature", + "id": 600455880, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.003067516022821, + 52.6153434390263 + ], + [ + 5.003187357373059, + 52.615617924334906 + ], + [ + 5.003191340233758, + 52.61562743403115 + ], + [ + 5.003260177608632, + 52.61579179612222 + ], + [ + 5.003315948836793, + 52.61592966359425 + ], + [ + 5.003330779353858, + 52.61596632484454 + ], + [ + 5.003465958280536, + 52.61631627758508 + ], + [ + 5.003576729511582, + 52.61662088302354 + ], + [ + 5.003638086481854, + 52.61679672077824 + ], + [ + 5.003663416332683, + 52.61687138950285 + ], + [ + 5.0036978032180315, + 52.61697275631152 + ], + [ + 5.003799128675387, + 52.617285711547375 + ], + [ + 5.003852586908382, + 52.61746248621094 + ], + [ + 5.003955141329473, + 52.61781653993818 + ], + [ + 5.004005834412134, + 52.618004784806864 + ], + [ + 5.004035397722938, + 52.61811456490902 + ], + [ + 5.004144014522507, + 52.618552389310246 + ], + [ + 5.004223982958791, + 52.618908616717775 + ], + [ + 5.00429959824652, + 52.619265158948224 + ], + [ + 5.004406332155823, + 52.61980045523348 + ], + [ + 5.004440523228871, + 52.6199789873762 + ], + [ + 5.004447449352115, + 52.620017444605416 + ], + [ + 5.004514571793226, + 52.62039014152976 + ], + [ + 5.004569243091575, + 52.62069369920597 + ], + [ + 5.004718371396004, + 52.62145311517144 + ], + [ + 5.004788494333092, + 52.62181019755693 + ], + [ + 5.004793057674963, + 52.621833434861585 + ], + [ + 5.004818119791729, + 52.62196105540855 + ], + [ + 5.004835194982357, + 52.62204800513818 + ], + [ + 5.004836248734401, + 52.622053334494154 + ] + ] + }, + "properties": { + "id": 600455880, + "linkIdReversed": 0, + "fromNodeId": 600126063, + "toNodeId": 258430004, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 757.0340664976563 + } + }, + { + "type": "Feature", + "id": 600455881, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.005961111560706, + 52.629283159296136 + ], + [ + 5.005959418413479, + 52.62927463990271 + ], + [ + 5.005912827301744, + 52.629035895032324 + ], + [ + 5.005861222776356, + 52.628771457435676 + ], + [ + 5.0057994837021225, + 52.628455082786445 + ], + [ + 5.005756216330363, + 52.628233361749906 + ], + [ + 5.005578277597897, + 52.62732150044236 + ], + [ + 5.005569683073932, + 52.62727745644205 + ], + [ + 5.005458913550683, + 52.626713337576795 + ], + [ + 5.005080778066274, + 52.624787488587195 + ], + [ + 5.005011797261541, + 52.62443614977977 + ], + [ + 5.004661055320319, + 52.62264963627575 + ], + [ + 5.004508756997835, + 52.62187385552638 + ], + [ + 5.0042602894375445, + 52.620608145584285 + ], + [ + 5.004101776032497, + 52.6198006299958 + ], + [ + 5.004098493437278, + 52.61978409194286 + ], + [ + 5.004007777974713, + 52.619327054257454 + ], + [ + 5.003934162563497, + 52.618970374494126 + ], + [ + 5.003877470436514, + 52.6187129485191 + ], + [ + 5.003855695773883, + 52.618614074444174 + ], + [ + 5.003813545275727, + 52.6184361517919 + ], + [ + 5.003751291901783, + 52.618185873341034 + ], + [ + 5.003704365966554, + 52.61800839357263 + ], + [ + 5.003655381558661, + 52.61783113630898 + ], + [ + 5.003634875223837, + 52.617761249865204 + ], + [ + 5.003551544865156, + 52.61747725343063 + ], + [ + 5.003496571431027, + 52.61730064090049 + ], + [ + 5.00340887160903, + 52.617032177214895 + ], + [ + 5.003395157503272, + 52.61699220080846 + ], + [ + 5.003288130099084, + 52.61668021483381 + ], + [ + 5.003225266828653, + 52.61650457962837 + ], + [ + 5.003101348070092, + 52.61617458845676 + ], + [ + 5.003032410280574, + 52.61599979986112 + ], + [ + 5.002974237874545, + 52.61585943783645 + ], + [ + 5.002887951007876, + 52.61565123746163 + ], + [ + 5.002849430231485, + 52.615563658609865 + ], + [ + 5.002738053790397, + 52.61531043700897 + ] + ] + }, + "properties": { + "id": 600455881, + "linkIdReversed": 0, + "fromNodeId": 258431144, + "toNodeId": 600126064, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 1571.2635534767821 + } + }, + { + "type": "Feature", + "id": 600455882, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.002738053790397, + 52.61531043700897 + ], + [ + 5.002705381056388, + 52.61523615259178 + ], + [ + 5.002681682367432, + 52.615185007787616 + ], + [ + 5.002545064398186, + 52.61489016625977 + ], + [ + 5.00243684406561, + 52.61466551963353 + ], + [ + 5.002263321758506, + 52.61432186273568 + ], + [ + 5.002257005925656, + 52.61430986930464 + ], + [ + 5.002083037344727, + 52.61397951015024 + ], + [ + 5.001908266147303, + 52.61366143330402 + ], + [ + 5.001812156573193, + 52.613491738709044 + ], + [ + 5.001805065095785, + 52.61347956038673 + ], + [ + 5.001614833961356, + 52.61315286924101 + ], + [ + 5.001413990572722, + 52.6128232196115 + ], + [ + 5.001200884491992, + 52.61248795774284 + ], + [ + 5.0010171780177926, + 52.61220933738901 + ], + [ + 5.000904398189238, + 52.61204326627999 + ], + [ + 5.0008725454351985, + 52.61199750377156 + ], + [ + 5.000674010589852, + 52.61171226826155 + ], + [ + 5.000204123295343, + 52.61105261553053 + ], + [ + 4.999709412093817, + 52.61036963759879 + ], + [ + 4.999535264179374, + 52.61012921053717 + ], + [ + 4.998481331897635, + 52.60866805224369 + ], + [ + 4.998348157976457, + 52.608483414135 + ], + [ + 4.997175398649526, + 52.606859944915456 + ], + [ + 4.996399922881949, + 52.60578636931482 + ], + [ + 4.994511243864562, + 52.60317142424529 + ], + [ + 4.993284564178085, + 52.60147285832841 + ], + [ + 4.992729650818409, + 52.6007044304499 + ], + [ + 4.991418940500473, + 52.59888927969283 + ], + [ + 4.990638469740637, + 52.597808358629706 + ], + [ + 4.99041496762034, + 52.59749880634271 + ], + [ + 4.990326739176512, + 52.59737660774224 + ], + [ + 4.990191417908757, + 52.59718918325609 + ], + [ + 4.990171110802718, + 52.59716105697501 + ] + ] + }, + "properties": { + "id": 600455882, + "linkIdReversed": 0, + "fromNodeId": 600126064, + "toNodeId": 256424015, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 2193.0027368110273 + } + }, + { + "type": "Feature", + "id": 600767674, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 4.963846076183175, + 52.524027310735164 + ], + [ + 4.963848628766102, + 52.52403005910684 + ], + [ + 4.963880704273839, + 52.524076600841674 + ], + [ + 4.964152954972651, + 52.524521348186816 + ], + [ + 4.964180485653301, + 52.52455383394437 + ], + [ + 4.964228220017123, + 52.52459220380828 + ], + [ + 4.9642472249693865, + 52.52461052991432 + ], + [ + 4.964266384905864, + 52.52463404182772 + ], + [ + 4.96429312861453, + 52.5246728935122 + ], + [ + 4.964330230502828, + 52.52473236055339 + ], + [ + 4.964407536072666, + 52.524868027018 + ], + [ + 4.964609740253771, + 52.52519477047254 + ], + [ + 4.964733871443549, + 52.525400977491294 + ] + ] + }, + "properties": { + "id": 600767674, + "linkIdReversed": 0, + "fromNodeId": 600145067, + "toNodeId": 252408156, + "speedInKilometersPerHour": 100.0, + "reverseSpeedInKilometersPerHour": 100.0, + "distanceInMeters": 164.60704221829818 + } + } + ] +} diff --git a/map-matcher-library/src/test/resources/test-data/network_bidirectional.geojson b/map-matcher-library/src/test/resources/test-data/network_bidirectional.geojson new file mode 100644 index 00000000..72013f98 --- /dev/null +++ b/map-matcher-library/src/test/resources/test-data/network_bidirectional.geojson @@ -0,0 +1,9917 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "id": 3666076, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431601, + 52.178947 + ], + [ + 5.43111, + 52.178622 + ] + ] + }, + "properties": { + "id": 3666076, + "linkIdReversed": 0, + "fromNodeId": 596829, + "toNodeId": 3873575, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666077, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43111, + 52.178622 + ], + [ + 5.431077, + 52.1786 + ], + [ + 5.430663, + 52.178413 + ], + [ + 5.430526, + 52.178363 + ] + ] + }, + "properties": { + "id": 3666077, + "linkIdReversed": 0, + "fromNodeId": 3873575, + "toNodeId": 3873576, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666078, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430526, + 52.178363 + ], + [ + 5.430206, + 52.178246 + ], + [ + 5.429884, + 52.178165 + ], + [ + 5.429882, + 52.178165 + ] + ] + }, + "properties": { + "id": 3666078, + "linkIdReversed": 0, + "fromNodeId": 3873576, + "toNodeId": 3873577, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666079, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429882, + 52.178165 + ], + [ + 5.429507, + 52.178104 + ], + [ + 5.42918, + 52.178064 + ] + ] + }, + "properties": { + "id": 3666079, + "linkIdReversed": 0, + "fromNodeId": 3873577, + "toNodeId": 3873578, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666080, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42918, + 52.178064 + ], + [ + 5.429103, + 52.178055 + ], + [ + 5.428641, + 52.178005 + ], + [ + 5.428467, + 52.177998 + ] + ] + }, + "properties": { + "id": 3666080, + "linkIdReversed": 0, + "fromNodeId": 3873578, + "toNodeId": 3873579, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666081, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428467, + 52.177998 + ], + [ + 5.427836, + 52.177971 + ], + [ + 5.427747, + 52.17797 + ] + ] + }, + "properties": { + "id": 3666081, + "linkIdReversed": 0, + "fromNodeId": 3873579, + "toNodeId": 3873580, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666082, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427747, + 52.17797 + ], + [ + 5.427079, + 52.177963 + ], + [ + 5.427025, + 52.177964 + ] + ] + }, + "properties": { + "id": 3666082, + "linkIdReversed": 0, + "fromNodeId": 3873580, + "toNodeId": 3873581, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666083, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427025, + 52.177964 + ], + [ + 5.426695, + 52.177971 + ], + [ + 5.426323, + 52.178013 + ], + [ + 5.42631, + 52.178015 + ] + ] + }, + "properties": { + "id": 3666083, + "linkIdReversed": 0, + "fromNodeId": 3873581, + "toNodeId": 3873582, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666084, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42631, + 52.178015 + ], + [ + 5.42593, + 52.178082 + ], + [ + 5.425628, + 52.178159 + ] + ] + }, + "properties": { + "id": 3666084, + "linkIdReversed": 0, + "fromNodeId": 3873582, + "toNodeId": 3873583, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666085, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425628, + 52.178159 + ], + [ + 5.425557, + 52.178177 + ], + [ + 5.425227, + 52.178303 + ], + [ + 5.425037, + 52.178409 + ] + ] + }, + "properties": { + "id": 3666085, + "linkIdReversed": 0, + "fromNodeId": 3873583, + "toNodeId": 3873584, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666086, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425037, + 52.178409 + ], + [ + 5.424503, + 52.178707 + ] + ] + }, + "properties": { + "id": 3666086, + "linkIdReversed": 0, + "fromNodeId": 3873584, + "toNodeId": 596830, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.372 + } + }, + { + "type": "Feature", + "id": 3666087, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431601, + 52.178947 + ], + [ + 5.431217, + 52.178606 + ] + ] + }, + "properties": { + "id": 3666087, + "linkIdReversed": 0, + "fromNodeId": 596829, + "toNodeId": 3873585, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666088, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431217, + 52.178606 + ], + [ + 5.430834, + 52.178264 + ] + ] + }, + "properties": { + "id": 3666088, + "linkIdReversed": 0, + "fromNodeId": 3873585, + "toNodeId": 3873586, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666089, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430834, + 52.178264 + ], + [ + 5.43045, + 52.177923 + ] + ] + }, + "properties": { + "id": 3666089, + "linkIdReversed": 0, + "fromNodeId": 3873586, + "toNodeId": 3873587, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666090, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43045, + 52.177923 + ], + [ + 5.430067, + 52.177581 + ] + ] + }, + "properties": { + "id": 3666090, + "linkIdReversed": 0, + "fromNodeId": 3873587, + "toNodeId": 3873588, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666091, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430067, + 52.177581 + ], + [ + 5.429754, + 52.177303 + ], + [ + 5.429681, + 52.177241 + ] + ] + }, + "properties": { + "id": 3666091, + "linkIdReversed": 0, + "fromNodeId": 3873588, + "toNodeId": 3873589, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666092, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429681, + 52.177241 + ], + [ + 5.429287, + 52.176904 + ] + ] + }, + "properties": { + "id": 3666092, + "linkIdReversed": 0, + "fromNodeId": 3873589, + "toNodeId": 3873590, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666093, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429287, + 52.176904 + ], + [ + 5.428893, + 52.176567 + ] + ] + }, + "properties": { + "id": 3666093, + "linkIdReversed": 0, + "fromNodeId": 3873590, + "toNodeId": 596831, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.171 + } + }, + { + "type": "Feature", + "id": 3666094, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432959, + 52.180065 + ], + [ + 5.432619, + 52.179786 + ] + ] + }, + "properties": { + "id": 3666094, + "linkIdReversed": 0, + "fromNodeId": 596832, + "toNodeId": 3873591, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666095, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432619, + 52.179786 + ], + [ + 5.43228, + 52.179506 + ] + ] + }, + "properties": { + "id": 3666095, + "linkIdReversed": 0, + "fromNodeId": 3873591, + "toNodeId": 3873592, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666096, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43228, + 52.179506 + ], + [ + 5.43194, + 52.179227 + ] + ] + }, + "properties": { + "id": 3666096, + "linkIdReversed": 0, + "fromNodeId": 3873592, + "toNodeId": 3873593, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666097, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43194, + 52.179227 + ], + [ + 5.431601, + 52.178947 + ] + ] + }, + "properties": { + "id": 3666097, + "linkIdReversed": 0, + "fromNodeId": 3873593, + "toNodeId": 596829, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.814 + } + }, + { + "type": "Feature", + "id": 3666098, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427439, + 52.176617 + ], + [ + 5.427006, + 52.176908 + ] + ] + }, + "properties": { + "id": 3666098, + "linkIdReversed": 0, + "fromNodeId": 596833, + "toNodeId": 3873594, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666099, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427006, + 52.176908 + ], + [ + 5.426791, + 52.177052 + ], + [ + 5.426578, + 52.177202 + ] + ] + }, + "properties": { + "id": 3666099, + "linkIdReversed": 0, + "fromNodeId": 3873594, + "toNodeId": 3873595, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666100, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426578, + 52.177202 + ], + [ + 5.426155, + 52.177499 + ] + ] + }, + "properties": { + "id": 3666100, + "linkIdReversed": 0, + "fromNodeId": 3873595, + "toNodeId": 3873596, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666101, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426155, + 52.177499 + ], + [ + 5.425733, + 52.177796 + ] + ] + }, + "properties": { + "id": 3666101, + "linkIdReversed": 0, + "fromNodeId": 3873596, + "toNodeId": 3873597, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666102, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425733, + 52.177796 + ], + [ + 5.425619, + 52.177876 + ], + [ + 5.42532, + 52.178098 + ] + ] + }, + "properties": { + "id": 3666102, + "linkIdReversed": 0, + "fromNodeId": 3873597, + "toNodeId": 3873598, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666103, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42532, + 52.178098 + ], + [ + 5.424912, + 52.178403 + ] + ] + }, + "properties": { + "id": 3666103, + "linkIdReversed": 0, + "fromNodeId": 3873598, + "toNodeId": 3873599, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666104, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424912, + 52.178403 + ], + [ + 5.424503, + 52.178707 + ] + ] + }, + "properties": { + "id": 3666104, + "linkIdReversed": 0, + "fromNodeId": 3873599, + "toNodeId": 596830, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.905 + } + }, + { + "type": "Feature", + "id": 3666105, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424503, + 52.178707 + ], + [ + 5.424101, + 52.178989 + ] + ] + }, + "properties": { + "id": 3666105, + "linkIdReversed": 0, + "fromNodeId": 596830, + "toNodeId": 3873600, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666106, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424101, + 52.178989 + ], + [ + 5.4237, + 52.179271 + ] + ] + }, + "properties": { + "id": 3666106, + "linkIdReversed": 0, + "fromNodeId": 3873600, + "toNodeId": 3873601, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666107, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.4237, + 52.179271 + ], + [ + 5.423427, + 52.179462 + ], + [ + 5.423301, + 52.179555 + ] + ] + }, + "properties": { + "id": 3666107, + "linkIdReversed": 0, + "fromNodeId": 3873601, + "toNodeId": 3873602, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666108, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423301, + 52.179555 + ], + [ + 5.422911, + 52.179842 + ] + ] + }, + "properties": { + "id": 3666108, + "linkIdReversed": 0, + "fromNodeId": 3873602, + "toNodeId": 3873603, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666109, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422911, + 52.179842 + ], + [ + 5.42252, + 52.18013 + ] + ] + }, + "properties": { + "id": 3666109, + "linkIdReversed": 0, + "fromNodeId": 3873603, + "toNodeId": 596834, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.702 + } + }, + { + "type": "Feature", + "id": 3666110, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427436, + 52.175301 + ], + [ + 5.427038, + 52.174931 + ] + ] + }, + "properties": { + "id": 3666110, + "linkIdReversed": 0, + "fromNodeId": 596835, + "toNodeId": 3873604, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666111, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427038, + 52.174931 + ], + [ + 5.426641, + 52.174561 + ] + ] + }, + "properties": { + "id": 3666111, + "linkIdReversed": 0, + "fromNodeId": 3873604, + "toNodeId": 3873605, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666112, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426641, + 52.174561 + ], + [ + 5.426505, + 52.174435 + ], + [ + 5.426269, + 52.174182 + ] + ] + }, + "properties": { + "id": 3666112, + "linkIdReversed": 0, + "fromNodeId": 3873605, + "toNodeId": 3873606, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666113, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426269, + 52.174182 + ], + [ + 5.42591, + 52.173797 + ] + ] + }, + "properties": { + "id": 3666113, + "linkIdReversed": 0, + "fromNodeId": 3873606, + "toNodeId": 3873607, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666114, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42591, + 52.173797 + ], + [ + 5.425682, + 52.173553 + ], + [ + 5.425613, + 52.173397 + ] + ] + }, + "properties": { + "id": 3666114, + "linkIdReversed": 0, + "fromNodeId": 3873607, + "toNodeId": 596836, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.328 + } + }, + { + "type": "Feature", + "id": 3666115, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427436, + 52.175301 + ], + [ + 5.427168, + 52.175137 + ], + [ + 5.426982, + 52.17506 + ], + [ + 5.426875, + 52.175031 + ] + ] + }, + "properties": { + "id": 3666115, + "linkIdReversed": 0, + "fromNodeId": 596835, + "toNodeId": 3873608, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666116, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426875, + 52.175031 + ], + [ + 5.426734, + 52.174992 + ], + [ + 5.426459, + 52.174976 + ], + [ + 5.426199, + 52.174995 + ], + [ + 5.426173, + 52.175001 + ] + ] + }, + "properties": { + "id": 3666116, + "linkIdReversed": 0, + "fromNodeId": 3873608, + "toNodeId": 3873609, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666117, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426173, + 52.175001 + ], + [ + 5.425914, + 52.17506 + ], + [ + 5.425746, + 52.17514 + ], + [ + 5.425612, + 52.175228 + ], + [ + 5.425594, + 52.175247 + ] + ] + }, + "properties": { + "id": 3666117, + "linkIdReversed": 0, + "fromNodeId": 3873609, + "toNodeId": 3873610, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666118, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425594, + 52.175247 + ], + [ + 5.425488, + 52.175358 + ], + [ + 5.425406, + 52.175503 + ], + [ + 5.425382, + 52.175662 + ] + ] + }, + "properties": { + "id": 3666118, + "linkIdReversed": 0, + "fromNodeId": 3873610, + "toNodeId": 3873611, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666119, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425382, + 52.175662 + ], + [ + 5.425381, + 52.175671 + ], + [ + 5.425436, + 52.175835 + ], + [ + 5.425518, + 52.175953 + ], + [ + 5.425622, + 52.176044 + ], + [ + 5.425653, + 52.176063 + ] + ] + }, + "properties": { + "id": 3666119, + "linkIdReversed": 0, + "fromNodeId": 3873611, + "toNodeId": 3873612, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666120, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425653, + 52.176063 + ], + [ + 5.425793, + 52.176147 + ], + [ + 5.426001, + 52.176224 + ], + [ + 5.426264, + 52.17627 + ], + [ + 5.426272, + 52.176271 + ] + ] + }, + "properties": { + "id": 3666120, + "linkIdReversed": 0, + "fromNodeId": 3873612, + "toNodeId": 3873613, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666121, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426272, + 52.176271 + ], + [ + 5.426511, + 52.176289 + ], + [ + 5.426772, + 52.176262 + ], + [ + 5.426965, + 52.176204 + ] + ] + }, + "properties": { + "id": 3666121, + "linkIdReversed": 0, + "fromNodeId": 3873613, + "toNodeId": 3873614, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666122, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426965, + 52.176204 + ], + [ + 5.427002, + 52.176193 + ], + [ + 5.427353, + 52.176022 + ], + [ + 5.427542, + 52.175941 + ] + ] + }, + "properties": { + "id": 3666122, + "linkIdReversed": 0, + "fromNodeId": 3873614, + "toNodeId": 596837, + "speedInKilometersPerHour": 79.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.247 + } + }, + { + "type": "Feature", + "id": 3666123, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427756, + 52.175579 + ], + [ + 5.427436, + 52.175301 + ] + ] + }, + "properties": { + "id": 3666123, + "linkIdReversed": 0, + "fromNodeId": 596838, + "toNodeId": 596835, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.896 + } + }, + { + "type": "Feature", + "id": 3666124, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427942, + 52.175461 + ], + [ + 5.427554, + 52.175117 + ] + ] + }, + "properties": { + "id": 3666124, + "linkIdReversed": 0, + "fromNodeId": 596839, + "toNodeId": 3873615, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666125, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427554, + 52.175117 + ], + [ + 5.427166, + 52.174773 + ] + ] + }, + "properties": { + "id": 3666125, + "linkIdReversed": 0, + "fromNodeId": 3873615, + "toNodeId": 3873616, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666126, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427166, + 52.174773 + ], + [ + 5.426777, + 52.174429 + ] + ] + }, + "properties": { + "id": 3666126, + "linkIdReversed": 0, + "fromNodeId": 3873616, + "toNodeId": 3873617, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666127, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426777, + 52.174429 + ], + [ + 5.426389, + 52.174085 + ] + ] + }, + "properties": { + "id": 3666127, + "linkIdReversed": 0, + "fromNodeId": 3873617, + "toNodeId": 3873618, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666128, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426389, + 52.174085 + ], + [ + 5.426001, + 52.173741 + ] + ] + }, + "properties": { + "id": 3666128, + "linkIdReversed": 0, + "fromNodeId": 3873618, + "toNodeId": 3873619, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666129, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426001, + 52.173741 + ], + [ + 5.425613, + 52.173397 + ] + ] + }, + "properties": { + "id": 3666129, + "linkIdReversed": 0, + "fromNodeId": 3873619, + "toNodeId": 596836, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.586 + } + }, + { + "type": "Feature", + "id": 3666130, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425613, + 52.173397 + ], + [ + 5.425311, + 52.173067 + ] + ] + }, + "properties": { + "id": 3666130, + "linkIdReversed": 0, + "fromNodeId": 596836, + "toNodeId": 3873620, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.122 + } + }, + { + "type": "Feature", + "id": 3666131, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425311, + 52.173067 + ], + [ + 5.425306, + 52.173061 + ], + [ + 5.425025, + 52.172732 + ] + ] + }, + "properties": { + "id": 3666131, + "linkIdReversed": 0, + "fromNodeId": 3873620, + "toNodeId": 3873621, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.122 + } + }, + { + "type": "Feature", + "id": 3666132, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425025, + 52.172732 + ], + [ + 5.42488, + 52.172562 + ], + [ + 5.424755, + 52.172392 + ] + ] + }, + "properties": { + "id": 3666132, + "linkIdReversed": 0, + "fromNodeId": 3873621, + "toNodeId": 3873622, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.122 + } + }, + { + "type": "Feature", + "id": 3666204, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42861, + 52.176056 + ], + [ + 5.428276, + 52.175759 + ] + ] + }, + "properties": { + "id": 3666204, + "linkIdReversed": 0, + "fromNodeId": 596855, + "toNodeId": 3873665, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.223 + } + }, + { + "type": "Feature", + "id": 3666205, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428276, + 52.175759 + ], + [ + 5.427942, + 52.175461 + ] + ] + }, + "properties": { + "id": 3666205, + "linkIdReversed": 0, + "fromNodeId": 3873665, + "toNodeId": 596839, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.223 + } + }, + { + "type": "Feature", + "id": 3666210, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424717, + 52.172107 + ], + [ + 5.425023, + 52.172495 + ] + ] + }, + "properties": { + "id": 3666210, + "linkIdReversed": 0, + "fromNodeId": 3873669, + "toNodeId": 3873670, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666211, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425023, + 52.172495 + ], + [ + 5.425043, + 52.17252 + ], + [ + 5.425335, + 52.17288 + ] + ] + }, + "properties": { + "id": 3666211, + "linkIdReversed": 0, + "fromNodeId": 3873670, + "toNodeId": 3873671, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666212, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425335, + 52.17288 + ], + [ + 5.425417, + 52.172981 + ], + [ + 5.425689, + 52.173251 + ] + ] + }, + "properties": { + "id": 3666212, + "linkIdReversed": 0, + "fromNodeId": 3873671, + "toNodeId": 3873672, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666213, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425689, + 52.173251 + ], + [ + 5.426053, + 52.173611 + ], + [ + 5.426059, + 52.173617 + ] + ] + }, + "properties": { + "id": 3666213, + "linkIdReversed": 0, + "fromNodeId": 3873672, + "toNodeId": 3873673, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666214, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426059, + 52.173617 + ], + [ + 5.426461, + 52.173969 + ] + ] + }, + "properties": { + "id": 3666214, + "linkIdReversed": 0, + "fromNodeId": 3873673, + "toNodeId": 3873674, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666215, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426461, + 52.173969 + ], + [ + 5.426862, + 52.174322 + ] + ] + }, + "properties": { + "id": 3666215, + "linkIdReversed": 0, + "fromNodeId": 3873674, + "toNodeId": 3873675, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666216, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426862, + 52.174322 + ], + [ + 5.427263, + 52.174675 + ] + ] + }, + "properties": { + "id": 3666216, + "linkIdReversed": 0, + "fromNodeId": 3873675, + "toNodeId": 3873676, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666217, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427263, + 52.174675 + ], + [ + 5.427665, + 52.175028 + ] + ] + }, + "properties": { + "id": 3666217, + "linkIdReversed": 0, + "fromNodeId": 3873676, + "toNodeId": 3873677, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666218, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427665, + 52.175028 + ], + [ + 5.428066, + 52.175381 + ] + ] + }, + "properties": { + "id": 3666218, + "linkIdReversed": 0, + "fromNodeId": 3873677, + "toNodeId": 596857, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.912 + } + }, + { + "type": "Feature", + "id": 3666220, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428066, + 52.175381 + ], + [ + 5.428403, + 52.175677 + ] + ] + }, + "properties": { + "id": 3666220, + "linkIdReversed": 0, + "fromNodeId": 596857, + "toNodeId": 3873678, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.157 + } + }, + { + "type": "Feature", + "id": 3666221, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428403, + 52.175677 + ], + [ + 5.42874, + 52.175972 + ] + ] + }, + "properties": { + "id": 3666221, + "linkIdReversed": 0, + "fromNodeId": 3873678, + "toNodeId": 596859, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.157 + } + }, + { + "type": "Feature", + "id": 3666222, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42496, + 52.172169 + ], + [ + 5.425194, + 52.172501 + ], + [ + 5.42524, + 52.172555 + ] + ] + }, + "properties": { + "id": 3666222, + "linkIdReversed": 0, + "fromNodeId": 596860, + "toNodeId": 3873679, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.076 + } + }, + { + "type": "Feature", + "id": 3666223, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42524, + 52.172555 + ], + [ + 5.425388, + 52.172729 + ], + [ + 5.425577, + 52.172924 + ] + ] + }, + "properties": { + "id": 3666223, + "linkIdReversed": 0, + "fromNodeId": 3873679, + "toNodeId": 596861, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.076 + } + }, + { + "type": "Feature", + "id": 3666224, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42496, + 52.172169 + ], + [ + 5.425298, + 52.172462 + ], + [ + 5.425348, + 52.172509 + ] + ] + }, + "properties": { + "id": 3666224, + "linkIdReversed": 0, + "fromNodeId": 596860, + "toNodeId": 3873680, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666225, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425348, + 52.172509 + ], + [ + 5.425448, + 52.172604 + ], + [ + 5.42564, + 52.17276 + ], + [ + 5.42576, + 52.172837 + ] + ] + }, + "properties": { + "id": 3666225, + "linkIdReversed": 0, + "fromNodeId": 3873680, + "toNodeId": 3873681, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666226, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42576, + 52.172837 + ], + [ + 5.425812, + 52.172871 + ], + [ + 5.425988, + 52.172958 + ], + [ + 5.426297, + 52.173088 + ] + ] + }, + "properties": { + "id": 3666226, + "linkIdReversed": 0, + "fromNodeId": 3873681, + "toNodeId": 3873682, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666227, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426297, + 52.173088 + ], + [ + 5.426332, + 52.173103 + ], + [ + 5.426621, + 52.173206 + ], + [ + 5.426899, + 52.173274 + ] + ] + }, + "properties": { + "id": 3666227, + "linkIdReversed": 0, + "fromNodeId": 3873682, + "toNodeId": 3873683, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666228, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426899, + 52.173274 + ], + [ + 5.426995, + 52.173298 + ], + [ + 5.427433, + 52.173359 + ], + [ + 5.427556, + 52.173366 + ] + ] + }, + "properties": { + "id": 3666228, + "linkIdReversed": 0, + "fromNodeId": 3873683, + "toNodeId": 3873684, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666229, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427556, + 52.173366 + ], + [ + 5.427933, + 52.173389 + ], + [ + 5.42823, + 52.173395 + ] + ] + }, + "properties": { + "id": 3666229, + "linkIdReversed": 0, + "fromNodeId": 3873684, + "toNodeId": 3873685, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666230, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42823, + 52.173395 + ], + [ + 5.428576, + 52.173401 + ], + [ + 5.428905, + 52.173399 + ] + ] + }, + "properties": { + "id": 3666230, + "linkIdReversed": 0, + "fromNodeId": 3873685, + "toNodeId": 3873686, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666231, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428905, + 52.173399 + ], + [ + 5.429581, + 52.173394 + ] + ] + }, + "properties": { + "id": 3666231, + "linkIdReversed": 0, + "fromNodeId": 3873686, + "toNodeId": 3873687, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666232, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429581, + 52.173394 + ], + [ + 5.430187, + 52.173389 + ], + [ + 5.430257, + 52.173387 + ] + ] + }, + "properties": { + "id": 3666232, + "linkIdReversed": 0, + "fromNodeId": 3873687, + "toNodeId": 3873688, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666233, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430257, + 52.173387 + ], + [ + 5.430814, + 52.17337 + ], + [ + 5.430931, + 52.173363 + ] + ] + }, + "properties": { + "id": 3666233, + "linkIdReversed": 0, + "fromNodeId": 3873688, + "toNodeId": 3873689, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666234, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430931, + 52.173363 + ], + [ + 5.431254, + 52.173344 + ], + [ + 5.4316, + 52.173307 + ] + ] + }, + "properties": { + "id": 3666234, + "linkIdReversed": 0, + "fromNodeId": 3873689, + "toNodeId": 3873690, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666235, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.4316, + 52.173307 + ], + [ + 5.431607, + 52.173306 + ], + [ + 5.431988, + 52.173225 + ], + [ + 5.432235, + 52.173164 + ] + ] + }, + "properties": { + "id": 3666235, + "linkIdReversed": 0, + "fromNodeId": 3873690, + "toNodeId": 3873691, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666236, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432235, + 52.173164 + ], + [ + 5.432294, + 52.173149 + ], + [ + 5.432825, + 52.172962 + ] + ] + }, + "properties": { + "id": 3666236, + "linkIdReversed": 0, + "fromNodeId": 3873691, + "toNodeId": 596862, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.237 + } + }, + { + "type": "Feature", + "id": 3666240, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425577, + 52.172924 + ], + [ + 5.425919, + 52.173229 + ], + [ + 5.425982, + 52.173288 + ] + ] + }, + "properties": { + "id": 3666240, + "linkIdReversed": 0, + "fromNodeId": 596861, + "toNodeId": 3873694, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666241, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425982, + 52.173288 + ], + [ + 5.426368, + 52.173653 + ], + [ + 5.426373, + 52.173657 + ] + ] + }, + "properties": { + "id": 3666241, + "linkIdReversed": 0, + "fromNodeId": 3873694, + "toNodeId": 3873695, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666242, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426373, + 52.173657 + ], + [ + 5.426785, + 52.174018 + ] + ] + }, + "properties": { + "id": 3666242, + "linkIdReversed": 0, + "fromNodeId": 3873695, + "toNodeId": 3873696, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666243, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426785, + 52.174018 + ], + [ + 5.427197, + 52.174379 + ] + ] + }, + "properties": { + "id": 3666243, + "linkIdReversed": 0, + "fromNodeId": 3873696, + "toNodeId": 3873697, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666244, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427197, + 52.174379 + ], + [ + 5.427609, + 52.17474 + ] + ] + }, + "properties": { + "id": 3666244, + "linkIdReversed": 0, + "fromNodeId": 3873697, + "toNodeId": 596864, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.058 + } + }, + { + "type": "Feature", + "id": 3666245, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432825, + 52.172962 + ], + [ + 5.433299, + 52.172748 + ] + ] + }, + "properties": { + "id": 3666245, + "linkIdReversed": 0, + "fromNodeId": 596862, + "toNodeId": 3873698, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.191 + } + }, + { + "type": "Feature", + "id": 3666256, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433595, + 52.173101 + ], + [ + 5.433133, + 52.173317 + ] + ] + }, + "properties": { + "id": 3666256, + "linkIdReversed": 0, + "fromNodeId": 3873704, + "toNodeId": 596870, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 39.714 + } + }, + { + "type": "Feature", + "id": 3666943, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428893, + 52.176567 + ], + [ + 5.42866, + 52.176369 + ] + ] + }, + "properties": { + "id": 3666943, + "linkIdReversed": 0, + "fromNodeId": 596831, + "toNodeId": 3874089, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 27.238 + } + }, + { + "type": "Feature", + "id": 3666944, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42866, + 52.176369 + ], + [ + 5.428427, + 52.17617 + ] + ] + }, + "properties": { + "id": 3666944, + "linkIdReversed": 0, + "fromNodeId": 3874089, + "toNodeId": 597005, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 27.238 + } + }, + { + "type": "Feature", + "id": 3666945, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427439, + 52.176617 + ], + [ + 5.427327, + 52.176769 + ], + [ + 5.42723, + 52.176865 + ], + [ + 5.427172, + 52.176952 + ], + [ + 5.427161, + 52.176984 + ] + ] + }, + "properties": { + "id": 3666945, + "linkIdReversed": 0, + "fromNodeId": 596833, + "toNodeId": 3874090, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666946, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427161, + 52.176984 + ], + [ + 5.427141, + 52.17704 + ], + [ + 5.427121, + 52.177132 + ], + [ + 5.427129, + 52.177223 + ], + [ + 5.42715, + 52.177307 + ], + [ + 5.427181, + 52.177376 + ], + [ + 5.427187, + 52.177384 + ] + ] + }, + "properties": { + "id": 3666946, + "linkIdReversed": 0, + "fromNodeId": 3874090, + "toNodeId": 3874091, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666947, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427187, + 52.177384 + ], + [ + 5.427232, + 52.177437 + ], + [ + 5.427304, + 52.177521 + ], + [ + 5.427391, + 52.177582 + ], + [ + 5.427467, + 52.177624 + ], + [ + 5.427556, + 52.17767 + ], + [ + 5.427604, + 52.177691 + ] + ] + }, + "properties": { + "id": 3666947, + "linkIdReversed": 0, + "fromNodeId": 3874091, + "toNodeId": 3874092, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666948, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427604, + 52.177691 + ], + [ + 5.427657, + 52.177715 + ], + [ + 5.427782, + 52.177753 + ], + [ + 5.428007, + 52.177795 + ], + [ + 5.428181, + 52.177799 + ], + [ + 5.428227, + 52.177798 + ] + ] + }, + "properties": { + "id": 3666948, + "linkIdReversed": 0, + "fromNodeId": 3874092, + "toNodeId": 3874093, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666949, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428227, + 52.177798 + ], + [ + 5.428348, + 52.177795 + ], + [ + 5.428487, + 52.177773 + ], + [ + 5.428694, + 52.177719 + ], + [ + 5.428826, + 52.177673 + ], + [ + 5.428841, + 52.177664 + ] + ] + }, + "properties": { + "id": 3666949, + "linkIdReversed": 0, + "fromNodeId": 3874093, + "toNodeId": 3874094, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666950, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428841, + 52.177664 + ], + [ + 5.428947, + 52.177605 + ], + [ + 5.429062, + 52.177505 + ], + [ + 5.429166, + 52.177399 + ], + [ + 5.429198, + 52.17733 + ] + ] + }, + "properties": { + "id": 3666950, + "linkIdReversed": 0, + "fromNodeId": 3874094, + "toNodeId": 3874095, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666951, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429198, + 52.17733 + ], + [ + 5.429225, + 52.177269 + ], + [ + 5.42924, + 52.177147 + ], + [ + 5.429227, + 52.177032 + ], + [ + 5.429199, + 52.176933 + ], + [ + 5.429195, + 52.176928 + ] + ] + }, + "properties": { + "id": 3666951, + "linkIdReversed": 0, + "fromNodeId": 3874095, + "toNodeId": 3874096, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666952, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429195, + 52.176928 + ], + [ + 5.429106, + 52.1768 + ], + [ + 5.428893, + 52.176567 + ] + ] + }, + "properties": { + "id": 3666952, + "linkIdReversed": 0, + "fromNodeId": 3874096, + "toNodeId": 596831, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.233 + } + }, + { + "type": "Feature", + "id": 3666953, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428427, + 52.17617 + ], + [ + 5.428091, + 52.175875 + ] + ] + }, + "properties": { + "id": 3666953, + "linkIdReversed": 0, + "fromNodeId": 597005, + "toNodeId": 3874097, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.098 + } + }, + { + "type": "Feature", + "id": 3666954, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428091, + 52.175875 + ], + [ + 5.427756, + 52.175579 + ] + ] + }, + "properties": { + "id": 3666954, + "linkIdReversed": 0, + "fromNodeId": 3874097, + "toNodeId": 596838, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.098 + } + }, + { + "type": "Feature", + "id": 3666955, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429194, + 52.175465 + ], + [ + 5.428755, + 52.175753 + ] + ] + }, + "properties": { + "id": 3666955, + "linkIdReversed": 0, + "fromNodeId": 597006, + "toNodeId": 3874098, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666956, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428755, + 52.175753 + ], + [ + 5.428317, + 52.176041 + ] + ] + }, + "properties": { + "id": 3666956, + "linkIdReversed": 0, + "fromNodeId": 3874098, + "toNodeId": 3874099, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666957, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428317, + 52.176041 + ], + [ + 5.427878, + 52.176329 + ] + ] + }, + "properties": { + "id": 3666957, + "linkIdReversed": 0, + "fromNodeId": 3874099, + "toNodeId": 3874100, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666958, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427878, + 52.176329 + ], + [ + 5.427439, + 52.176617 + ] + ] + }, + "properties": { + "id": 3666958, + "linkIdReversed": 0, + "fromNodeId": 3874100, + "toNodeId": 596833, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.907 + } + }, + { + "type": "Feature", + "id": 3666959, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429265, + 52.176201 + ], + [ + 5.429654, + 52.176545 + ] + ] + }, + "properties": { + "id": 3666959, + "linkIdReversed": 0, + "fromNodeId": 597007, + "toNodeId": 3874101, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666960, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429654, + 52.176545 + ], + [ + 5.430043, + 52.176889 + ] + ] + }, + "properties": { + "id": 3666960, + "linkIdReversed": 0, + "fromNodeId": 3874101, + "toNodeId": 3874102, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666961, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430043, + 52.176889 + ], + [ + 5.430279, + 52.177097 + ], + [ + 5.430433, + 52.177232 + ] + ] + }, + "properties": { + "id": 3666961, + "linkIdReversed": 0, + "fromNodeId": 3874102, + "toNodeId": 3874103, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666962, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430433, + 52.177232 + ], + [ + 5.430824, + 52.177575 + ] + ] + }, + "properties": { + "id": 3666962, + "linkIdReversed": 0, + "fromNodeId": 3874103, + "toNodeId": 3874104, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666963, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430824, + 52.177575 + ], + [ + 5.431216, + 52.177918 + ] + ] + }, + "properties": { + "id": 3666963, + "linkIdReversed": 0, + "fromNodeId": 3874104, + "toNodeId": 3874105, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666964, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431216, + 52.177918 + ], + [ + 5.431607, + 52.178261 + ] + ] + }, + "properties": { + "id": 3666964, + "linkIdReversed": 0, + "fromNodeId": 3874105, + "toNodeId": 3874106, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666965, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431607, + 52.178261 + ], + [ + 5.431998, + 52.178604 + ] + ] + }, + "properties": { + "id": 3666965, + "linkIdReversed": 0, + "fromNodeId": 3874106, + "toNodeId": 597008, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.609 + } + }, + { + "type": "Feature", + "id": 3666966, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429265, + 52.176201 + ], + [ + 5.429613, + 52.176346 + ], + [ + 5.429734, + 52.176395 + ], + [ + 5.429861, + 52.176427 + ] + ] + }, + "properties": { + "id": 3666966, + "linkIdReversed": 0, + "fromNodeId": 597007, + "toNodeId": 3874107, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666967, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429861, + 52.176427 + ], + [ + 5.4299, + 52.176437 + ], + [ + 5.430044, + 52.176464 + ], + [ + 5.430235, + 52.176476 + ], + [ + 5.430438, + 52.176464 + ], + [ + 5.430548, + 52.176444 + ] + ] + }, + "properties": { + "id": 3666967, + "linkIdReversed": 0, + "fromNodeId": 3874107, + "toNodeId": 3874108, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666968, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430548, + 52.176444 + ], + [ + 5.430564, + 52.176441 + ], + [ + 5.430718, + 52.176399 + ], + [ + 5.430852, + 52.17635 + ], + [ + 5.430956, + 52.176308 + ], + [ + 5.431067, + 52.176231 + ], + [ + 5.431104, + 52.176194 + ] + ] + }, + "properties": { + "id": 3666968, + "linkIdReversed": 0, + "fromNodeId": 3874108, + "toNodeId": 3874109, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666969, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431104, + 52.176194 + ], + [ + 5.431154, + 52.176144 + ], + [ + 5.431248, + 52.176025 + ], + [ + 5.431298, + 52.175888 + ], + [ + 5.431298, + 52.175788 + ] + ] + }, + "properties": { + "id": 3666969, + "linkIdReversed": 0, + "fromNodeId": 3874109, + "toNodeId": 3874110, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666970, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431298, + 52.175788 + ], + [ + 5.431298, + 52.175716 + ], + [ + 5.431243, + 52.175579 + ], + [ + 5.431151, + 52.175453 + ], + [ + 5.431058, + 52.175395 + ] + ] + }, + "properties": { + "id": 3666970, + "linkIdReversed": 0, + "fromNodeId": 3874110, + "toNodeId": 3874111, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666971, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431058, + 52.175395 + ], + [ + 5.430968, + 52.175339 + ], + [ + 5.430759, + 52.175243 + ], + [ + 5.430482, + 52.175175 + ], + [ + 5.430466, + 52.175174 + ] + ] + }, + "properties": { + "id": 3666971, + "linkIdReversed": 0, + "fromNodeId": 3874111, + "toNodeId": 3874112, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666972, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430466, + 52.175174 + ], + [ + 5.430201, + 52.175163 + ], + [ + 5.429923, + 52.17519 + ], + [ + 5.42978, + 52.175228 + ] + ] + }, + "properties": { + "id": 3666972, + "linkIdReversed": 0, + "fromNodeId": 3874112, + "toNodeId": 3874113, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666973, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42978, + 52.175228 + ], + [ + 5.429733, + 52.17524 + ], + [ + 5.429437, + 52.175358 + ], + [ + 5.429194, + 52.175465 + ] + ] + }, + "properties": { + "id": 3666973, + "linkIdReversed": 0, + "fromNodeId": 3874113, + "toNodeId": 597006, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.088 + } + }, + { + "type": "Feature", + "id": 3666974, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428897, + 52.175877 + ], + [ + 5.429265, + 52.176201 + ] + ] + }, + "properties": { + "id": 3666974, + "linkIdReversed": 0, + "fromNodeId": 597009, + "toNodeId": 597007, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 43.971 + } + }, + { + "type": "Feature", + "id": 3666975, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433133, + 52.173317 + ], + [ + 5.43269, + 52.173648 + ] + ] + }, + "properties": { + "id": 3666975, + "linkIdReversed": 0, + "fromNodeId": 596870, + "toNodeId": 3874114, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666976, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43269, + 52.173648 + ], + [ + 5.432576, + 52.173733 + ], + [ + 5.432343, + 52.173916 + ], + [ + 5.432279, + 52.173993 + ] + ] + }, + "properties": { + "id": 3666976, + "linkIdReversed": 0, + "fromNodeId": 3874114, + "toNodeId": 3874115, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666977, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432279, + 52.173993 + ], + [ + 5.432025, + 52.174301 + ], + [ + 5.431992, + 52.174382 + ] + ] + }, + "properties": { + "id": 3666977, + "linkIdReversed": 0, + "fromNodeId": 3874115, + "toNodeId": 3874116, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666978, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431992, + 52.174382 + ], + [ + 5.431855, + 52.174713 + ], + [ + 5.431839, + 52.174799 + ] + ] + }, + "properties": { + "id": 3666978, + "linkIdReversed": 0, + "fromNodeId": 3874116, + "toNodeId": 3874117, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666979, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431839, + 52.174799 + ], + [ + 5.431774, + 52.17514 + ], + [ + 5.431755, + 52.175225 + ] + ] + }, + "properties": { + "id": 3666979, + "linkIdReversed": 0, + "fromNodeId": 3874117, + "toNodeId": 3874118, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666980, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431755, + 52.175225 + ], + [ + 5.431699, + 52.175468 + ], + [ + 5.431674, + 52.175651 + ] + ] + }, + "properties": { + "id": 3666980, + "linkIdReversed": 0, + "fromNodeId": 3874118, + "toNodeId": 3874119, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666981, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431674, + 52.175651 + ], + [ + 5.431614, + 52.176078 + ] + ] + }, + "properties": { + "id": 3666981, + "linkIdReversed": 0, + "fromNodeId": 3874119, + "toNodeId": 3874120, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666982, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431614, + 52.176078 + ], + [ + 5.431576, + 52.17635 + ], + [ + 5.431564, + 52.176505 + ] + ] + }, + "properties": { + "id": 3666982, + "linkIdReversed": 0, + "fromNodeId": 3874120, + "toNodeId": 3874121, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666983, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431564, + 52.176505 + ], + [ + 5.431532, + 52.176934 + ] + ] + }, + "properties": { + "id": 3666983, + "linkIdReversed": 0, + "fromNodeId": 3874121, + "toNodeId": 3874122, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666984, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431532, + 52.176934 + ], + [ + 5.431525, + 52.177029 + ], + [ + 5.431526, + 52.177353 + ], + [ + 5.431527, + 52.177362 + ] + ] + }, + "properties": { + "id": 3666984, + "linkIdReversed": 0, + "fromNodeId": 3874122, + "toNodeId": 3874123, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666985, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431527, + 52.177362 + ], + [ + 5.431572, + 52.177769 + ], + [ + 5.431579, + 52.17779 + ] + ] + }, + "properties": { + "id": 3666985, + "linkIdReversed": 0, + "fromNodeId": 3874123, + "toNodeId": 3874124, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666986, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431579, + 52.17779 + ], + [ + 5.431678, + 52.178078 + ], + [ + 5.431741, + 52.178206 + ] + ] + }, + "properties": { + "id": 3666986, + "linkIdReversed": 0, + "fromNodeId": 3874124, + "toNodeId": 3874125, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666987, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431741, + 52.178206 + ], + [ + 5.431812, + 52.178352 + ], + [ + 5.431998, + 52.178604 + ] + ] + }, + "properties": { + "id": 3666987, + "linkIdReversed": 0, + "fromNodeId": 3874125, + "toNodeId": 597008, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.707 + } + }, + { + "type": "Feature", + "id": 3666988, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431998, + 52.178604 + ], + [ + 5.432367, + 52.178929 + ] + ] + }, + "properties": { + "id": 3666988, + "linkIdReversed": 0, + "fromNodeId": 597008, + "toNodeId": 3874126, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666989, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432367, + 52.178929 + ], + [ + 5.432737, + 52.179253 + ] + ] + }, + "properties": { + "id": 3666989, + "linkIdReversed": 0, + "fromNodeId": 3874126, + "toNodeId": 3874127, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666990, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432737, + 52.179253 + ], + [ + 5.43284, + 52.179344 + ], + [ + 5.433105, + 52.179578 + ] + ] + }, + "properties": { + "id": 3666990, + "linkIdReversed": 0, + "fromNodeId": 3874127, + "toNodeId": 3874128, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666991, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433105, + 52.179578 + ], + [ + 5.433461, + 52.179893 + ], + [ + 5.433472, + 52.179903 + ] + ] + }, + "properties": { + "id": 3666991, + "linkIdReversed": 0, + "fromNodeId": 3874128, + "toNodeId": 3874129, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.067 + } + }, + { + "type": "Feature", + "id": 3666996, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433133, + 52.173317 + ], + [ + 5.43262, + 52.173571 + ] + ] + }, + "properties": { + "id": 3666996, + "linkIdReversed": 0, + "fromNodeId": 596870, + "toNodeId": 3874133, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3666997, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43262, + 52.173571 + ], + [ + 5.432107, + 52.173825 + ] + ] + }, + "properties": { + "id": 3666997, + "linkIdReversed": 0, + "fromNodeId": 3874133, + "toNodeId": 3874134, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3666998, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432107, + 52.173825 + ], + [ + 5.431993, + 52.173882 + ], + [ + 5.431605, + 52.174087 + ] + ] + }, + "properties": { + "id": 3666998, + "linkIdReversed": 0, + "fromNodeId": 3874134, + "toNodeId": 3874135, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3666999, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431605, + 52.174087 + ], + [ + 5.431105, + 52.174351 + ] + ] + }, + "properties": { + "id": 3666999, + "linkIdReversed": 0, + "fromNodeId": 3874135, + "toNodeId": 3874136, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667000, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431105, + 52.174351 + ], + [ + 5.43086, + 52.17448 + ], + [ + 5.430611, + 52.174619 + ] + ] + }, + "properties": { + "id": 3667000, + "linkIdReversed": 0, + "fromNodeId": 3874136, + "toNodeId": 3874137, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667001, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430611, + 52.174619 + ], + [ + 5.430122, + 52.17489 + ] + ] + }, + "properties": { + "id": 3667001, + "linkIdReversed": 0, + "fromNodeId": 3874137, + "toNodeId": 3874138, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667002, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430122, + 52.17489 + ], + [ + 5.42998, + 52.174969 + ], + [ + 5.429654, + 52.175175 + ] + ] + }, + "properties": { + "id": 3667002, + "linkIdReversed": 0, + "fromNodeId": 3874138, + "toNodeId": 3874139, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667003, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429654, + 52.175175 + ], + [ + 5.429194, + 52.175465 + ] + ] + }, + "properties": { + "id": 3667003, + "linkIdReversed": 0, + "fromNodeId": 3874139, + "toNodeId": 597006, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.066 + } + }, + { + "type": "Feature", + "id": 3667004, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423609, + 52.17878 + ], + [ + 5.423953, + 52.178555 + ], + [ + 5.424063, + 52.178474 + ] + ] + }, + "properties": { + "id": 3667004, + "linkIdReversed": 0, + "fromNodeId": 597011, + "toNodeId": 3874140, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667005, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424063, + 52.178474 + ], + [ + 5.424496, + 52.178156 + ] + ] + }, + "properties": { + "id": 3667005, + "linkIdReversed": 0, + "fromNodeId": 3874140, + "toNodeId": 3874141, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667006, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424496, + 52.178156 + ], + [ + 5.424671, + 52.178028 + ], + [ + 5.424924, + 52.177836 + ] + ] + }, + "properties": { + "id": 3667006, + "linkIdReversed": 0, + "fromNodeId": 3874141, + "toNodeId": 3874142, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667007, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424924, + 52.177836 + ], + [ + 5.425349, + 52.177514 + ] + ] + }, + "properties": { + "id": 3667007, + "linkIdReversed": 0, + "fromNodeId": 3874142, + "toNodeId": 3874143, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667008, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425349, + 52.177514 + ], + [ + 5.425446, + 52.177441 + ], + [ + 5.42578, + 52.177195 + ] + ] + }, + "properties": { + "id": 3667008, + "linkIdReversed": 0, + "fromNodeId": 3874143, + "toNodeId": 3874144, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667009, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42578, + 52.177195 + ], + [ + 5.426212, + 52.176877 + ] + ] + }, + "properties": { + "id": 3667009, + "linkIdReversed": 0, + "fromNodeId": 3874144, + "toNodeId": 3874145, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667010, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426212, + 52.176877 + ], + [ + 5.426514, + 52.176655 + ], + [ + 5.426648, + 52.176562 + ] + ] + }, + "properties": { + "id": 3667010, + "linkIdReversed": 0, + "fromNodeId": 3874145, + "toNodeId": 3874146, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667011, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426648, + 52.176562 + ], + [ + 5.427095, + 52.176251 + ] + ] + }, + "properties": { + "id": 3667011, + "linkIdReversed": 0, + "fromNodeId": 3874146, + "toNodeId": 3874147, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667012, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427095, + 52.176251 + ], + [ + 5.427542, + 52.175941 + ] + ] + }, + "properties": { + "id": 3667012, + "linkIdReversed": 0, + "fromNodeId": 3874147, + "toNodeId": 596837, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.115 + } + }, + { + "type": "Feature", + "id": 3667013, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423609, + 52.17878 + ], + [ + 5.423952, + 52.178426 + ] + ] + }, + "properties": { + "id": 3667013, + "linkIdReversed": 0, + "fromNodeId": 597011, + "toNodeId": 3874148, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667014, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423952, + 52.178426 + ], + [ + 5.42422, + 52.17815 + ], + [ + 5.424268, + 52.178064 + ] + ] + }, + "properties": { + "id": 3667014, + "linkIdReversed": 0, + "fromNodeId": 3874148, + "toNodeId": 3874149, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667015, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424268, + 52.178064 + ], + [ + 5.42441, + 52.177811 + ], + [ + 5.424465, + 52.17767 + ] + ] + }, + "properties": { + "id": 3667015, + "linkIdReversed": 0, + "fromNodeId": 3874149, + "toNodeId": 3874150, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667016, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424465, + 52.17767 + ], + [ + 5.42462, + 52.177269 + ] + ] + }, + "properties": { + "id": 3667016, + "linkIdReversed": 0, + "fromNodeId": 3874150, + "toNodeId": 597012, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.877 + } + }, + { + "type": "Feature", + "id": 3667020, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421906, + 52.179994 + ], + [ + 5.422327, + 52.179688 + ] + ] + }, + "properties": { + "id": 3667020, + "linkIdReversed": 0, + "fromNodeId": 3874153, + "toNodeId": 3874154, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667021, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422327, + 52.179688 + ], + [ + 5.422725, + 52.179398 + ], + [ + 5.422748, + 52.179382 + ] + ] + }, + "properties": { + "id": 3667021, + "linkIdReversed": 0, + "fromNodeId": 3874154, + "toNodeId": 3874155, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667022, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422748, + 52.179382 + ], + [ + 5.423178, + 52.179081 + ] + ] + }, + "properties": { + "id": 3667022, + "linkIdReversed": 0, + "fromNodeId": 3874155, + "toNodeId": 3874156, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667023, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423178, + 52.179081 + ], + [ + 5.423609, + 52.17878 + ] + ] + }, + "properties": { + "id": 3667023, + "linkIdReversed": 0, + "fromNodeId": 3874156, + "toNodeId": 597011, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.597 + } + }, + { + "type": "Feature", + "id": 3667024, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427542, + 52.175941 + ], + [ + 5.427981, + 52.175668 + ] + ] + }, + "properties": { + "id": 3667024, + "linkIdReversed": 0, + "fromNodeId": 596837, + "toNodeId": 3874157, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667025, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427981, + 52.175668 + ], + [ + 5.428419, + 52.175394 + ] + ] + }, + "properties": { + "id": 3667025, + "linkIdReversed": 0, + "fromNodeId": 3874157, + "toNodeId": 3874158, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667026, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428419, + 52.175394 + ], + [ + 5.428858, + 52.175121 + ] + ] + }, + "properties": { + "id": 3667026, + "linkIdReversed": 0, + "fromNodeId": 3874158, + "toNodeId": 3874159, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667027, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428858, + 52.175121 + ], + [ + 5.429296, + 52.174847 + ] + ] + }, + "properties": { + "id": 3667027, + "linkIdReversed": 0, + "fromNodeId": 3874159, + "toNodeId": 597014, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 42.732 + } + }, + { + "type": "Feature", + "id": 3667034, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421688, + 52.180337 + ], + [ + 5.42216, + 52.179998 + ] + ] + }, + "properties": { + "id": 3667034, + "linkIdReversed": 0, + "fromNodeId": 3874165, + "toNodeId": 3874166, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667035, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42216, + 52.179998 + ], + [ + 5.422633, + 52.17966 + ] + ] + }, + "properties": { + "id": 3667035, + "linkIdReversed": 0, + "fromNodeId": 3874166, + "toNodeId": 3874167, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667036, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422633, + 52.17966 + ], + [ + 5.423105, + 52.179322 + ] + ] + }, + "properties": { + "id": 3667036, + "linkIdReversed": 0, + "fromNodeId": 3874167, + "toNodeId": 3874168, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667037, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423105, + 52.179322 + ], + [ + 5.423266, + 52.179207 + ], + [ + 5.423577, + 52.178984 + ] + ] + }, + "properties": { + "id": 3667037, + "linkIdReversed": 0, + "fromNodeId": 3874168, + "toNodeId": 3874169, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667038, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423577, + 52.178984 + ], + [ + 5.424049, + 52.178645 + ] + ] + }, + "properties": { + "id": 3667038, + "linkIdReversed": 0, + "fromNodeId": 3874169, + "toNodeId": 3874170, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667039, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424049, + 52.178645 + ], + [ + 5.424521, + 52.178307 + ] + ] + }, + "properties": { + "id": 3667039, + "linkIdReversed": 0, + "fromNodeId": 3874170, + "toNodeId": 3874171, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667040, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424521, + 52.178307 + ], + [ + 5.424993, + 52.177968 + ] + ] + }, + "properties": { + "id": 3667040, + "linkIdReversed": 0, + "fromNodeId": 3874171, + "toNodeId": 3874172, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667041, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424993, + 52.177968 + ], + [ + 5.425465, + 52.17763 + ] + ] + }, + "properties": { + "id": 3667041, + "linkIdReversed": 0, + "fromNodeId": 3874172, + "toNodeId": 3874173, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667042, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425465, + 52.17763 + ], + [ + 5.425936, + 52.177291 + ] + ] + }, + "properties": { + "id": 3667042, + "linkIdReversed": 0, + "fromNodeId": 3874173, + "toNodeId": 3874174, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667043, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425936, + 52.177291 + ], + [ + 5.426408, + 52.176953 + ] + ] + }, + "properties": { + "id": 3667043, + "linkIdReversed": 0, + "fromNodeId": 3874174, + "toNodeId": 3874175, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667044, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426408, + 52.176953 + ], + [ + 5.426759, + 52.176701 + ], + [ + 5.426884, + 52.176616 + ] + ] + }, + "properties": { + "id": 3667044, + "linkIdReversed": 0, + "fromNodeId": 3874175, + "toNodeId": 3874176, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667045, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426884, + 52.176616 + ], + [ + 5.427371, + 52.176286 + ] + ] + }, + "properties": { + "id": 3667045, + "linkIdReversed": 0, + "fromNodeId": 3874176, + "toNodeId": 3874177, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667046, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427371, + 52.176286 + ], + [ + 5.42784, + 52.175968 + ], + [ + 5.427859, + 52.175956 + ] + ] + }, + "properties": { + "id": 3667046, + "linkIdReversed": 0, + "fromNodeId": 3874177, + "toNodeId": 3874178, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667047, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427859, + 52.175956 + ], + [ + 5.428362, + 52.175635 + ] + ] + }, + "properties": { + "id": 3667047, + "linkIdReversed": 0, + "fromNodeId": 3874178, + "toNodeId": 3874179, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667048, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428362, + 52.175635 + ], + [ + 5.42879, + 52.175362 + ], + [ + 5.428867, + 52.175315 + ] + ] + }, + "properties": { + "id": 3667048, + "linkIdReversed": 0, + "fromNodeId": 3874179, + "toNodeId": 3874180, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667049, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428867, + 52.175315 + ], + [ + 5.429382, + 52.175002 + ] + ] + }, + "properties": { + "id": 3667049, + "linkIdReversed": 0, + "fromNodeId": 3874180, + "toNodeId": 3874181, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667050, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429382, + 52.175002 + ], + [ + 5.429625, + 52.174854 + ], + [ + 5.429909, + 52.174696 + ] + ] + }, + "properties": { + "id": 3667050, + "linkIdReversed": 0, + "fromNodeId": 3874181, + "toNodeId": 3874182, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667051, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429909, + 52.174696 + ], + [ + 5.430446, + 52.174396 + ] + ] + }, + "properties": { + "id": 3667051, + "linkIdReversed": 0, + "fromNodeId": 3874182, + "toNodeId": 3874183, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667052, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430446, + 52.174396 + ], + [ + 5.430895, + 52.174145 + ], + [ + 5.430984, + 52.174097 + ] + ] + }, + "properties": { + "id": 3667052, + "linkIdReversed": 0, + "fromNodeId": 3874183, + "toNodeId": 3874184, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667053, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430984, + 52.174097 + ], + [ + 5.431528, + 52.173803 + ] + ] + }, + "properties": { + "id": 3667053, + "linkIdReversed": 0, + "fromNodeId": 3874184, + "toNodeId": 3874185, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667054, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431528, + 52.173803 + ], + [ + 5.432072, + 52.173508 + ] + ] + }, + "properties": { + "id": 3667054, + "linkIdReversed": 0, + "fromNodeId": 3874185, + "toNodeId": 597016, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.601 + } + }, + { + "type": "Feature", + "id": 3667060, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432072, + 52.173508 + ], + [ + 5.432588, + 52.173256 + ] + ] + }, + "properties": { + "id": 3667060, + "linkIdReversed": 0, + "fromNodeId": 597016, + "toNodeId": 3874189, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.102 + } + }, + { + "type": "Feature", + "id": 3667061, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432588, + 52.173256 + ], + [ + 5.432932, + 52.173088 + ], + [ + 5.433107, + 52.173006 + ] + ] + }, + "properties": { + "id": 3667061, + "linkIdReversed": 0, + "fromNodeId": 3874189, + "toNodeId": 3874190, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.102 + } + }, + { + "type": "Feature", + "id": 3667062, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433107, + 52.173006 + ], + [ + 5.433631, + 52.17276 + ] + ] + }, + "properties": { + "id": 3667062, + "linkIdReversed": 0, + "fromNodeId": 3874190, + "toNodeId": 3874191, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.102 + } + }, + { + "type": "Feature", + "id": 3667067, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431265, + 52.173805 + ], + [ + 5.431642, + 52.173628 + ] + ] + }, + "properties": { + "id": 3667067, + "linkIdReversed": 0, + "fromNodeId": 597020, + "toNodeId": 3874195, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 32.463 + } + }, + { + "type": "Feature", + "id": 3667068, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431642, + 52.173628 + ], + [ + 5.431703, + 52.173599 + ], + [ + 5.432072, + 52.173508 + ] + ] + }, + "properties": { + "id": 3667068, + "linkIdReversed": 0, + "fromNodeId": 3874195, + "toNodeId": 597016, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 32.463 + } + }, + { + "type": "Feature", + "id": 3667070, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42874, + 52.175972 + ], + [ + 5.429147, + 52.176331 + ] + ] + }, + "properties": { + "id": 3667070, + "linkIdReversed": 0, + "fromNodeId": 596859, + "toNodeId": 3874196, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667071, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429147, + 52.176331 + ], + [ + 5.429554, + 52.176691 + ] + ] + }, + "properties": { + "id": 3667071, + "linkIdReversed": 0, + "fromNodeId": 3874196, + "toNodeId": 3874197, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667072, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429554, + 52.176691 + ], + [ + 5.429961, + 52.17705 + ] + ] + }, + "properties": { + "id": 3667072, + "linkIdReversed": 0, + "fromNodeId": 3874197, + "toNodeId": 3874198, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667073, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429961, + 52.17705 + ], + [ + 5.430139, + 52.177208 + ], + [ + 5.43037, + 52.177409 + ] + ] + }, + "properties": { + "id": 3667073, + "linkIdReversed": 0, + "fromNodeId": 3874198, + "toNodeId": 3874199, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667074, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43037, + 52.177409 + ], + [ + 5.430781, + 52.177766 + ] + ] + }, + "properties": { + "id": 3667074, + "linkIdReversed": 0, + "fromNodeId": 3874199, + "toNodeId": 3874200, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667075, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430781, + 52.177766 + ], + [ + 5.431193, + 52.178124 + ] + ] + }, + "properties": { + "id": 3667075, + "linkIdReversed": 0, + "fromNodeId": 3874200, + "toNodeId": 3874201, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667076, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431193, + 52.178124 + ], + [ + 5.431604, + 52.178481 + ] + ] + }, + "properties": { + "id": 3667076, + "linkIdReversed": 0, + "fromNodeId": 3874201, + "toNodeId": 3874202, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667077, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431604, + 52.178481 + ], + [ + 5.432016, + 52.178839 + ] + ] + }, + "properties": { + "id": 3667077, + "linkIdReversed": 0, + "fromNodeId": 3874202, + "toNodeId": 3874203, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667078, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432016, + 52.178839 + ], + [ + 5.432427, + 52.179196 + ] + ] + }, + "properties": { + "id": 3667078, + "linkIdReversed": 0, + "fromNodeId": 3874203, + "toNodeId": 3874204, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667079, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432427, + 52.179196 + ], + [ + 5.432838, + 52.179553 + ] + ] + }, + "properties": { + "id": 3667079, + "linkIdReversed": 0, + "fromNodeId": 3874204, + "toNodeId": 3874205, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667080, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432838, + 52.179553 + ], + [ + 5.43325, + 52.179911 + ] + ] + }, + "properties": { + "id": 3667080, + "linkIdReversed": 0, + "fromNodeId": 3874205, + "toNodeId": 3874206, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667081, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43325, + 52.179911 + ], + [ + 5.433661, + 52.180268 + ] + ] + }, + "properties": { + "id": 3667081, + "linkIdReversed": 0, + "fromNodeId": 3874206, + "toNodeId": 3874207, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.725 + } + }, + { + "type": "Feature", + "id": 3667119, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429296, + 52.174847 + ], + [ + 5.429416, + 52.174686 + ], + [ + 5.429527, + 52.174538 + ], + [ + 5.429559, + 52.174446 + ] + ] + }, + "properties": { + "id": 3667119, + "linkIdReversed": 0, + "fromNodeId": 597014, + "toNodeId": 3874238, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667120, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429559, + 52.174446 + ], + [ + 5.429575, + 52.1744 + ], + [ + 5.429591, + 52.174274 + ], + [ + 5.42958, + 52.174206 + ], + [ + 5.42955, + 52.174141 + ], + [ + 5.429506, + 52.174053 + ], + [ + 5.429482, + 52.174024 + ] + ] + }, + "properties": { + "id": 3667120, + "linkIdReversed": 0, + "fromNodeId": 3874238, + "toNodeId": 3874239, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667121, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429482, + 52.174024 + ], + [ + 5.429452, + 52.173988 + ], + [ + 5.429347, + 52.173901 + ], + [ + 5.429214, + 52.173817 + ], + [ + 5.429055, + 52.173752 + ], + [ + 5.42898, + 52.173731 + ] + ] + }, + "properties": { + "id": 3667121, + "linkIdReversed": 0, + "fromNodeId": 3874239, + "toNodeId": 3874240, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667122, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42898, + 52.173731 + ], + [ + 5.428873, + 52.173702 + ], + [ + 5.428669, + 52.173676 + ], + [ + 5.428507, + 52.173672 + ], + [ + 5.428346, + 52.173679 + ], + [ + 5.428292, + 52.173688 + ] + ] + }, + "properties": { + "id": 3667122, + "linkIdReversed": 0, + "fromNodeId": 3874240, + "toNodeId": 3874241, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667123, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428292, + 52.173688 + ], + [ + 5.42819, + 52.173706 + ], + [ + 5.428039, + 52.17374 + ], + [ + 5.427924, + 52.173794 + ], + [ + 5.427783, + 52.173866 + ], + [ + 5.42771, + 52.173918 + ] + ] + }, + "properties": { + "id": 3667123, + "linkIdReversed": 0, + "fromNodeId": 3874241, + "toNodeId": 3874242, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667124, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42771, + 52.173918 + ], + [ + 5.427675, + 52.173943 + ], + [ + 5.427555, + 52.174061 + ], + [ + 5.427491, + 52.174183 + ], + [ + 5.427475, + 52.174274 + ], + [ + 5.427475, + 52.174316 + ] + ] + }, + "properties": { + "id": 3667124, + "linkIdReversed": 0, + "fromNodeId": 3874242, + "toNodeId": 3874243, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667125, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427475, + 52.174316 + ], + [ + 5.427474, + 52.17437 + ], + [ + 5.427494, + 52.174442 + ], + [ + 5.427509, + 52.174507 + ], + [ + 5.427609, + 52.17474 + ] + ] + }, + "properties": { + "id": 3667125, + "linkIdReversed": 0, + "fromNodeId": 3874243, + "toNodeId": 596864, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 48.283 + } + }, + { + "type": "Feature", + "id": 3667126, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429296, + 52.174847 + ], + [ + 5.429658, + 52.174641 + ], + [ + 5.429779, + 52.17458 + ] + ] + }, + "properties": { + "id": 3667126, + "linkIdReversed": 0, + "fromNodeId": 597014, + "toNodeId": 3874244, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667127, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429779, + 52.17458 + ], + [ + 5.430281, + 52.174327 + ] + ] + }, + "properties": { + "id": 3667127, + "linkIdReversed": 0, + "fromNodeId": 3874244, + "toNodeId": 3874245, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667128, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430281, + 52.174327 + ], + [ + 5.430482, + 52.174225 + ], + [ + 5.430775, + 52.174068 + ] + ] + }, + "properties": { + "id": 3667128, + "linkIdReversed": 0, + "fromNodeId": 3874245, + "toNodeId": 3874246, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667129, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430775, + 52.174068 + ], + [ + 5.431265, + 52.173805 + ] + ] + }, + "properties": { + "id": 3667129, + "linkIdReversed": 0, + "fromNodeId": 3874246, + "toNodeId": 597020, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.443 + } + }, + { + "type": "Feature", + "id": 3667130, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430015, + 52.17728 + ], + [ + 5.429664, + 52.176974 + ] + ] + }, + "properties": { + "id": 3667130, + "linkIdReversed": 0, + "fromNodeId": 597029, + "toNodeId": 3874247, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667131, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429664, + 52.176974 + ], + [ + 5.429312, + 52.176668 + ] + ] + }, + "properties": { + "id": 3667131, + "linkIdReversed": 0, + "fromNodeId": 3874247, + "toNodeId": 3874248, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667132, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429312, + 52.176668 + ], + [ + 5.428961, + 52.176362 + ] + ] + }, + "properties": { + "id": 3667132, + "linkIdReversed": 0, + "fromNodeId": 3874248, + "toNodeId": 3874249, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667133, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428961, + 52.176362 + ], + [ + 5.42861, + 52.176056 + ] + ] + }, + "properties": { + "id": 3667133, + "linkIdReversed": 0, + "fromNodeId": 3874249, + "toNodeId": 596855, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 41.673 + } + }, + { + "type": "Feature", + "id": 3667134, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427609, + 52.17474 + ], + [ + 5.427911, + 52.175013 + ] + ] + }, + "properties": { + "id": 3667134, + "linkIdReversed": 0, + "fromNodeId": 596864, + "toNodeId": 3874250, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 36.71 + } + }, + { + "type": "Feature", + "id": 3667135, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427911, + 52.175013 + ], + [ + 5.428214, + 52.175285 + ] + ] + }, + "properties": { + "id": 3667135, + "linkIdReversed": 0, + "fromNodeId": 3874250, + "toNodeId": 597030, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 36.71 + } + }, + { + "type": "Feature", + "id": 3667136, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428214, + 52.175285 + ], + [ + 5.428555, + 52.175581 + ] + ] + }, + "properties": { + "id": 3667136, + "linkIdReversed": 0, + "fromNodeId": 597030, + "toNodeId": 3874251, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.38 + } + }, + { + "type": "Feature", + "id": 3667137, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428555, + 52.175581 + ], + [ + 5.428897, + 52.175877 + ] + ] + }, + "properties": { + "id": 3667137, + "linkIdReversed": 0, + "fromNodeId": 3874251, + "toNodeId": 597009, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 40.38 + } + }, + { + "type": "Feature", + "id": 3669263, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433525, + 52.172981 + ], + [ + 5.433012, + 52.173222 + ], + [ + 5.43295, + 52.173251 + ] + ] + }, + "properties": { + "id": 3669263, + "linkIdReversed": 0, + "fromNodeId": 3875465, + "toNodeId": 3875466, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669264, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43295, + 52.173251 + ], + [ + 5.432378, + 52.173524 + ] + ] + }, + "properties": { + "id": 3669264, + "linkIdReversed": 0, + "fromNodeId": 3875466, + "toNodeId": 3875467, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669265, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432378, + 52.173524 + ], + [ + 5.431947, + 52.173729 + ], + [ + 5.431813, + 52.173802 + ] + ] + }, + "properties": { + "id": 3669265, + "linkIdReversed": 0, + "fromNodeId": 3875467, + "toNodeId": 3875468, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669266, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431813, + 52.173802 + ], + [ + 5.43127, + 52.174096 + ] + ] + }, + "properties": { + "id": 3669266, + "linkIdReversed": 0, + "fromNodeId": 3875468, + "toNodeId": 3875469, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669267, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43127, + 52.174096 + ], + [ + 5.430961, + 52.174263 + ], + [ + 5.43073, + 52.174391 + ] + ] + }, + "properties": { + "id": 3669267, + "linkIdReversed": 0, + "fromNodeId": 3875469, + "toNodeId": 3875470, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669268, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43073, + 52.174391 + ], + [ + 5.430192, + 52.174689 + ] + ] + }, + "properties": { + "id": 3669268, + "linkIdReversed": 0, + "fromNodeId": 3875470, + "toNodeId": 3875471, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669269, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430192, + 52.174689 + ], + [ + 5.429709, + 52.174957 + ], + [ + 5.429657, + 52.174988 + ] + ] + }, + "properties": { + "id": 3669269, + "linkIdReversed": 0, + "fromNodeId": 3875471, + "toNodeId": 3875472, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669270, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429657, + 52.174988 + ], + [ + 5.429139, + 52.175299 + ] + ] + }, + "properties": { + "id": 3669270, + "linkIdReversed": 0, + "fromNodeId": 3875472, + "toNodeId": 3875473, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669271, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429139, + 52.175299 + ], + [ + 5.42885, + 52.175472 + ], + [ + 5.428626, + 52.175613 + ] + ] + }, + "properties": { + "id": 3669271, + "linkIdReversed": 0, + "fromNodeId": 3875473, + "toNodeId": 3875474, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669272, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428626, + 52.175613 + ], + [ + 5.428121, + 52.175932 + ] + ] + }, + "properties": { + "id": 3669272, + "linkIdReversed": 0, + "fromNodeId": 3875474, + "toNodeId": 3875475, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669273, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428121, + 52.175932 + ], + [ + 5.427924, + 52.176056 + ], + [ + 5.427628, + 52.176257 + ] + ] + }, + "properties": { + "id": 3669273, + "linkIdReversed": 0, + "fromNodeId": 3875475, + "toNodeId": 3875476, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669274, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427628, + 52.176257 + ], + [ + 5.427143, + 52.176587 + ] + ] + }, + "properties": { + "id": 3669274, + "linkIdReversed": 0, + "fromNodeId": 3875476, + "toNodeId": 3875477, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669275, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427143, + 52.176587 + ], + [ + 5.426919, + 52.176739 + ], + [ + 5.426665, + 52.176921 + ] + ] + }, + "properties": { + "id": 3669275, + "linkIdReversed": 0, + "fromNodeId": 3875477, + "toNodeId": 3875478, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669276, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426665, + 52.176921 + ], + [ + 5.426194, + 52.177259 + ] + ] + }, + "properties": { + "id": 3669276, + "linkIdReversed": 0, + "fromNodeId": 3875478, + "toNodeId": 3875479, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669277, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426194, + 52.177259 + ], + [ + 5.425723, + 52.177597 + ] + ] + }, + "properties": { + "id": 3669277, + "linkIdReversed": 0, + "fromNodeId": 3875479, + "toNodeId": 3875480, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669278, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425723, + 52.177597 + ], + [ + 5.425252, + 52.177934 + ] + ] + }, + "properties": { + "id": 3669278, + "linkIdReversed": 0, + "fromNodeId": 3875480, + "toNodeId": 3875481, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669279, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425252, + 52.177934 + ], + [ + 5.424781, + 52.178272 + ] + ] + }, + "properties": { + "id": 3669279, + "linkIdReversed": 0, + "fromNodeId": 3875481, + "toNodeId": 3875482, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669280, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424781, + 52.178272 + ], + [ + 5.42431, + 52.17861 + ] + ] + }, + "properties": { + "id": 3669280, + "linkIdReversed": 0, + "fromNodeId": 3875482, + "toNodeId": 3875483, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669281, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42431, + 52.17861 + ], + [ + 5.423839, + 52.178948 + ] + ] + }, + "properties": { + "id": 3669281, + "linkIdReversed": 0, + "fromNodeId": 3875483, + "toNodeId": 3875484, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669282, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423839, + 52.178948 + ], + [ + 5.423381, + 52.179276 + ], + [ + 5.423368, + 52.179285 + ] + ] + }, + "properties": { + "id": 3669282, + "linkIdReversed": 0, + "fromNodeId": 3875484, + "toNodeId": 3875485, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669283, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423368, + 52.179285 + ], + [ + 5.422898, + 52.179624 + ] + ] + }, + "properties": { + "id": 3669283, + "linkIdReversed": 0, + "fromNodeId": 3875485, + "toNodeId": 3875486, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669284, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422898, + 52.179624 + ], + [ + 5.422429, + 52.179962 + ] + ] + }, + "properties": { + "id": 3669284, + "linkIdReversed": 0, + "fromNodeId": 3875486, + "toNodeId": 3875487, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3669285, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422429, + 52.179962 + ], + [ + 5.421959, + 52.180301 + ] + ] + }, + "properties": { + "id": 3669285, + "linkIdReversed": 0, + "fromNodeId": 3875487, + "toNodeId": 3875488, + "speedInKilometersPerHour": 115.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 49.501 + } + }, + { + "type": "Feature", + "id": 3675765, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42481, + 52.172878 + ], + [ + 5.424593, + 52.1726 + ], + [ + 5.424523, + 52.172503 + ] + ] + }, + "properties": { + "id": 3675765, + "linkIdReversed": 0, + "fromNodeId": 599091, + "toNodeId": 3878366, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.103 + } + }, + { + "type": "Feature", + "id": 3675766, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424523, + 52.172503 + ], + [ + 5.424343, + 52.172253 + ], + [ + 5.424255, + 52.172123 + ] + ] + }, + "properties": { + "id": 3675766, + "linkIdReversed": 0, + "fromNodeId": 3878366, + "toNodeId": 3878367, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 46.103 + } + }, + { + "type": "Feature", + "id": 3675771, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425338, + 52.174526 + ], + [ + 5.425378, + 52.174103 + ], + [ + 5.425378, + 52.174098 + ] + ] + }, + "properties": { + "id": 3675771, + "linkIdReversed": 0, + "fromNodeId": 599093, + "toNodeId": 3878371, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3675772, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425378, + 52.174098 + ], + [ + 5.425385, + 52.173904 + ], + [ + 5.425326, + 52.173679 + ], + [ + 5.425323, + 52.173673 + ] + ] + }, + "properties": { + "id": 3675772, + "linkIdReversed": 0, + "fromNodeId": 3878371, + "toNodeId": 3878372, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3675773, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425323, + 52.173673 + ], + [ + 5.425224, + 52.173466 + ], + [ + 5.425101, + 52.173267 + ] + ] + }, + "properties": { + "id": 3675773, + "linkIdReversed": 0, + "fromNodeId": 3878372, + "toNodeId": 3878373, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3675774, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425101, + 52.173267 + ], + [ + 5.425051, + 52.173187 + ], + [ + 5.42481, + 52.172878 + ] + ] + }, + "properties": { + "id": 3675774, + "linkIdReversed": 0, + "fromNodeId": 3878373, + "toNodeId": 599091, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.679 + } + }, + { + "type": "Feature", + "id": 3684607, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42206, + 52.175152 + ], + [ + 5.422059, + 52.175592 + ] + ] + }, + "properties": { + "id": 3684607, + "linkIdReversed": 3684616, + "fromNodeId": 601546, + "toNodeId": 3882053, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684608, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422059, + 52.175592 + ], + [ + 5.422059, + 52.175766 + ], + [ + 5.42206, + 52.176032 + ] + ] + }, + "properties": { + "id": 3684608, + "linkIdReversed": 3684615, + "fromNodeId": 3882053, + "toNodeId": 3882054, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684609, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42206, + 52.176032 + ], + [ + 5.422062, + 52.176373 + ], + [ + 5.422056, + 52.176472 + ] + ] + }, + "properties": { + "id": 3684609, + "linkIdReversed": 3684614, + "fromNodeId": 3882054, + "toNodeId": 3882055, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 48.952 + } + }, + { + "type": "Feature", + "id": 3684909, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421854, + 52.173817 + ], + [ + 5.421967, + 52.173874 + ], + [ + 5.422039, + 52.173943 + ], + [ + 5.422042, + 52.174116 + ] + ] + }, + "properties": { + "id": 3684909, + "linkIdReversed": 3684916, + "fromNodeId": 601607, + "toNodeId": 3882193, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684910, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422042, + 52.174116 + ], + [ + 5.422045, + 52.174305 + ], + [ + 5.422048, + 52.174462 + ] + ] + }, + "properties": { + "id": 3684910, + "linkIdReversed": 3684915, + "fromNodeId": 3882193, + "toNodeId": 3882194, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684911, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422048, + 52.174462 + ], + [ + 5.422054, + 52.174807 + ] + ] + }, + "properties": { + "id": 3684911, + "linkIdReversed": 3684914, + "fromNodeId": 3882194, + "toNodeId": 3882195, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684912, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.422054, + 52.174807 + ], + [ + 5.42206, + 52.175152 + ] + ] + }, + "properties": { + "id": 3684912, + "linkIdReversed": 3684913, + "fromNodeId": 3882195, + "toNodeId": 601546, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 38.414 + } + }, + { + "type": "Feature", + "id": 3684922, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421854, + 52.173817 + ], + [ + 5.421867, + 52.173466 + ] + ] + }, + "properties": { + "id": 3684922, + "linkIdReversed": 3684921, + "fromNodeId": 601607, + "toNodeId": 601609, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 39.066 + } + }, + { + "type": "Feature", + "id": 3685165, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.421873, + 52.172724 + ], + [ + 5.42187, + 52.173095 + ] + ] + }, + "properties": { + "id": 3685165, + "linkIdReversed": 3685168, + "fromNodeId": 3882328, + "toNodeId": 3882329, + "speedInKilometersPerHour": 14.0, + "reverseSpeedInKilometersPerHour": 14.0, + "distanceInMeters": 41.26 + } + }, + { + "type": "Feature", + "id": 3685166, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42187, + 52.173095 + ], + [ + 5.421867, + 52.173466 + ] + ] + }, + "properties": { + "id": 3685166, + "linkIdReversed": 3685167, + "fromNodeId": 3882329, + "toNodeId": 601609, + "speedInKilometersPerHour": 14.0, + "reverseSpeedInKilometersPerHour": 14.0, + "distanceInMeters": 41.26 + } + }, + { + "type": "Feature", + "id": 3686216, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42252, + 52.18013 + ], + [ + 5.42204, + 52.180435 + ] + ] + }, + "properties": { + "id": 3686216, + "linkIdReversed": 0, + "fromNodeId": 596834, + "toNodeId": 3882835, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.267 + } + }, + { + "type": "Feature", + "id": 3686217, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42204, + 52.180435 + ], + [ + 5.42156, + 52.180741 + ] + ] + }, + "properties": { + "id": 3686217, + "linkIdReversed": 0, + "fromNodeId": 3882835, + "toNodeId": 3882836, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.267 + } + }, + { + "type": "Feature", + "id": 3686220, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42462, + 52.177269 + ], + [ + 5.424733, + 52.176878 + ] + ] + }, + "properties": { + "id": 3686220, + "linkIdReversed": 0, + "fromNodeId": 597012, + "toNodeId": 3882838, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686221, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424733, + 52.176878 + ], + [ + 5.424845, + 52.176487 + ] + ] + }, + "properties": { + "id": 3686221, + "linkIdReversed": 0, + "fromNodeId": 3882838, + "toNodeId": 3882839, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686222, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424845, + 52.176487 + ], + [ + 5.42489, + 52.176331 + ], + [ + 5.424929, + 52.176094 + ] + ] + }, + "properties": { + "id": 3686222, + "linkIdReversed": 0, + "fromNodeId": 3882839, + "toNodeId": 3882840, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686223, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424929, + 52.176094 + ], + [ + 5.42493, + 52.17609 + ], + [ + 5.425031, + 52.175702 + ] + ] + }, + "properties": { + "id": 3686223, + "linkIdReversed": 0, + "fromNodeId": 3882840, + "toNodeId": 3882841, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686224, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425031, + 52.175702 + ], + [ + 5.425134, + 52.17531 + ] + ] + }, + "properties": { + "id": 3686224, + "linkIdReversed": 0, + "fromNodeId": 3882841, + "toNodeId": 3882842, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686225, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425134, + 52.17531 + ], + [ + 5.425236, + 52.174918 + ] + ] + }, + "properties": { + "id": 3686225, + "linkIdReversed": 0, + "fromNodeId": 3882842, + "toNodeId": 3882843, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 3686226, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425236, + 52.174918 + ], + [ + 5.425338, + 52.174526 + ] + ] + }, + "properties": { + "id": 3686226, + "linkIdReversed": 0, + "fromNodeId": 3882843, + "toNodeId": 599093, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 44.171 + } + }, + { + "type": "Feature", + "id": 6369279, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423044, + 52.181034 + ], + [ + 5.423499, + 52.180712 + ] + ] + }, + "properties": { + "id": 6369279, + "linkIdReversed": 6369288, + "fromNodeId": 5442740, + "toNodeId": 5442741, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369280, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423499, + 52.180712 + ], + [ + 5.423955, + 52.180391 + ] + ] + }, + "properties": { + "id": 6369280, + "linkIdReversed": 6369287, + "fromNodeId": 5442741, + "toNodeId": 5442742, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369281, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.423955, + 52.180391 + ], + [ + 5.424184, + 52.180229 + ], + [ + 5.424419, + 52.180107 + ], + [ + 5.424449, + 52.180094 + ] + ] + }, + "properties": { + "id": 6369281, + "linkIdReversed": 6369286, + "fromNodeId": 5442742, + "toNodeId": 5442743, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369282, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424449, + 52.180094 + ], + [ + 5.424675, + 52.179996 + ], + [ + 5.424941, + 52.179909 + ], + [ + 5.42505, + 52.179885 + ] + ] + }, + "properties": { + "id": 6369282, + "linkIdReversed": 6369285, + "fromNodeId": 5442743, + "toNodeId": 5442744, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6369283, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42505, + 52.179885 + ], + [ + 5.425237, + 52.179844 + ], + [ + 5.42572, + 52.179779 + ] + ] + }, + "properties": { + "id": 6369283, + "linkIdReversed": 6369284, + "fromNodeId": 5442744, + "toNodeId": 1117050, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.43 + } + }, + { + "type": "Feature", + "id": 6405115, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432927, + 52.180256 + ], + [ + 5.432499, + 52.180435 + ], + [ + 5.432473, + 52.180446 + ] + ] + }, + "properties": { + "id": 6405115, + "linkIdReversed": 0, + "fromNodeId": 1121748, + "toNodeId": 5467882, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405116, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432473, + 52.180446 + ], + [ + 5.432129, + 52.180595 + ], + [ + 5.432028, + 52.180645 + ] + ] + }, + "properties": { + "id": 6405116, + "linkIdReversed": 0, + "fromNodeId": 5467882, + "toNodeId": 5467883, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405117, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432028, + 52.180645 + ], + [ + 5.431884, + 52.180717 + ], + [ + 5.431712, + 52.18084 + ], + [ + 5.431663, + 52.180894 + ] + ] + }, + "properties": { + "id": 6405117, + "linkIdReversed": 0, + "fromNodeId": 5467883, + "toNodeId": 5467884, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405118, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431663, + 52.180894 + ], + [ + 5.431594, + 52.180969 + ], + [ + 5.431524, + 52.18108 + ], + [ + 5.431477, + 52.18121 + ] + ] + }, + "properties": { + "id": 6405118, + "linkIdReversed": 0, + "fromNodeId": 5467884, + "toNodeId": 1121749, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 37.625 + } + }, + { + "type": "Feature", + "id": 6405120, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.4335, + 52.180016 + ], + [ + 5.432927, + 52.180256 + ] + ] + }, + "properties": { + "id": 6405120, + "linkIdReversed": 0, + "fromNodeId": 5467885, + "toNodeId": 1121748, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.431 + } + }, + { + "type": "Feature", + "id": 6405165, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.424756, + 52.181271 + ], + [ + 5.425247, + 52.181191 + ] + ] + }, + "properties": { + "id": 6405165, + "linkIdReversed": 6405170, + "fromNodeId": 1117049, + "toNodeId": 5467903, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405166, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425247, + 52.181191 + ], + [ + 5.425737, + 52.18111 + ] + ] + }, + "properties": { + "id": 6405166, + "linkIdReversed": 6405169, + "fromNodeId": 5467903, + "toNodeId": 5467904, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405167, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425737, + 52.18111 + ], + [ + 5.426228, + 52.18103 + ] + ] + }, + "properties": { + "id": 6405167, + "linkIdReversed": 6405168, + "fromNodeId": 5467904, + "toNodeId": 1121765, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 34.732 + } + }, + { + "type": "Feature", + "id": 6405178, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426228, + 52.18103 + ], + [ + 5.426726, + 52.180954 + ] + ] + }, + "properties": { + "id": 6405178, + "linkIdReversed": 6405177, + "fromNodeId": 1121765, + "toNodeId": 5467911, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405179, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426726, + 52.180954 + ], + [ + 5.427223, + 52.180878 + ] + ] + }, + "properties": { + "id": 6405179, + "linkIdReversed": 6405176, + "fromNodeId": 5467911, + "toNodeId": 5467912, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405180, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427223, + 52.180878 + ], + [ + 5.42747, + 52.18084 + ], + [ + 5.427719, + 52.180798 + ] + ] + }, + "properties": { + "id": 6405180, + "linkIdReversed": 6405175, + "fromNodeId": 5467912, + "toNodeId": 1121766, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 35.069 + } + }, + { + "type": "Feature", + "id": 6405182, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426228, + 52.18103 + ], + [ + 5.426316, + 52.181244 + ] + ] + }, + "properties": { + "id": 6405182, + "linkIdReversed": 6405181, + "fromNodeId": 1121765, + "toNodeId": 1121767, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 24.561 + } + }, + { + "type": "Feature", + "id": 6405186, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42572, + 52.179779 + ], + [ + 5.425889, + 52.180196 + ] + ] + }, + "properties": { + "id": 6405186, + "linkIdReversed": 6405185, + "fromNodeId": 1117050, + "toNodeId": 5467915, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405187, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.425889, + 52.180196 + ], + [ + 5.426059, + 52.180613 + ] + ] + }, + "properties": { + "id": 6405187, + "linkIdReversed": 6405184, + "fromNodeId": 5467915, + "toNodeId": 5467916, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405188, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426059, + 52.180613 + ], + [ + 5.426228, + 52.18103 + ] + ] + }, + "properties": { + "id": 6405188, + "linkIdReversed": 6405183, + "fromNodeId": 5467916, + "toNodeId": 1121765, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 45.0, + "distanceInMeters": 47.824 + } + }, + { + "type": "Feature", + "id": 6405218, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42572, + 52.179779 + ], + [ + 5.426411, + 52.179772 + ] + ] + }, + "properties": { + "id": 6405218, + "linkIdReversed": 6405233, + "fromNodeId": 1117050, + "toNodeId": 5467931, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405219, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.426411, + 52.179772 + ], + [ + 5.426481, + 52.179771 + ], + [ + 5.427101, + 52.179794 + ] + ] + }, + "properties": { + "id": 6405219, + "linkIdReversed": 6405232, + "fromNodeId": 5467931, + "toNodeId": 5467932, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405220, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427101, + 52.179794 + ], + [ + 5.427791, + 52.17982 + ] + ] + }, + "properties": { + "id": 6405220, + "linkIdReversed": 6405231, + "fromNodeId": 5467932, + "toNodeId": 5467933, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405221, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427791, + 52.17982 + ], + [ + 5.428481, + 52.179846 + ] + ] + }, + "properties": { + "id": 6405221, + "linkIdReversed": 6405230, + "fromNodeId": 5467933, + "toNodeId": 5467934, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405222, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428481, + 52.179846 + ], + [ + 5.429171, + 52.179872 + ] + ] + }, + "properties": { + "id": 6405222, + "linkIdReversed": 6405229, + "fromNodeId": 5467934, + "toNodeId": 5467935, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405223, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429171, + 52.179872 + ], + [ + 5.429861, + 52.179897 + ] + ] + }, + "properties": { + "id": 6405223, + "linkIdReversed": 6405228, + "fromNodeId": 5467935, + "toNodeId": 5467936, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405224, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429861, + 52.179897 + ], + [ + 5.43036, + 52.179916 + ], + [ + 5.430534, + 52.179965 + ] + ] + }, + "properties": { + "id": 6405224, + "linkIdReversed": 6405227, + "fromNodeId": 5467936, + "toNodeId": 5467937, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405225, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430534, + 52.179965 + ], + [ + 5.430536, + 52.179966 + ], + [ + 5.430629, + 52.18008 + ], + [ + 5.430644, + 52.180176 + ], + [ + 5.430639, + 52.180237 + ], + [ + 5.430609, + 52.180374 + ] + ] + }, + "properties": { + "id": 6405225, + "linkIdReversed": 6405226, + "fromNodeId": 5467937, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.281 + } + }, + { + "type": "Feature", + "id": 6405235, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429931, + 52.180485 + ], + [ + 5.430609, + 52.180374 + ] + ] + }, + "properties": { + "id": 6405235, + "linkIdReversed": 6405234, + "fromNodeId": 1121780, + "toNodeId": 1121779, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 47.993 + } + }, + { + "type": "Feature", + "id": 6405237, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431004, + 52.18128 + ], + [ + 5.431042, + 52.181019 + ], + [ + 5.431057, + 52.180851 + ] + ] + }, + "properties": { + "id": 6405237, + "linkIdReversed": 0, + "fromNodeId": 5467945, + "toNodeId": 5467946, + "speedInKilometersPerHour": 24.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.913 + } + }, + { + "type": "Feature", + "id": 6405238, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431057, + 52.180851 + ], + [ + 5.43107, + 52.18071 + ], + [ + 5.431116, + 52.18045 + ], + [ + 5.431117, + 52.180422 + ] + ] + }, + "properties": { + "id": 6405238, + "linkIdReversed": 0, + "fromNodeId": 5467946, + "toNodeId": 5467947, + "speedInKilometersPerHour": 24.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.913 + } + }, + { + "type": "Feature", + "id": 6405239, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431117, + 52.180422 + ], + [ + 5.431123, + 52.180313 + ], + [ + 5.430609, + 52.180374 + ] + ] + }, + "properties": { + "id": 6405239, + "linkIdReversed": 0, + "fromNodeId": 5467947, + "toNodeId": 1121779, + "speedInKilometersPerHour": 24.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.913 + } + }, + { + "type": "Feature", + "id": 6405244, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427719, + 52.180798 + ], + [ + 5.428272, + 52.18072 + ] + ] + }, + "properties": { + "id": 6405244, + "linkIdReversed": 6405243, + "fromNodeId": 1121766, + "toNodeId": 5467951, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405245, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428272, + 52.18072 + ], + [ + 5.428825, + 52.180642 + ] + ] + }, + "properties": { + "id": 6405245, + "linkIdReversed": 6405242, + "fromNodeId": 5467951, + "toNodeId": 5467952, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405246, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428825, + 52.180642 + ], + [ + 5.429378, + 52.180563 + ] + ] + }, + "properties": { + "id": 6405246, + "linkIdReversed": 6405241, + "fromNodeId": 5467952, + "toNodeId": 5467953, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405247, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429378, + 52.180563 + ], + [ + 5.429931, + 52.180485 + ] + ] + }, + "properties": { + "id": 6405247, + "linkIdReversed": 6405240, + "fromNodeId": 5467953, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 38.815 + } + }, + { + "type": "Feature", + "id": 6405249, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429819, + 52.181284 + ], + [ + 5.429875, + 52.180884 + ] + ] + }, + "properties": { + "id": 6405249, + "linkIdReversed": 6405252, + "fromNodeId": 5467954, + "toNodeId": 5467955, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 44.599 + } + }, + { + "type": "Feature", + "id": 6405250, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429875, + 52.180884 + ], + [ + 5.429931, + 52.180485 + ] + ] + }, + "properties": { + "id": 6405250, + "linkIdReversed": 6405251, + "fromNodeId": 5467955, + "toNodeId": 1121780, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 44.599 + } + }, + { + "type": "Feature", + "id": 6405257, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.427719, + 52.180798 + ], + [ + 5.427839, + 52.181107 + ] + ] + }, + "properties": { + "id": 6405257, + "linkIdReversed": 6405256, + "fromNodeId": 1121766, + "toNodeId": 5467960, + "speedInKilometersPerHour": 30.0, + "reverseSpeedInKilometersPerHour": 30.0, + "distanceInMeters": 35.349 + } + }, + { + "type": "Feature", + "id": 6409986, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433145, + 52.172166 + ], + [ + 5.432642, + 52.172405 + ], + [ + 5.432593, + 52.172423 + ] + ] + }, + "properties": { + "id": 6409986, + "linkIdReversed": 0, + "fromNodeId": 5470745, + "toNodeId": 5470746, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409987, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432593, + 52.172423 + ], + [ + 5.43231, + 52.172531 + ], + [ + 5.431984, + 52.172625 + ] + ] + }, + "properties": { + "id": 6409987, + "linkIdReversed": 0, + "fromNodeId": 5470746, + "toNodeId": 5470747, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409988, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431984, + 52.172625 + ], + [ + 5.431937, + 52.172638 + ], + [ + 5.431495, + 52.172714 + ], + [ + 5.431314, + 52.172729 + ] + ] + }, + "properties": { + "id": 6409988, + "linkIdReversed": 0, + "fromNodeId": 5470747, + "toNodeId": 5470748, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409989, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431314, + 52.172729 + ], + [ + 5.431076, + 52.172749 + ], + [ + 5.430624, + 52.172745 + ] + ] + }, + "properties": { + "id": 6409989, + "linkIdReversed": 0, + "fromNodeId": 5470748, + "toNodeId": 5470749, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409990, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430624, + 52.172745 + ], + [ + 5.430595, + 52.172745 + ], + [ + 5.430142, + 52.172695 + ], + [ + 5.429948, + 52.172655 + ] + ] + }, + "properties": { + "id": 6409990, + "linkIdReversed": 0, + "fromNodeId": 5470749, + "toNodeId": 5470750, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409991, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429948, + 52.172655 + ], + [ + 5.429864, + 52.172638 + ], + [ + 5.429593, + 52.172562 + ], + [ + 5.429338, + 52.172458 + ] + ] + }, + "properties": { + "id": 6409991, + "linkIdReversed": 0, + "fromNodeId": 5470750, + "toNodeId": 5470751, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6409992, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.429338, + 52.172458 + ], + [ + 5.429275, + 52.172432 + ], + [ + 5.429121, + 52.172352 + ], + [ + 5.428904, + 52.172237 + ], + [ + 5.428808, + 52.172184 + ] + ] + }, + "properties": { + "id": 6409992, + "linkIdReversed": 0, + "fromNodeId": 5470751, + "toNodeId": 5470752, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.408 + } + }, + { + "type": "Feature", + "id": 6410877, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432878, + 52.18021 + ], + [ + 5.433451, + 52.17997 + ] + ] + }, + "properties": { + "id": 6410877, + "linkIdReversed": 0, + "fromNodeId": 1122767, + "toNodeId": 5471354, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.431 + } + }, + { + "type": "Feature", + "id": 6410880, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431435, + 52.181028 + ], + [ + 5.43153, + 52.180908 + ], + [ + 5.43167, + 52.180786 + ], + [ + 5.431812, + 52.180696 + ] + ] + }, + "properties": { + "id": 6410880, + "linkIdReversed": 0, + "fromNodeId": 5471355, + "toNodeId": 5471356, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.451 + } + }, + { + "type": "Feature", + "id": 6410881, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431812, + 52.180696 + ], + [ + 5.431916, + 52.18063 + ], + [ + 5.432222, + 52.180496 + ], + [ + 5.432336, + 52.180446 + ] + ] + }, + "properties": { + "id": 6410881, + "linkIdReversed": 0, + "fromNodeId": 5471356, + "toNodeId": 5471357, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.451 + } + }, + { + "type": "Feature", + "id": 6410882, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432336, + 52.180446 + ], + [ + 5.432878, + 52.18021 + ] + ] + }, + "properties": { + "id": 6410882, + "linkIdReversed": 0, + "fromNodeId": 5471357, + "toNodeId": 1122767, + "speedInKilometersPerHour": 45.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 45.451 + } + }, + { + "type": "Feature", + "id": 7223061, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433661, + 52.180611 + ], + [ + 5.43331, + 52.180338 + ] + ] + }, + "properties": { + "id": 7223061, + "linkIdReversed": 0, + "fromNodeId": 5985262, + "toNodeId": 5985263, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.697 + } + }, + { + "type": "Feature", + "id": 7223062, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43331, + 52.180338 + ], + [ + 5.432959, + 52.180065 + ] + ] + }, + "properties": { + "id": 7223062, + "linkIdReversed": 0, + "fromNodeId": 5985263, + "toNodeId": 596832, + "speedInKilometersPerHour": 80.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 38.697 + } + }, + { + "type": "Feature", + "id": 7223065, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433601, + 52.180439 + ], + [ + 5.433382, + 52.180233 + ], + [ + 5.433212, + 52.180084 + ] + ] + }, + "properties": { + "id": 7223065, + "linkIdReversed": 0, + "fromNodeId": 5985265, + "toNodeId": 5985266, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223066, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.433212, + 52.180084 + ], + [ + 5.432811, + 52.179734 + ] + ] + }, + "properties": { + "id": 7223066, + "linkIdReversed": 0, + "fromNodeId": 5985266, + "toNodeId": 5985267, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223067, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432811, + 52.179734 + ], + [ + 5.43241, + 52.179384 + ] + ] + }, + "properties": { + "id": 7223067, + "linkIdReversed": 0, + "fromNodeId": 5985267, + "toNodeId": 5985268, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223068, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43241, + 52.179384 + ], + [ + 5.432009, + 52.179034 + ] + ] + }, + "properties": { + "id": 7223068, + "linkIdReversed": 0, + "fromNodeId": 5985268, + "toNodeId": 5985269, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223069, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432009, + 52.179034 + ], + [ + 5.431713, + 52.178776 + ], + [ + 5.431609, + 52.178684 + ] + ] + }, + "properties": { + "id": 7223069, + "linkIdReversed": 0, + "fromNodeId": 5985269, + "toNodeId": 5985270, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223070, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431609, + 52.178684 + ], + [ + 5.43121, + 52.178333 + ] + ] + }, + "properties": { + "id": 7223070, + "linkIdReversed": 0, + "fromNodeId": 5985270, + "toNodeId": 5985271, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223071, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.43121, + 52.178333 + ], + [ + 5.430812, + 52.177982 + ] + ] + }, + "properties": { + "id": 7223071, + "linkIdReversed": 0, + "fromNodeId": 5985271, + "toNodeId": 5985272, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223072, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430812, + 52.177982 + ], + [ + 5.430413, + 52.177631 + ] + ] + }, + "properties": { + "id": 7223072, + "linkIdReversed": 0, + "fromNodeId": 5985272, + "toNodeId": 5985273, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7223073, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430413, + 52.177631 + ], + [ + 5.430015, + 52.17728 + ] + ] + }, + "properties": { + "id": 7223073, + "linkIdReversed": 0, + "fromNodeId": 5985273, + "toNodeId": 597029, + "speedInKilometersPerHour": 95.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.631 + } + }, + { + "type": "Feature", + "id": 7930097, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.428925, + 52.172131 + ], + [ + 5.428988, + 52.172165 + ], + [ + 5.429345, + 52.172329 + ], + [ + 5.42949, + 52.172383 + ] + ] + }, + "properties": { + "id": 7930097, + "linkIdReversed": 0, + "fromNodeId": 6349336, + "toNodeId": 6349337, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930098, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.42949, + 52.172383 + ], + [ + 5.429684, + 52.172455 + ], + [ + 5.430015, + 52.172539 + ], + [ + 5.430126, + 52.172557 + ] + ] + }, + "properties": { + "id": 7930098, + "linkIdReversed": 0, + "fromNodeId": 6349337, + "toNodeId": 6349338, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930099, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430126, + 52.172557 + ], + [ + 5.430324, + 52.172588 + ], + [ + 5.430683, + 52.172626 + ], + [ + 5.430814, + 52.172629 + ] + ] + }, + "properties": { + "id": 7930099, + "linkIdReversed": 0, + "fromNodeId": 6349338, + "toNodeId": 6349339, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930100, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.430814, + 52.172629 + ], + [ + 5.431061, + 52.172634 + ], + [ + 5.431426, + 52.172611 + ], + [ + 5.431509, + 52.172599 + ] + ] + }, + "properties": { + "id": 7930100, + "linkIdReversed": 0, + "fromNodeId": 6349339, + "toNodeId": 6349340, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930101, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.431509, + 52.172599 + ], + [ + 5.431897, + 52.172543 + ], + [ + 5.432171, + 52.172468 + ] + ] + }, + "properties": { + "id": 7930101, + "linkIdReversed": 0, + "fromNodeId": 6349340, + "toNodeId": 6349341, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + }, + { + "type": "Feature", + "id": 7930102, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.432171, + 52.172468 + ], + [ + 5.432286, + 52.172436 + ], + [ + 5.432635, + 52.172298 + ], + [ + 5.432759, + 52.172237 + ] + ] + }, + "properties": { + "id": 7930102, + "linkIdReversed": 0, + "fromNodeId": 6349341, + "toNodeId": 6349342, + "speedInKilometersPerHour": 65.0, + "reverseSpeedInKilometersPerHour": 0.0, + "distanceInMeters": 47.846 + } + } + ] +} diff --git a/pom.xml b/pom.xml index 74277f8f..6970321d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,13 +7,13 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.3.4 nu.ndw.nls routing-map-matcher-parent - 10.0.3-SNAPSHOT + 13.0.2-SNAPSHOT routing map matcher parent Routing Map Matcher modules containing the core library and spring boot starter modules pom @@ -27,20 +27,20 @@ 21 UTF-8 false - 8.0 + 9.1 3.1.12 1.19.0 - 33.2.0-jre + 33.3.1-jre 3.0 0.8.12 30.2 0.18.1 - 2.16.1 + 2.17.0 3.9.1.2184 nls-routing-map-matcher - 3.0.0 - 5.5.0 + 3.1.0 + 5.6.2 @@ -84,7 +84,7 @@ graphhopper-core ${graphhopper.version} - + org.codehaus.janino janino