/** * Convert projection coordinates to a LatLonPoint Note: a new object is not created on each call * for the return value. * * @param world convert from these projection coordinates * @param result the object to write to * @return LatLonPoint convert to these lat/lon coordinates */ public LatLonPoint projToLatLon(ProjectionPoint world, LatLonPointImpl result) { double fromX = world.getX() - falseEasting; double fromY = world.getY() - falseNorthing; double toLon = Math.toDegrees(fromX / A) + lon0; double e = Math.exp(-fromY / A); double toLat = Math.toDegrees(Math.PI / 2 - 2 * Math.atan(e)); // Snyder p 44 result.setLatitude(toLat); result.setLongitude(toLon); return result; }
ObservationUI(PointObsDatatype obs) { this.obs = obs; latlonPos.setLatitude(obs.getLocation().getLatitude()); latlonPos.setLongitude(obs.getLocation().getLongitude()); // text bb Dimension t = textFont.getBoundingBox("O"); // LOOK temp bb = new Rectangle2D.Double( -circleRadius, -circleRadius - t.getHeight(), t.getWidth(), t.getHeight()); // add circle bb bb.add(circleBB); }
/** * Convert projection coordinates to a LatLonPoint Note: a new object is not created on each call * for the return value. * * @param world convert from these projection coordinates * @param result the object to write to * @return LatLonPoint convert to these lat/lon coordinates */ public LatLonPoint projToLatLon(ProjectionPoint world, LatLonPointImpl result) { double toLat, toLon; double fromX = world.getX(); double fromY = world.getY(); double rho = Math.sqrt(fromX * fromX + fromY * fromY); double c = Math.asin(rho / R); toLon = lon0; double temp = 0; if (Math.abs(rho) > TOLERANCE) { toLat = Math.asin(Math.cos(c) * sinLat0 + (fromY * Math.sin(c) * cosLat0 / rho)); if (Math.abs(lat0 - PI_OVER_4) > TOLERANCE) { // not 90 or -90 temp = rho * cosLat0 * Math.cos(c) - fromY * sinLat0 * Math.sin(c); toLon = lon0 + Math.atan(fromX * Math.sin(c) / temp); } else if (lat0 == PI_OVER_4) { toLon = lon0 + Math.atan(fromX / -fromY); temp = -fromY; } else { toLon = lon0 + Math.atan(fromX / fromY); temp = fromY; } } else { toLat = lat0; } toLat = Math.toDegrees(toLat); toLon = Math.toDegrees(toLon); if (temp < 0) { toLon += 180; } toLon = LatLonPointImpl.lonNormal(toLon); result.setLatitude(toLat); result.setLongitude(toLon); return result; }