view.html 7.4 KB

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