protected void gatherOuterAndInnerNodeIdsOfStructure(EdgeIteratorState edge, final GHIntHashSet outerNodeIds, final GHIntHashSet innerNodeIds) { edgeElevationInterpolator.gatherOuterAndInnerNodeIds( edgeElevationInterpolator.getStorage().createEdgeExplorer(), edge, new GHBitSetImpl(), outerNodeIds, innerNodeIds); } }
private void interpolateElevationsOfTowerNodes() { final AllEdgesIterator edge = storage.getAllEdges(); final GHBitSet visitedEdgeIds = new GHBitSetImpl(edge.length()); final EdgeExplorer edgeExplorer = storage.createEdgeExplorer(); while (edge.next()) { final int edgeId = edge.getEdge(); if (isInterpolatableEdge(edge)) { if (!visitedEdgeIds.contains(edgeId)) { interpolateEdge(edge, visitedEdgeIds, edgeExplorer); } } visitedEdgeIds.add(edgeId); } }
public void execute() { interpolateElevationsOfTowerNodes(); interpolateElevationsOfPillarNodes(); }
private void interpolateEdge(final EdgeIteratorState interpolatableEdge, final GHBitSet visitedEdgeIds, final EdgeExplorer edgeExplorer) { final IntSet outerNodeIds = new GHIntHashSet(); final GHIntHashSet innerNodeIds = new GHIntHashSet(); gatherOuterAndInnerNodeIds(edgeExplorer, interpolatableEdge, visitedEdgeIds, outerNodeIds, innerNodeIds); nodeElevationInterpolator.interpolateElevationsOfInnerNodes(outerNodeIds.toArray(), innerNodeIds.toArray()); }
@Override protected boolean checkAdjacent(EdgeIteratorState edge) { visitedEdgesIds.add(edge.getEdge()); final int baseNodeId = edge.getBaseNode(); boolean isInterpolatableEdge = isInterpolatableEdge(edge); if (!isInterpolatableEdge) { innerNodeIds.remove(baseNodeId); outerNodeIds.add(baseNodeId); } else if (!outerNodeIds.contains(baseNodeId)) { innerNodeIds.add(baseNodeId); } return isInterpolatableEdge; } };
assertEquals(GHIntHashSet.from(0, 1, 2), innerNodeIds); edgeElevationInterpolator.execute(); assertEquals(0, na.getElevation(0), PRECISION); assertEquals(0, na.getElevation(1), PRECISION);
private void interpolateEdge(final EdgeIteratorState interpolatableEdge, final GHBitSet visitedEdgeIds, final EdgeExplorer edgeExplorer) { final IntSet outerNodeIds = new GHIntHashSet(); final GHIntHashSet innerNodeIds = new GHIntHashSet(); gatherOuterAndInnerNodeIds(edgeExplorer, interpolatableEdge, visitedEdgeIds, outerNodeIds, innerNodeIds); nodeElevationInterpolator.interpolateElevationsOfInnerNodes(outerNodeIds.toArray(), innerNodeIds.toArray()); }
private void interpolateElevationsOfPillarNodes() { final EdgeIterator edge = storage.getAllEdges(); final NodeAccess nodeAccess = storage.getNodeAccess(); while (edge.next()) { if (isInterpolatableEdge(edge)) { int firstNodeId = edge.getBaseNode(); int secondNodeId = edge.getAdjNode(); double lat0 = nodeAccess.getLat(firstNodeId); double lon0 = nodeAccess.getLon(firstNodeId); double ele0 = nodeAccess.getEle(firstNodeId); double lat1 = nodeAccess.getLat(secondNodeId); double lon1 = nodeAccess.getLon(secondNodeId); double ele1 = nodeAccess.getEle(secondNodeId); final PointList pointList = edge.fetchWayGeometry(0); final int count = pointList.size(); for (int index = 0; index < count; index++) { double lat = pointList.getLat(index); double lon = pointList.getLon(index); double ele = elevationInterpolator.calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1); pointList.set(index, lat, lon, ele); } edge.setWayGeometry(pointList); } } } }
assertEquals(GHIntHashSet.from(0, 1), innerNodeIds); edgeElevationInterpolator.execute(); assertEquals(10, na.getElevation(0), PRECISION); assertEquals(10, na.getElevation(1), PRECISION);
public void execute() { interpolateElevationsOfTowerNodes(); interpolateElevationsOfPillarNodes(); }
private void interpolateElevationsOfTowerNodes() { final AllEdgesIterator edge = storage.getAllEdges(); final GHBitSet visitedEdgeIds = new GHBitSetImpl(edge.length()); final EdgeExplorer edgeExplorer = storage.createEdgeExplorer(); while (edge.next()) { final int edgeId = edge.getEdge(); if (isInterpolatableEdge(edge)) { if (!visitedEdgeIds.contains(edgeId)) { interpolateEdge(edge, visitedEdgeIds, edgeExplorer); } } visitedEdgeIds.add(edgeId); } }
private void interpolateEdge(final EdgeIteratorState interpolatableEdge, final GHBitSet visitedEdgeIds, final EdgeExplorer edgeExplorer) { final IntSet outerNodeIds = new GHIntHashSet(); final GHIntHashSet innerNodeIds = new GHIntHashSet(); gatherOuterAndInnerNodeIds(edgeExplorer, interpolatableEdge, visitedEdgeIds, outerNodeIds, innerNodeIds); nodeElevationInterpolator.interpolateElevationsOfInnerNodes(outerNodeIds.toArray(), innerNodeIds.toArray()); }
@Override protected boolean checkAdjacent(EdgeIteratorState edge) { visitedEdgesIds.add(edge.getEdge()); final int baseNodeId = edge.getBaseNode(); boolean isInterpolatableEdge = isInterpolatableEdge(edge); if (!isInterpolatableEdge) { innerNodeIds.remove(baseNodeId); outerNodeIds.add(baseNodeId); } else if (!outerNodeIds.contains(baseNodeId)) { innerNodeIds.add(baseNodeId); } return isInterpolatableEdge; } };
assertEquals(GHIntHashSet.from(2), innerNodeIds); edgeElevationInterpolator.execute(); assertEquals(0, na.getElevation(0), PRECISION); assertEquals(10, na.getElevation(1), PRECISION);
public void execute() { interpolateElevationsOfTowerNodes(); interpolateElevationsOfPillarNodes(); }
private void interpolateElevationsOfTowerNodes() { final AllEdgesIterator edge = storage.getAllEdges(); final GHBitSet visitedEdgeIds = new GHBitSetImpl(edge.getMaxId()); final EdgeExplorer edgeExplorer = storage.createEdgeExplorer(); while (edge.next()) { final int edgeId = edge.getEdge(); if (isInterpolatableEdge(edge)) { if (!visitedEdgeIds.contains(edgeId)) { interpolateEdge(edge, visitedEdgeIds, edgeExplorer); } } visitedEdgeIds.add(edgeId); } }
@Override protected boolean checkAdjacent(EdgeIteratorState edge) { visitedEdgesIds.add(edge.getEdge()); final int baseNodeId = edge.getBaseNode(); boolean isInterpolatableEdge = isInterpolatableEdge(edge); if (!isInterpolatableEdge) { innerNodeIds.remove(baseNodeId); outerNodeIds.add(baseNodeId); } else if (!outerNodeIds.contains(baseNodeId)) { innerNodeIds.add(baseNodeId); } return isInterpolatableEdge; } };
assertEquals(GHIntHashSet.from(2, 5), innerNodeIds); edgeElevationInterpolator.execute(); assertEquals(0, na.getElevation(0), PRECISION); assertEquals(10, na.getElevation(1), PRECISION);
private void interpolateElevationsOfPillarNodes() { final EdgeIterator edge = storage.getAllEdges(); final NodeAccess nodeAccess = storage.getNodeAccess(); while (edge.next()) { if (isInterpolatableEdge(edge)) { int firstNodeId = edge.getBaseNode(); int secondNodeId = edge.getAdjNode(); double lat0 = nodeAccess.getLat(firstNodeId); double lon0 = nodeAccess.getLon(firstNodeId); double ele0 = nodeAccess.getEle(firstNodeId); double lat1 = nodeAccess.getLat(secondNodeId); double lon1 = nodeAccess.getLon(secondNodeId); double ele1 = nodeAccess.getEle(secondNodeId); final PointList pointList = edge.fetchWayGeometry(0); final int count = pointList.size(); for (int index = 0; index < count; index++) { double lat = pointList.getLat(index); double lon = pointList.getLon(index); double ele = elevationInterpolator.calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1); pointList.set(index, lat, lon, ele); } edge.setWayGeometry(pointList); } } } }
assertEquals(GHIntHashSet.from(2, 7), innerNodeIds); edgeElevationInterpolator.execute(); assertEquals(0, na.getElevation(0), PRECISION); assertEquals(10, na.getElevation(1), PRECISION);