Fix longitude wrapping to range (-180, 180) 60/99060/1
authorMatt Blair <blair1618@gmail.com>
Sat, 19 Nov 2016 03:40:11 +0000 (22:40 -0500)
committerMatt Blair <blair1618@gmail.com>
Sat, 19 Nov 2016 03:40:11 +0000 (22:40 -0500)
Change-Id: I930a0309d6d8221ee4cb62a3b76b12740992743e

src/mapzen/mapzen_util.c
src/mapzen/tangram_view.cpp

index 3df9bc9..9128a10 100644 (file)
@@ -48,12 +48,12 @@ void calculate_point(gdouble Lat1, gdouble Lon1, int dBearing, gdouble dist, coo
 
 double wrap_longitude(double longitude)
 {
-       return fmod(longitude, 180.0);
+       return longitude - round(longitude / 360.0) * 360.0;
 }
 
 double wrap_latitude(double latitude)
 {
-       return fmod(latitude, 90.0);
+       return latitude - round(latitude / 180.0) * 180.0;
 }
 
 double degrees_to_radians(double degrees)
index 2abf376..b241d28 100644 (file)
@@ -312,6 +312,8 @@ mapzen_error_e TangramView::moveCenter(maps_view_h view, int delta_x, int delta_
        double y = 0.5 * m_h + (double)delta_y;
        double lng = 0.0, lat = 0.0;
        if (m_map->screenPositionToLngLat(x, y, &lng, &lat)) {
+               lng = wrap_longitude(lng);
+               lat = wrap_latitude(lat);
                m_map->setPosition(lng, lat);
        }