diff --git a/map/templates/map.html b/map/templates/map.html index aac18f4..825a295 100644 --- a/map/templates/map.html +++ b/map/templates/map.html @@ -56,10 +56,15 @@ var px_per_deg_lng = size_of_world_in_px / 360; var px_per_deg_lat = size_of_world_in_px / 180; - ajax_get_request("{{ url_for('get_nearest_router') }}?lng=" + pos.latlng.lng + "&lat=" + pos.latlng.lat, function(router) { + // normalize longitude (user can shift map west/east and leave the [-180..180] range + var lng = mod(pos.latlng.lng, 360); + var lat = pos.latlng.lat; + if (lng > 180) { lng -= 360; } + + ajax_get_request("{{ url_for('get_nearest_router') }}?lng=" + lng + "&lat=" + lat, function(router) { // decide if router is close enough - var lng_delta = Math.abs(pos.latlng.lng - router.position.coordinates[0]) - var lat_delta = Math.abs(pos.latlng.lat - router.position.coordinates[1]) + var lng_delta = Math.abs(lng - router.position.coordinates[0]) + var lat_delta = Math.abs(lat - router.position.coordinates[1]) // convert degree distances into px distances on the map var x_delta_px = lng_delta * px_per_deg_lng; @@ -130,6 +135,11 @@ xmlhttp.open("GET", url, true); xmlhttp.send(); } + + function mod(n, m) { + // use own modulo function (see http://stackoverflow.com/q/4467539) + return ((n % m) + m) % m; + }