/** * Get an OMText label for a segments between the given lat/lon points whose given distance and * cumulative distance is specified. */ public OMText createLabel( Geo g1, Geo g2, double dist, double cumulativeDist, Length distanceUnits) { Geo mid; switch (getLineType()) { case LINETYPE_STRAIGHT: double lat = (g1.getLatitude() + g2.getLatitude()) / 2.0; double lon = (g1.getLongitude() + g2.getLongitude()) / 2.0; mid = new Geo(lat, lon); break; case LINETYPE_RHUMB: System.err.println("Rhumb distance calculation not implemented."); case LINETYPE_GREATCIRCLE: case LINETYPE_UNKNOWN: default: mid = g1.midPoint(g2); } // String text = ((int)dist) + " (" + ((int)cumulativeDist) + // ")"; String text = (df.format(distanceUnits.fromRadians(dist))) + " (" + (df.format(distanceUnits.fromRadians(cumulativeDist))) + ") " + distanceUnits.getAbbr(); OMText omtext = new OMText(mid.getLatitude(), mid.getLongitude(), text, OMText.JUSTIFY_LEFT); // omtext.setLinePaint(new Color(200, 200, 255)); return omtext; }
private Position findIntersectionBottom(Position newPos) { // The mouse can be in 4 different areas int lengthMax = 500000; double bearing = C.rhumbLineBearingTo(newPos); System.out.println("Vertical bearing " + verticalBearing); System.out.println("Horizontal bearing " + horizontalBearing); Geo intersectionPoint = null; if (bearing >= 0 && bearing <= 180) { // if (bearing > 90 && bearing < 180){ // Create a line going from C, in reverse vertical direction eg up Position verticalEndPosition = Calculator.findPosition(A, verticalBearing, lengthMax); Geo a1 = new Geo(A.getLatitude(), A.getLongitude()); Geo a2 = new Geo(verticalEndPosition.getLatitude(), verticalEndPosition.getLongitude()); // Create a line going from newPos in reverse horizontal direction // eg left Position horizontalEndPosition = Calculator.findPosition( newPos, Calculator.reverseDirection(horizontalBearing), lengthMax); Geo b1 = new Geo(newPos.getLatitude(), newPos.getLongitude()); Geo b2 = new Geo(horizontalEndPosition.getLatitude(), horizontalEndPosition.getLongitude()); intersectionPoint = Intersection.segmentsIntersect(a1, a2, b1, b2); } if (bearing > 180) { // Create a line going from C, in reverse vertical direction eg up Position verticalEndPosition = Calculator.findPosition(C, verticalBearing, lengthMax); Geo a1 = new Geo(C.getLatitude(), C.getLongitude()); Geo a2 = new Geo(verticalEndPosition.getLatitude(), verticalEndPosition.getLongitude()); // Create a line going from newPos in horizontal direction eg right Position horizontalEndPosition = Calculator.findPosition(newPos, horizontalBearing, lengthMax); Geo b1 = new Geo(newPos.getLatitude(), newPos.getLongitude()); Geo b2 = new Geo(horizontalEndPosition.getLatitude(), horizontalEndPosition.getLongitude()); intersectionPoint = Intersection.segmentsIntersect(a1, a2, b1, b2); } if (intersectionPoint != null) { newPos = Position.create(intersectionPoint.getLatitude(), intersectionPoint.getLongitude()); return newPos; } else { System.out.println("something went bad... for mouse bearing " + bearing); return null; } }