view.html 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. {% extends "panorama/base.html" %}
  2. {% load staticfiles %}
  3. {% load distance_filter %}
  4. {% load i18n %}
  5. {% block title %}{{ panorama.name }}{% endblock title %}
  6. {% block js %}
  7. <script>
  8. var title = "{{ panorama.name|escapejs }}";
  9. var panorama_id = {{ panorama.pk }};
  10. var panorama_url = "/api/v1/panoramas/{{ panorama.pk }}/";
  11. var img_prefix = '{{ panorama.tiles_url }}';
  12. var image_loop = {{ panorama.loop|yesno:"true,false,undefined" }};
  13. var image_width = {{ panorama.image_width }};
  14. var image_height = {{ panorama.image_height }};
  15. var csrf_token = "{{ csrf_token }}";
  16. </script>
  17. <script src="{% static "panorama/js/pano.js" %}"></script>
  18. <script>window.onload = load_pano</script>
  19. <script>
  20. {% for zoom_level, data in panorama.tiles_data.items %}
  21. zooms[{{ zoom_level }}] = new tzoom({{ zoom_level }});
  22. zooms[{{ zoom_level }}].ntiles.x = {{ data.ntiles_x }};
  23. zooms[{{ zoom_level }}].ntiles.y = {{ data.ntiles_y }};
  24. zooms[{{ zoom_level }}].tile.width = {{ data.tile_width }};
  25. zooms[{{ zoom_level }}].tile.height = {{ data.tile_height }};
  26. zooms[{{ zoom_level }}].last_tile.width = {{ data.last_tile_width }};
  27. zooms[{{ zoom_level }}].last_tile.height = {{ data.last_tile_height }};
  28. {% endfor %}
  29. {% for id, refpoint in panorama.refpoints_data %}
  30. point_list[{{ id }}] = new Array("{{ refpoint.name|escapejs }}", {{ refpoint.distance }}, {{ refpoint.cap }}, {{ refpoint.elevation }}, "{{ refpoint.url }}", "/api/v1/refpoints/{{ refpoint.id }}/");
  31. {% endfor %}
  32. ref_points = new Array();
  33. {% for ref in panorama.references_data %}
  34. ref_points["{{ ref.name|escapejs }}"] = {url: "/api/v1/references/{{ ref.id }}/", x: {{ ref.x }}, y: {{ ref.y }}, cap: {{ ref.cap }}, ele: {{ ref.elevation }}};
  35. {% endfor %}
  36. </script>
  37. <script src="{% static "panorama/js/hide_n_showForm.js" %}"></script>
  38. <script src="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.js"></script>
  39. <script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
  40. <script>
  41. $( document ).ready(function() {
  42. var viewField, viewDirection ;
  43. var map = L.map('mapid').setView([{{ panorama.latitude }}, {{ panorama.longitude }}], 13);
  44. // create the tile layer with correct attribution
  45. var osmUrl='http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png';
  46. var osmAttrib='Map data © <a href="http://openstreetmap.org">OpenStreetMap</a> contributors';
  47. var osm = new L.TileLayer(osmUrl, {attribution: osmAttrib});
  48. map.addLayer(osm);
  49. L.marker([{{ panorama.latitude }}, {{ panorama.longitude }}]).addTo(map);
  50. var bearing = $('#angle_ctrl').val();
  51. var lat = {{panorama.latitude}};
  52. var lng = {{panorama.longitude}};
  53. var cap = getCapMinMaxVisible(image_width, {{ panorama.cap_min }}, {{ panorama.cap_max }});
  54. viewField = getCone({{panorama.latitude}},{{panorama.longitude}},bearing,cap,5000);
  55. viewDirection = L.polygon([[lat, lng],[destVincenty(lat, lng, bearing, 7000).lat,destVincenty(lat, lng, bearing, 7000).lng]]);
  56. viewDirection.addTo(map);
  57. viewField.addTo(map);
  58. $('#mon-canvas').on('mousemove DOMMouseScroll', function(e) {
  59. bearing = $('#angle_ctrl').val();
  60. map.removeLayer(viewField);
  61. map.removeLayer(viewDirection);
  62. var cap = getCapMinMaxVisible(image_width, {{ panorama.cap_min }}, {{ panorama.cap_max }});
  63. viewField = getCone(lat,lng,bearing,cap,5000);
  64. viewField.addTo(map);
  65. viewDirection = L.polygon([[lat, lng],[destVincenty(lat, lng, bearing, 7000).lat,destVincenty(lat, lng, bearing, 7000).lng]]);
  66. viewDirection.addTo(map);
  67. });
  68. });
  69. </script>
  70. {% endblock js %}
  71. {% block top-menu-title %}
  72. <a class="navbar-brand" href="{% url 'panorama:main' %}"><i class="fa fa-fw fa-home"></i></a>
  73. <a class="navbar-brand" href="">{{panorama.name}}</a>
  74. {% endblock %}
  75. {% block top-menu-pano-items %}
  76. <li class="dropdown">
  77. <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-question-circle"></i>  {% trans "Parameters" %}<b class="caret"></b></a>
  78. <ul class="dropdown-menu">
  79. <li>
  80. <div>
  81. <p>{% trans "latitude" %} : <em><span id="pos_lat">{{ panorama.latitude }}</span>°</em></p>
  82. <p>{% trans "longitude" %} : <em><span id="pos_lon">{{ panorama.longitude }}</span>°</em></p>
  83. <p>{% trans "altitude" %} : <em><span id="pos_alt">{{ panorama.altitude }}</span> m</em></p>
  84. </div>
  85. </li>
  86. </ul>
  87. </li>
  88. <li class="dropdown">
  89. <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-gears"></i>  {% trans "Controls" %}<b class="caret"></b></a>
  90. <ul class="dropdown-menu">
  91. <li>
  92. <label>{% trans "Zoom" %} : <input type="range" min="0" max="2" value="2" id="zoom_ctrl"/></label>
  93. <label>{% trans "Cap" %} : <input type="number" min="0" max="360" step="10" value="0" autofocus="" id="angle_ctrl"/></label>
  94. <label>{% trans "Élévation" %} : <input type="number" min="-90" max="90" step="1" value="0" autofocus="" id="elvtn_ctrl"/></label>
  95. </li>
  96. </ul>
  97. </li>
  98. <li class="dropdown">
  99. <a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-search"></i>  {% trans "Localize" %}<b class="caret"></b></a>
  100. <ul class="dropdown-menu">
  101. <li>
  102. <label class="form_col" title="La latitude ϵ [-90°, 90°]. Ex: 12.55257">{% trans "Latitude" %} :
  103. <input name="loca_latitude" type="number" min="-90" max="90" id="loca_latitude"/></label>
  104. <label class="form_col" title="La longitude ϵ [-180°, 180°]. Ex: 144.14723">{% trans "Longitude" %} :
  105. <input name="loca_longitude" type="number" min="-180" max="180" id="loca_longitude"/></label>
  106. <label class="form_col" title="L'altitude positive Ex: 170">{% trans "Altitude" %} :
  107. <input name="loca_altitude" type="number" min="-400" id="loca_altitude"/></label>
  108. <div class="answer">
  109. <input type="button" value="{% trans "Localize" %}" id="loca_button"/>
  110. <input type="button" value="{% trans "Delete" %}" id="loca_erase"/>
  111. </div>
  112. </li>
  113. </ul>
  114. </li>
  115. {% endblock %}
  116. {% block sidebar %}
  117. {% endblock %}
  118. {% block wrapper-style %}
  119. style="padding-left:0px"
  120. {% endblock %}
  121. {% block content %}
  122. {% endblock content %}
  123. {% block css %}
  124. <link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet/v0.7.7/leaflet.css" />
  125. {% endblock css %}
  126. {% block pano %}
  127. <canvas id="mon-canvas">
  128. Ce message indique que ce navigateur est vétuste car il ne supporte pas <samp>canvas</samp> (IE6, IE7, IE8, ...)
  129. </canvas>
  130. <p id="info"></p>
  131. <p id="insert"><select id="sel_point" name="known_points">
  132. {% for id, refpoint in panorama.refpoints_data %}
  133. <option>{{ refpoint.name }}</option>
  134. {% endfor %}
  135. </select>
  136. <input type="button" id="do-insert" value={% trans "insert" %}/>
  137. <input type="button" id="do-delete" value={% trans "delete" %}/>
  138. <input type="button" id="do-cancel" value={% trans "cancel" %}/>
  139. </p>
  140. <p id="res"></p>
  141. <div id="mapid"></div>
  142. {% endblock pano %}