Parcourir la source

fix pour les pano à 360°

Samuel il y a 8 ans
Parent
commit
a0c6a79efa
2 fichiers modifiés avec 22 ajouts et 14 suppressions
  1. 14 12
      panorama/static/panorama/js/pano.js
  2. 8 2
      panorama/templates/panorama/view.html

+ 14 - 12
panorama/static/panorama/js/pano.js

@@ -1240,19 +1240,21 @@ function getCapMinMaxVisible(){
     // 1 pixel_screen = X pixel_photo = pixel_photo / ((nb_tiles-1) * pixel_tile + pixel_last_tile)
     // (nb_tiles-1)*pixel_tile + pixel_last_tile = zm.im.visible_width
     var half_width = (cw - 2*border_width) * ( image_width / (zm.im.visible_width)) / 2 ;
-    var x_min = x - half_width ;
-    var x_max = x + half_width ; 
-    // Check outside borders
-    if (x_min < 0){ x_min = 0 };
-    if (x_max > image_width) {x_max = image_width};
-    
+
     var total_angle = fmodulo(image_cap_max - image_cap_min, 360); // panorama total angle
+    if (total_angle == 0){total_angle = 360}; // if panorama loops
+    var half_angle = total_angle * (half_width / image_width);
 
     // min and max visible cap
-    var cap_min = image_cap_min + total_angle * (x_min / image_width);
-    var cap_max = image_cap_min + total_angle * (x_max / image_width);
-    if (cap_min>360){cap_min-=360};
-    if (cap_max>360){cap_max-=360};
+    var bearing = parseInt($('#angle_ctrl').val());
+    var cap_min = fmodulo(bearing - half_angle, 360);
+    var cap_max = fmodulo(bearing + half_angle, 360);
+
+    // check if we repeat the pano
+    if ((bearing < cap_min) && (bearing > cap_max)){
+        var cap_min = 0;
+        var cap_max = 360;
+    };
 
     return {cap_min: cap_min, cap_max : cap_max}
 };
@@ -1269,10 +1271,10 @@ function load_map(){
 	var osmAttrib='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors';
 	var osm = new L.TileLayer(osmUrl, {attribution: osmAttrib});		
 	map.addLayer(osm);
-        map.addLayer( markerClusters );
+    map.addLayer( markerClusters );
 
 	L.marker([panorama_lat, panorama_lng]).addTo(map);
-        map.fitBounds(allMarkers,{padding: [30, 30]});
+    map.fitBounds(allMarkers,{padding: [30, 30]});
 
 
     update_map();

+ 8 - 2
panorama/templates/panorama/view.html

@@ -21,8 +21,13 @@
       var image_loop = {{ panorama.loop|yesno:"true,false,undefined" }};
       var image_width = {{ panorama.image_width }};
       var image_height = {{ panorama.image_height }};
-      var image_cap_min = {{ panorama.cap_min }};
-      var image_cap_max = {{ panorama.cap_max }};
+      if (image_loop){
+        var image_cap_min = 0;
+        var image_cap_max = 360;
+      } else {
+        var image_cap_min = {{ panorama.cap_min }};
+        var image_cap_max = {{ panorama.cap_max }};
+      };
       var panorama_lat = {{ panorama.latitude }};
       var panorama_lng = {{ panorama.longitude }};
       var csrf_token = "{{ csrf_token }}";
@@ -75,6 +80,7 @@
           markerClusters.addLayer( marker );
           allMarkers.push([{{ pano.latitude }}, {{ pano.longitude }}]);
       {% endfor %}
+      
       $( document ).ready(load_map);
     </script>
 {% endblock js %}