aboutsummaryrefslogtreecommitdiff
path: root/src/geodesic.c
diff options
context:
space:
mode:
authorCharles Karney <charles@karney.com>2018-02-22 20:59:57 -0500
committerCharles Karney <charles@karney.com>2018-02-22 20:59:57 -0500
commit6d5e19110046ea2aefc645f40dfce4b3dadb8109 (patch)
tree1fa2dbcd199eb69cdc25294a6ccc4992c638ae38 /src/geodesic.c
parent3fcaf7dd2f5334908536126429bc6a4f26261bde (diff)
downloadPROJ-6d5e19110046ea2aefc645f40dfce4b3dadb8109.tar.gz
PROJ-6d5e19110046ea2aefc645f40dfce4b3dadb8109.zip
Fix issue #812
Implement Polygon AddEdge fix in C library (will be version 1.49.2 of C library for proj 5.0.0). Still to do: add tests to expand code coverage. This will only affect geodtest.c which is not part of the compiled library.
Diffstat (limited to 'src/geodesic.c')
-rw-r--r--src/geodesic.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/geodesic.c b/src/geodesic.c
index 233dc34c..6a383b72 100644
--- a/src/geodesic.c
+++ b/src/geodesic.c
@@ -89,10 +89,14 @@ static void Init() {
tolb = tol0 * tol2;
xthresh = 1000 * tol2;
degree = pi/180;
+ #if defined(NAN)
+ NaN = NAN;
+ #else
{
real minus1 = -1;
NaN = sqrt(minus1);
}
+ #endif
init = 1;
}
}
@@ -1809,13 +1813,13 @@ int transitdirect(real lon1, real lon2) {
#if HAVE_C99_MATH
lon1 = remainder(lon1, (real)(720));
lon2 = remainder(lon2, (real)(720));
- return ( (lon2 >= 0 && lon2 < 360 ? 0 : 1) -
- (lon1 >= 0 && lon1 < 360 ? 0 : 1) );
+ return ( (lon2 <= 0 && lon2 > -360 ? 1 : 0) -
+ (lon1 <= 0 && lon1 > -360 ? 1 : 0) );
#else
lon1 = fmod(lon1, (real)(720));
lon2 = fmod(lon2, (real)(720));
- return ( ((lon2 >= 0 && lon2 < 360) || lon2 < -360 ? 0 : 1) -
- ((lon1 >= 0 && lon1 < 360) || lon1 < -360 ? 0 : 1) );
+ return ( ((lon2 <= 0 && lon2 > -360) || lon2 > 360 ? 1 : 0) -
+ ((lon1 <= 0 && lon1 > -360) || lon1 > 360 ? 1 : 0) );
#endif
}
@@ -1888,7 +1892,7 @@ void geod_polygon_addpoint(const struct geod_geodesic* g,
void geod_polygon_addedge(const struct geod_geodesic* g,
struct geod_polygon* p,
real azi, real s) {
- if (p->num) { /* Do nothing is num is zero */
+ if (p->num) { /* Do nothing is num is zero */
real lat, lon, S12 = 0; /* Initialize S12 to stop Visual Studio warning */
geod_gendirect(g, p->lat, p->lon, azi, GEOD_LONG_UNROLL, s,
&lat, &lon, 0,