create_vector.html.twig 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. {% extends 'SonataAdminBundle:CRUD:base_list.html.twig' %}
  2. {% block actions %}
  3. {% endblock %}
  4. {% block tab_menu %}
  5. {#{{ knp_menu_render(admin.sidemenu(action), {'currentClass' : 'active', 'template': sonata_admin.adminPool.getTemplate('tab_menu_template')}, 'twig') }}#}
  6. {% endblock %}
  7. {% block list_table %}
  8. <div id="popups" style="display:none">
  9. {% for vector in vectorsPopup %}
  10. <div id="desc_vector_{{vector.getId()}}">{{vector.getDescription()|raw}}</div>
  11. {% endfor %}
  12. </div>
  13. {% include 'LeafletBundle:Leaflet:resources.html.twig' %}
  14. <script type="text/javascript">
  15. window.SONATA_CONFIG.USE_ICHECK = false;
  16. var uuid = {{uuid}};
  17. var layerId = {{layerId}};
  18. var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
  19. osmAttrib = '&copy; <a href="http://openstreetmap.org/copyright">OpenStreetMap</a> contributors',
  20. osm = L.tileLayer(osmUrl, { maxZoom: 18, attribution: osmAttrib }),
  21. map = new L.Map('map', { center: new L.LatLng({{map['lat']}}, {{map['lng']}}), zoom: {{map['zoom']}} }),
  22. drawnItems = L.featureGroup().addTo(map);
  23. var controlLayers = L.control.layers({
  24. 'osm': osm.addTo(map),
  25. "google": L.tileLayer('http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}', {
  26. attribution: 'google'
  27. })
  28. }, { '{{layerName}}': drawnItems }, { position: 'topleft', collapsed: false }).addTo(map);
  29. addElements(drawnItems);
  30. addLayersMap();
  31. map.addControl(new L.Control.Draw({
  32. edit: {
  33. featureGroup: drawnItems,
  34. poly: {
  35. allowIntersection: false
  36. }
  37. },
  38. draw: {
  39. polygon: {
  40. allowIntersection: false,
  41. showArea: true
  42. }
  43. }
  44. }));
  45. map.on(L.Draw.Event.CREATED, function (event) {
  46. var layer = event.layer;
  47. layer.layerType = event.layerType;
  48. drawnItems.addLayer(layer);
  49. drawnItems.eachLayer(function(layer) {
  50. if (typeof layer._uuid !== 'undefined') {
  51. // nada
  52. } else {
  53. layer._uuid = uuid + "_" + layer._leaflet_id;
  54. }
  55. });
  56. });
  57. map.on(L.Draw.Event.DELETED, function (event) {
  58. var layers = event.layers;
  59. var deleteLayers = new Array();
  60. layers.eachLayer(function(layer) {
  61. deleteLayers.push(layer._uuid);
  62. });
  63. sendData = {'layerId' : layerId, 'vectors' : deleteLayers};
  64. var json = JSON.stringify(sendData);
  65. $.ajax({
  66. type: "POST",
  67. url: "{{ url (url_delete) }}",
  68. data: json,
  69. contentType: "application/json; charset=utf-8",
  70. dataType: "json",
  71. success: function(msg) {}
  72. });
  73. });
  74. function saveData() {
  75. var vectorData = new Array();
  76. drawnItems.eachLayer(function(layer) {
  77. if(layer.layerType == "marker") {
  78. data = [layer._latlng];
  79. } else if (layer.layerType == "circle") {
  80. data = [layer._latlng, layer._mRadius];
  81. } else if (layer.layerType == "polyline") {
  82. data = [layer._latlngs];
  83. } else {
  84. data = [layer._latlngs[0]];
  85. }
  86. object = {'_uuid': layer._uuid, 'layerType': layer.layerType, 'data': data, 'layerId': layerId};
  87. vectorData.push(object);
  88. });
  89. console.log(vectorData);
  90. sendData = {'layerId' : layerId, 'vectors' : vectorData};
  91. var json = JSON.stringify(sendData);
  92. $.ajax({
  93. type: "POST",
  94. url: "{{ url (url_post) }}",
  95. data: json,
  96. contentType: "application/json; charset=utf-8",
  97. dataType: "json",
  98. success: function(msg) {
  99. alert(msg.msg);
  100. }
  101. });
  102. }
  103. function addElements(layer) {
  104. console.log({{vectors|length}});
  105. {% if vectors|length > 0 %}
  106. {% for vector in vectors %}
  107. _id = {{vector.getId()}};
  108. name = "{{vector.getName()}}";
  109. type = "{{vector.getType()}}"
  110. _uuid = "{{vector.getUuid()}}"
  111. data = JSON.parse('{{vector.getData()}}'.replace(/&quot;/g,'"'));
  112. if(type == "marker") {
  113. style = JSON.parse('{{vector.getInlineStyle()}}'.replace(/&quot;/g,'"'));
  114. if (typeof style.icon !== 'undefined') {
  115. icon = style.icon;
  116. } else {
  117. icon = "miniBubbleBlueIcon";
  118. }
  119. object = new L.marker([data[0]['lat'], data[0]['lng']],{icon: eval(icon)});
  120. } else if (type == "circle") {
  121. object = new L.circle([data[0]['lat'], data[0]['lng']], data[1],{{vector.getInlineStyle()|raw}});
  122. } else if (type == "polyline") {
  123. object = new L.Polyline({{vector.getPolylinePoints()}},{{vector.getInlineStyle()|raw}});
  124. } else if (type == "rectangle"){
  125. object = new L.Rectangle({{vector.getPolylinePoints()}},{{vector.getInlineStyle()|raw}});
  126. } else {
  127. object = new L.Polygon({{vector.getPolylinePoints()}},{{vector.getInlineStyle()|raw}});
  128. }
  129. object._id = _id;
  130. object.name = name;
  131. object._uuid = _uuid;
  132. object.layerType = type;
  133. desc = $("#desc_vector_{{vector.getId()}}").html();
  134. object.bindPopup("<b>" + name + "</b> <br />" + desc + " <div style='text-align:center;margin-top:5px'><a target='_blank'href='{{path('admin_map_vector_edit',{id: vector.getId()})}}'>EDIT</a></div>");
  135. layer.addLayer(object);
  136. {% endfor %}
  137. {% endif %}
  138. }
  139. function addLayersMap() {
  140. {% if layers|length > 0 %}
  141. {% for layer in layers %}
  142. {% set vectors = layer['vectors'] %}
  143. {% set layerName = layer['name'] %}
  144. {% if vectors|length > 0 %}
  145. newLayer = L.featureGroup();
  146. {% for vector in vectors %}
  147. _id = {{vector.getId()}};
  148. name = "{{vector.getName()}}";
  149. type = "{{vector.getType()}}"
  150. _uuid = "{{vector.getUuid()}}"
  151. data = JSON.parse('{{vector.getData()}}'.replace(/&quot;/g,'"'));
  152. if(type == "marker") {
  153. style = JSON.parse('{{vector.getInlineStyle()}}'.replace(/&quot;/g,'"'));
  154. if (typeof style.icon !== 'undefined') {
  155. icon = style.icon;
  156. } else {
  157. icon = "miniBubbleBlueIcon";
  158. }
  159. object = new L.marker([data[0]['lat'], data[0]['lng']],{icon: eval(icon)});
  160. } else if (type == "circle") {
  161. object = new L.circle([data[0]['lat'], data[0]['lng']], data[1],{{vector.getInlineStyle()|raw}});
  162. } else if (type == "polyline") {
  163. object = new L.Polyline({{vector.getPolylinePoints()}},{{vector.getInlineStyle()|raw}});
  164. } else if (type == "rectangle"){
  165. object = new L.Rectangle({{vector.getPolylinePoints()}},{{vector.getInlineStyle()|raw}});
  166. } else {
  167. object = new L.Polygon({{vector.getPolylinePoints()}},{{vector.getInlineStyle()|raw}});
  168. }
  169. object._id = _id;
  170. object.name = name;
  171. object._uuid = _uuid;
  172. object.layerType = type;
  173. desc = $("#desc_vector_{{vector.getId()}}").html();
  174. object.bindPopup("<b>" + name + "</b> <br />" + desc + " <div style='text-align:center;margin-top:5px'><a target='_blank'href='{{path('admin_map_vector_edit',{id: vector.getId()})}}'>EDIT</a></div>");
  175. newLayer.addLayer(object);
  176. {% endfor %}
  177. controlLayers.addOverlay(newLayer, "{{layerName}}");
  178. {% endif %}
  179. {% endfor %}
  180. {% endif %}
  181. }
  182. </script>
  183. {% endblock %}
  184. {% block content %}
  185. <div class="row">
  186. <div class="col-md-12">
  187. <div class="cms-block cms-block-element">
  188. <div class="box">
  189. <div class="box-body">
  190. <div id="map" style="margin:0 auto; width: 95%; height: 700px; border: 1px solid #ccc"></div>
  191. <br />
  192. <button onclick="saveData()" class="btn btn-block btn-primary" type="button">Guardar Elementos</button>
  193. <br />
  194. <div id="datamaps">
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. </div>
  200. </div>
  201. {% endblock %}
  202. {% block list_filters_actions %}
  203. {% endblock %}
  204. {% block list_filters %}
  205. {% endblock %}