/** * Computes the difference between the ellipsoid and geoid at a specified lat/lon using Geotools EarthGravitationalModel * * @param lat * @param lon * @return difference in meters * @throws FactoryException * @throws TransformException */ public static double computeEllipsoidToGeoidDifference(double lat, double lon) throws FactoryException, TransformException { // Set up a MathTransform based on the EarthGravitationalModel EarthGravitationalModel.Provider provider = new EarthGravitationalModel.Provider(); DefaultMathTransformFactory factory = new DefaultMathTransformFactory(); MathTransform mt = factory.createParameterizedTransform(provider.getParameters().createValue()); // Compute the offset DirectPosition3D dest = new DirectPosition3D(); mt.transform(new DirectPosition3D(lon, lat, 0), dest); return dest.z; } }
/** * Returns a clone of this point. * * @return A clone of this position. */ @Override public DirectPosition3D clone() { return new DirectPosition3D(this); }
/** * A coordinate position consisting of all the maximal ordinates for each dimension for all * points within the {@code Envelope}. */ public DirectPosition getUpperCorner() { return new DirectPosition3D(crs, getMaxX(), getMaxY(), getMinZ()); }
/** * A coordinate position consisting of all the minimal ordinates for each dimension for all * points within the {@code Envelope}. */ public DirectPosition getLowerCorner() { return new DirectPosition3D(crs, getMinX(), getMinY(), getMinZ()); }
/** * * <!-- begin-user-doc --> * <!-- end-user-doc --> * * @generated modifiable */ public Object parse(ElementInstance instance, Node node, Object value) throws Exception { CoordinateReferenceSystem crs = GML3ParsingUtils.crs(node); // double[] position = (double[]) value; Double[] position = (Double[]) value; DirectPosition dp = null; if (position.length < 2) { dp = (crs != null) ? new DirectPosition1D(crs) : new DirectPosition1D(); dp.setOrdinate(0, position[0].doubleValue()); } else if (position.length < 3) { dp = (crs != null) ? new DirectPosition2D(crs) : new DirectPosition2D(); dp.setOrdinate(0, position[0].doubleValue()); dp.setOrdinate(1, position[1].doubleValue()); } else { dp = (crs != null) ? new DirectPosition3D(crs) : new DirectPosition3D(); dp.setOrdinate(0, position[0].doubleValue()); dp.setOrdinate(1, position[1].doubleValue()); dp.setOrdinate(2, position[2].doubleValue()); } return dp; }
dps[coordIndex] = new DirectPosition3D(crs); dps[coordIndex].setOrdinate(0, values[ordinateIdx].doubleValue()); dps[coordIndex].setOrdinate(1, values[ordinateIdx + 1].doubleValue());