org.opentripplanner.util.ElevationUtils Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of otp Show documentation
Show all versions of otp Show documentation
The OpenTripPlanner multimodal journey planning system
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.
*
* @param lat
* @param lon
* @return difference in meters
* @throws FactoryException
* @throws TransformException
*/
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