Compute geodetic distances and paths
The following example computes the geodetic distance between given positions. The geodetic distance is the shortest distance on Earth ellipsoid. Apache SIS can also compute the path as a Béziers curve, with the property that the azimuths at the two curve extremities are preserved.
Direct dependencies
Maven coordinates | Module info | Remarks |
---|---|---|
org.apache.sis.storage:sis-referencing |
org.apache.sis.referencing |
Code example
Note that all geographic coordinates below express latitude before longitude.
import java.awt.Shape;
import org.apache.sis.referencing.CommonCRS;
import org.apache.sis.referencing.GeodeticCalculator;
public class GeodeticPaths {
/**
* Demo entry point.
*
* @param args ignored.
*/
public static void main(String[] args) {
var calculator = GeodeticCalculator.create(CommonCRS.WGS84.geographic());
calculator.setStartGeographicPoint(40, 5);
calculator.setEndGeographicPoint(42, 3);
System.out.printf("Result of geodetic calculation: %s%n", calculator);
double d;
d = calculator.getRhumblineLength();
d -= calculator.getGeodesicDistance();
System.out.printf("The rhumbline is %1.2f %s longer%n", d, calculator.getDistanceUnit());
Shape path = calculator.createGeodesicPath2D(100);
System.out.printf("Java2D shape class for approximating this path: %s%n", path.getClass());
}
}
Output
The output depends on the locale. Below is an example:
Result of geodetic calculation:
Coordinate reference system: WGS 84
┌─────────────┬─────────────────┬────────────────┬────────────┐
│ │ Latitude │ Longitude │ Azimuth │
│ Start point │ 40°00′00.0000″N │ 5°00′00.0000″E │ -36°29′45″ │
│ End point │ 42°00′00.0000″N │ 3°00′00.0000″E │ -37°48′29″ │
└─────────────┴─────────────────┴────────────────┴────────────┘
Geodesic distance: 278,632.68 m
The rhumbline is 6.09 m longer
Java2D shape class for approximating this path: class java.awt.geom.QuadCurve2D$Double