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 3df9bc9c2fda9534f88d8d62f8cd967613c09aa4..9128a106829d29ccbf4ae28be06c32dc43a9ac3a 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 2abf37606431a191afe0826788c5d13f7bb1d6a1..b241d2804474afd286a528fbf160351572da7bea 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);
        }