private void interpolateElevationsOfInnerNodesForOneOuterNode(int outerNodeId, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); double ele = nodeAccess.getEle(outerNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForThreeOuterNodes(int firstOuterNodeId, int secondOuterNodeId, int thirdOuterNodeId, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); double lat0 = nodeAccess.getLat(firstOuterNodeId); double lon0 = nodeAccess.getLon(firstOuterNodeId); double ele0 = nodeAccess.getEle(firstOuterNodeId); double lat1 = nodeAccess.getLat(secondOuterNodeId); double lon1 = nodeAccess.getLon(secondOuterNodeId); double ele1 = nodeAccess.getEle(secondOuterNodeId); double lat2 = nodeAccess.getLat(thirdOuterNodeId); double lon2 = nodeAccess.getLon(thirdOuterNodeId); double ele2 = nodeAccess.getEle(thirdOuterNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnThreePoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1, lat2, lon2, ele2); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForTwoOuterNodes(int firstOuterNodeId, int secondOuterNodeId, int[] innerNodeIds) { final NodeAccess nodeAccess = storage.getNodeAccess(); double lat0 = nodeAccess.getLat(firstOuterNodeId); double lon0 = nodeAccess.getLon(firstOuterNodeId); double ele0 = nodeAccess.getEle(firstOuterNodeId); double lat1 = nodeAccess.getLat(secondOuterNodeId); double lon1 = nodeAccess.getLon(secondOuterNodeId); double ele1 = nodeAccess.getEle(secondOuterNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForNOuterNodes(int[] outerNodeIds, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); PointList pointList = new PointList(outerNodeIds.length, true); for (int outerNodeId : outerNodeIds) { pointList.add(nodeAccess.getLat(outerNodeId), nodeAccess.getLon(outerNodeId), nodeAccess.getEle(outerNodeId)); } for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnPointList(lat, lon, pointList); nodeAccess.setNode(innerNodeId, lat, lon, ele); } } }
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); } } } }
@Test public void testEnabledElevation() { graph = createGHStorage(defaultGraphLoc, true); NodeAccess na = graph.getNodeAccess(); assertTrue(na.is3D()); na.setNode(0, 10, 20, -10); na.setNode(1, 11, 2, 100); assertEquals(-10, na.getEle(0), 1e-1); assertEquals(100, na.getEle(1), 1e-1); graph.edge(0, 1).setWayGeometry(Helper.createPointList3D(10, 27, 72, 11, 20, 1)); assertEquals(Helper.createPointList3D(10, 27, 72, 11, 20, 1), GHUtility.getEdge(graph, 0, 1).fetchWayGeometry(0)); assertEquals(Helper.createPointList3D(10, 20, -10, 10, 27, 72, 11, 20, 1, 11, 2, 100), GHUtility.getEdge(graph, 0, 1).fetchWayGeometry(3)); assertEquals(Helper.createPointList3D(11, 2, 100, 11, 20, 1, 10, 27, 72, 10, 20, -10), GHUtility.getEdge(graph, 1, 0).fetchWayGeometry(3)); }
private void interpolateElevationsOfInnerNodesForOneOuterNode(int outerNodeId, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); double ele = nodeAccess.getEle(outerNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForOneOuterNode(int outerNodeId, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); double ele = nodeAccess.getEle(outerNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForThreeOuterNodes(int firstOuterNodeId, int secondOuterNodeId, int thirdOuterNodeId, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); double lat0 = nodeAccess.getLat(firstOuterNodeId); double lon0 = nodeAccess.getLon(firstOuterNodeId); double ele0 = nodeAccess.getEle(firstOuterNodeId); double lat1 = nodeAccess.getLat(secondOuterNodeId); double lon1 = nodeAccess.getLon(secondOuterNodeId); double ele1 = nodeAccess.getEle(secondOuterNodeId); double lat2 = nodeAccess.getLat(thirdOuterNodeId); double lon2 = nodeAccess.getLon(thirdOuterNodeId); double ele2 = nodeAccess.getEle(thirdOuterNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnThreePoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1, lat2, lon2, ele2); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForThreeOuterNodes(int firstOuterNodeId, int secondOuterNodeId, int thirdOuterNodeId, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); double lat0 = nodeAccess.getLat(firstOuterNodeId); double lon0 = nodeAccess.getLon(firstOuterNodeId); double ele0 = nodeAccess.getEle(firstOuterNodeId); double lat1 = nodeAccess.getLat(secondOuterNodeId); double lon1 = nodeAccess.getLon(secondOuterNodeId); double ele1 = nodeAccess.getEle(secondOuterNodeId); double lat2 = nodeAccess.getLat(thirdOuterNodeId); double lon2 = nodeAccess.getLon(thirdOuterNodeId); double ele2 = nodeAccess.getEle(thirdOuterNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnThreePoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1, lat2, lon2, ele2); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForTwoOuterNodes(int firstOuterNodeId, int secondOuterNodeId, int[] innerNodeIds) { final NodeAccess nodeAccess = storage.getNodeAccess(); double lat0 = nodeAccess.getLat(firstOuterNodeId); double lon0 = nodeAccess.getLon(firstOuterNodeId); double ele0 = nodeAccess.getEle(firstOuterNodeId); double lat1 = nodeAccess.getLat(secondOuterNodeId); double lon1 = nodeAccess.getLon(secondOuterNodeId); double ele1 = nodeAccess.getEle(secondOuterNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForTwoOuterNodes(int firstOuterNodeId, int secondOuterNodeId, int[] innerNodeIds) { final NodeAccess nodeAccess = storage.getNodeAccess(); double lat0 = nodeAccess.getLat(firstOuterNodeId); double lon0 = nodeAccess.getLon(firstOuterNodeId); double ele0 = nodeAccess.getEle(firstOuterNodeId); double lat1 = nodeAccess.getLat(secondOuterNodeId); double lon1 = nodeAccess.getLon(secondOuterNodeId); double ele1 = nodeAccess.getEle(secondOuterNodeId); for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1); nodeAccess.setNode(innerNodeId, lat, lon, ele); } }
private void interpolateElevationsOfInnerNodesForNOuterNodes(int[] outerNodeIds, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); PointList pointList = new PointList(outerNodeIds.length, true); for (int outerNodeId : outerNodeIds) { pointList.add(nodeAccess.getLat(outerNodeId), nodeAccess.getLon(outerNodeId), nodeAccess.getEle(outerNodeId)); } for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnPointList(lat, lon, pointList); nodeAccess.setNode(innerNodeId, lat, lon, ele); } } }
private void interpolateElevationsOfInnerNodesForNOuterNodes(int[] outerNodeIds, int[] innerNodeIds) { NodeAccess nodeAccess = storage.getNodeAccess(); PointList pointList = new PointList(outerNodeIds.length, true); for (int outerNodeId : outerNodeIds) { pointList.add(nodeAccess.getLat(outerNodeId), nodeAccess.getLon(outerNodeId), nodeAccess.getEle(outerNodeId)); } for (int innerNodeId : innerNodeIds) { double lat = nodeAccess.getLat(innerNodeId); double lon = nodeAccess.getLon(innerNodeId); double ele = elevationInterpolator.calculateElevationBasedOnPointList(lat, lon, pointList); nodeAccess.setNode(innerNodeId, lat, lon, ele); } } }
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); } } } }
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); } } } }