#include <cmath>
+#include <simgear/sg_inlines.h>
#include <simgear/structure/exception.hxx>
#include <simgear/debug/logstream.hxx>
// coordinates 0/0/-EQURAD. It may be any other place on geoide's surface,
// the Northpole, Hawaii or Wentorf. This one was easy to code ;-)
geod.setLongitudeRad( 0.0 );
- geod.setLongitudeRad( 0.0 );
+ geod.setLatitudeRad( 0.0 );
geod.setElevationM( -EQURAD );
return;
}
return ret == 0;
}
+SGGeod
+SGGeodesy::direct(const SGGeod& p1, double course1, double distance)
+{
+ double lat2, lon2, course2;
+ int ret = _geo_direct_wgs_84(p1.getLatitudeDeg(), p1.getLongitudeDeg(),
+ course1, distance, &lat2, &lon2, &course2);
+ if (ret != 0) {
+ throw sg_exception("_geo_direct_wgs_84 failed");
+ }
+
+ SGGeod p2;
+ p2.setLatitudeDeg(lat2);
+ p2.setLongitudeDeg(lon2);
+ p2.setElevationM(0);
+ return p2;
+}
+
+
// given lat1, lon1, lat2, lon2, calculate starting and ending
// az1, az2 and distance (s). Lat, lon, and azimuth are in degrees.
// distance in meters
} else if( fabs(cosphi1) < testv ) {
// initial point is polar
int k = _geo_inverse_wgs_84( lat2,lon2,lat1,lon1, az1,az2,s );
- k = k; // avoid compiler error since return result is unused
+ SG_UNUSED(k);
+
b = *az1; *az1 = *az2; *az2 = b;
return 0;
} else if( fabs(cosphi2) < testv ) {
double _lon1 = lon1 + 180.0f;
int k = _geo_inverse_wgs_84( lat1, lon1, lat1, _lon1,
az1, az2, s );
- k = k; // avoid compiler error since return result is unused
+ SG_UNUSED(k);
+
*s /= 2.0;
*az2 = *az1 + 180.0;
if( *az2 > 360.0 ) *az2 -= 360.0;