
org.opentripplanner.util.ElevationUtils Maven / Gradle / Ivy
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 {
// Set up a MathTransform based on the EarthGravitationalModel
private static MathTransform mt;
static {
try {
mt =
new DefaultMathTransformFactory()
.createParameterizedTransform(
new EarthGravitationalModel.Provider().getParameters().createValue()
);
} catch (FactoryException e) {
e.printStackTrace();
}
}
/**
* Computes the difference between the ellipsoid and geoid at a specified lat/lon using Geotools
* EarthGravitationalModel. For unknown reasons, this method can produce incorrect results if
* called at the same time from multiple threads, so the method has been made synchronized.
*
* @return difference in meters
*/
public static synchronized double computeEllipsoidToGeoidDifference(double lat, double lon)
throws TransformException {
// Compute the offset
DirectPosition3D dest = new DirectPosition3D();
mt.transform(new DirectPosition3D(lon, lat, 0), dest);
return dest.z;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy