create_vector.html.twig 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  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"></div>
  9. {% include 'LeafletBundle:Leaflet:resources.html.twig' %}
  10. <script type="text/javascript">
  11. window.SONATA_CONFIG.USE_ICHECK = false;
  12. var uuid = {{uuid}};
  13. var layerId = {{layerId}};
  14. //$( document ).ready(function() {});
  15. var osmUrl = 'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',
  16. osmAttrib = '&copy; <a href="http://openstreetmap.org/copyright">OpenStreetMap</a> contributors',
  17. osm = L.tileLayer(osmUrl, { maxZoom: 18, attribution: osmAttrib }),
  18. map = new L.Map('map', { center: new L.LatLng(51.509700680916, -0.056858360712795), zoom: 15 }),
  19. drawnItems = L.featureGroup().addTo(map);
  20. L.control.layers({
  21. 'osm': osm.addTo(map),
  22. "google": L.tileLayer('http://www.google.cn/maps/vt?lyrs=s@189&gl=cn&x={x}&y={y}&z={z}', {
  23. attribution: 'google'
  24. })
  25. }, { 'drawlayer': drawnItems }, { position: 'topleft', collapsed: false }).addTo(map);
  26. addElements();
  27. map.addControl(new L.Control.Draw({
  28. edit: {
  29. featureGroup: drawnItems,
  30. poly: {
  31. allowIntersection: false
  32. }
  33. },
  34. draw: {
  35. polygon: {
  36. allowIntersection: false,
  37. showArea: true
  38. }
  39. }
  40. }));
  41. map.on(L.Draw.Event.CREATED, function (event) {
  42. var layer = event.layer;
  43. layer.layerType = event.layerType;
  44. drawnItems.addLayer(layer);
  45. drawnItems.eachLayer(function(layer) {
  46. if (typeof layer._uuid !== 'undefined') {
  47. // nada
  48. } else {
  49. layer._uuid = uuid + "_" + layer._leaflet_id;
  50. }
  51. });
  52. });
  53. map.on(L.Draw.Event.DELETED, function (event) {
  54. var layers = event.layers;
  55. var deleteLayers = new Array();
  56. layers.eachLayer(function(layer) {
  57. deleteLayers.push(layer._uuid);
  58. });
  59. sendData = {'layerId' : layerId, 'vectors' : deleteLayers};
  60. var json = JSON.stringify(sendData);
  61. $.ajax({
  62. type: "POST",
  63. url: "{{ url (url_delete) }}",
  64. data: json,
  65. contentType: "application/json; charset=utf-8",
  66. dataType: "json",
  67. success: function(msg) {}
  68. });
  69. });
  70. function saveData() {
  71. var vectorData = new Array();
  72. drawnItems.eachLayer(function(layer) {
  73. if(layer.layerType == "marker") {
  74. data = [layer._latlng];
  75. } else if (layer.layerType == "circle") {
  76. data = [layer._latlng, layer._mRadius];
  77. } else if (layer.layerType == "polyline") {
  78. data = [layer._latlngs];
  79. } else {
  80. data = [layer._latlngs[0]];
  81. }
  82. object = {'_uuid': layer._uuid, 'layerType': layer.layerType, 'data': data, 'layerId': layerId};
  83. vectorData.push(object);
  84. });
  85. console.log(vectorData);
  86. sendData = {'layerId' : layerId, 'vectors' : vectorData};
  87. var json = JSON.stringify(sendData);
  88. $.ajax({
  89. type: "POST",
  90. url: "{{ url (url_post) }}",
  91. data: json,
  92. contentType: "application/json; charset=utf-8",
  93. dataType: "json",
  94. success: function(msg) {
  95. alert(msg.msg);
  96. }
  97. });
  98. }
  99. function addElements() {
  100. console.log({{vectors|length}});
  101. {% if vectors|length > 0 %}
  102. {% for vector in vectors %}
  103. _id = {{vector.getId()}};
  104. name = "{{vector.getName()}}";
  105. type = "{{vector.getType()}}"
  106. _uuid = "{{vector.getUuid()}}"
  107. data = JSON.parse("{{vector.getData()}}".replace(/&quot;/g,'"'));
  108. if(type == "marker") {
  109. object = new L.marker([data[0]['lat'], data[0]['lng']]);
  110. } else if (type == "circle") {
  111. object = new L.circle([data[0]['lat'], data[0]['lng']], data[1]);
  112. } else if (type == "polyline") {
  113. object = new L.Polyline({{vector.getPolylinePoints()}});
  114. } else if (type == "rectangle"){
  115. object = new L.Rectangle({{vector.getPolylinePoints()}});
  116. } else {
  117. object = new L.Polygon({{vector.getPolylinePoints()}});
  118. }
  119. object._id = _id;
  120. object.name = name;
  121. object._uuid = _uuid;
  122. object.layerType = type;
  123. object.bindPopup("<b>" + name + "</b><br /> {{vector.getDescription()|raw}} <br /> <div style='text-align:center'><a target='_blank'href='{{path('admin_map_vector_edit',{id: vector.getId()})}}'>edit</a></div>");
  124. drawnItems.addLayer(object);
  125. {% endfor %}
  126. {% endif %}
  127. }
  128. </script>
  129. {% endblock %}
  130. {% block content %}
  131. <div class="row">
  132. <div class="col-md-10">
  133. <div class="cms-block cms-block-element">
  134. <div class="box">
  135. <div class="box-header">
  136. <h3 class="box-title">Añadir elementos</h3>
  137. </div>
  138. <div class="box-body">
  139. <div id="map" style="margin:0 auto; width: 80%; height: 600px; border: 1px solid #ccc"></div>
  140. <br />
  141. <button onclick="saveData()" class="btn btn-block btn-primary" type="button">Guardar Elementos</button>
  142. <br />
  143. <div id="datamaps">
  144. </div>
  145. </div>
  146. </div>
  147. </div>
  148. </div>
  149. </div>
  150. {% endblock %}
  151. {% block list_filters_actions %}
  152. {% endblock %}
  153. {% block list_filters %}
  154. {% endblock %}