package org.opentripplanner.util;
import org.geotools.geometry.DirectPosition3D;
import org.geotools.referencing.operation.DefaultMathTransformFactory;
import org.geotools.referencing.operation.transform.EarthGravitationalModel;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.operation.MathTransform;
import org.opengis.referencing.operation.TransformException;
/**
* Created by demory on 2/16/17.
*/
public class ElevationUtils {
/**
* 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;
}
}