return calculateElevationBasedOnTwoPoints(lat, lon, lat1, lon1, ele1, lat2, lon2, ele2); } else if (l20 > l10 && l20 > l21) { return calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat2, lon2, ele2); } else { return calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1);
@Test public void calculatesElevationOnTwoPoints() { assertEquals(15, elevationInterpolator.calculateElevationBasedOnTwoPoints(0, 0, -10, -10, 10, 10, 10, 20), PRECISION); assertEquals(15, elevationInterpolator.calculateElevationBasedOnTwoPoints(-10, 10, -10, -10, 10, 10, 10, 20), PRECISION); assertEquals(15, elevationInterpolator.calculateElevationBasedOnTwoPoints(-5, 5, -10, -10, 10, 10, 10, 20), PRECISION); assertEquals(19, elevationInterpolator.calculateElevationBasedOnTwoPoints(8, 8, -10, -10, 10, 10, 10, 20), PRECISION); assertEquals(10, elevationInterpolator.calculateElevationBasedOnTwoPoints(0, 0, -ElevationInterpolator.EPSILON / 3, 0, 10, ElevationInterpolator.EPSILON / 2, 0, 20), PRECISION); assertEquals(20, elevationInterpolator.calculateElevationBasedOnTwoPoints(0, 0, -ElevationInterpolator.EPSILON / 2, 0, 10, ElevationInterpolator.EPSILON / 3, 0, 20), PRECISION); assertEquals(10, elevationInterpolator.calculateElevationBasedOnTwoPoints(0, 0, 0, 0, 10, 0, 0, 20), PRECISION); }
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); } }
return pointList.getEle(0); } else if (size == 2) { return calculateElevationBasedOnTwoPoints(lat, lon, pointList.getLat(0), pointList.getLon(0), pointList.getEle(0), pointList.getLat(1), pointList.getLon(1), pointList.getEle(1));
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); } } } }
return calculateElevationBasedOnTwoPoints(lat, lon, lat1, lon1, ele1, lat2, lon2, ele2); } else if (l20 > l10 && l20 > l21) { return calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat2, lon2, ele2); } else { return calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1);
return calculateElevationBasedOnTwoPoints(lat, lon, lat1, lon1, ele1, lat2, lon2, ele2); } else if (l20 > l10 && l20 > l21) { return calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat2, lon2, ele2); } else { return calculateElevationBasedOnTwoPoints(lat, lon, lat0, lon0, ele0, lat1, lon1, ele1);
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); } }
return pointList.getEle(0); } else if (size == 2) { return calculateElevationBasedOnTwoPoints(lat, lon, pointList.getLat(0), pointList.getLon(0), pointList.getEle(0), pointList.getLat(1), pointList.getLon(1), pointList.getEle(1));
return pointList.getEle(0); } else if (size == 2) { return calculateElevationBasedOnTwoPoints(lat, lon, pointList.getLat(0), pointList.getLon(0), pointList.getEle(0), pointList.getLat(1), pointList.getLon(1), pointList.getEle(1));
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); } } } }