index.html 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  6. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
  7. <script src='https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.js'></script>
  8. <link href='https://api.mapbox.com/mapbox-gl-js/v1.8.0/mapbox-gl.css' rel='stylesheet' />
  9. <script src='https://npmcdn.com/@turf/turf/turf.min.js'></script>
  10. <title>Accent dialect map</title>
  11. </head>
  12. <body class="bg-light">
  13. <script src="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.0.9/mapbox-gl-draw.js"></script>
  14. <link
  15. rel="stylesheet"
  16. href="https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-draw/v1.0.9/mapbox-gl-draw.css"
  17. type="text/css"
  18. />
  19. <div class="container">
  20. <div class="py-5 text-center">
  21. <h2>Accent and dialect form</h2>
  22. <p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Suscipit voluptatum corporis minima, eius officiis magnam quae vero praesentium odio facilis minus illo ut atque accusamus esse deserunt. Fuga, autem molestiae!</p>
  23. </div>
  24. <div>
  25. <h4>Personal Information</h4>
  26. <form>
  27. <div class="row">
  28. <div class="col-md-6 mb-3">
  29. <label for="age">Age</label>
  30. <input type="number" class="form-control" id="age" placeholder="" value="" min="10" max="110" required>
  31. <div class="invalid-feedback">
  32. Age is required
  33. </div>
  34. </div>
  35. <div class="col-md-6">
  36. <label for="gender">Gender</label>
  37. <select class="form-control">
  38. <option>Male</option>
  39. <option>Female</option>
  40. <option>idk lmao</option>
  41. </select>
  42. </div>
  43. </div>
  44. <div class="row">
  45. <div class="col-md-12 mb-3">
  46. <label for="postal-code">Postal code</label>
  47. <input type="text" class="form-control" id="postal-code"/>
  48. </div>
  49. </div>
  50. <div class="row">
  51. <div class="col-md-12">
  52. <label>Map time</label>
  53. <div id='map' style='width: 100%; height: 80vh;' class="form-control"></div>
  54. </div>
  55. </div>
  56. <hr class="mb-4">
  57. <button class="btn btn-primary btn-lg btn-block" type="submit">Submit</button>
  58. </form>
  59. </div>
  60. </div>
  61. <footer class="my-5 pt-5 text-muted text-center text-small">
  62. <p class="mb-1">&copy; Legal stuff if needed</p>
  63. <ul class="list-inline">
  64. <li class="list-inline-item"><a href="#">Privacy</a></li>
  65. <li class="list-inline-item"><a href="#">Terms</a></li>
  66. </ul>
  67. </footer>
  68. </div>
  69. <script>
  70. mapboxgl.accessToken = 'pk.eyJ1IjoidGluYW1hIiwiYSI6ImNpbWV2dDJudjAxM2Z0c2traGthOTJyZjYifQ.s_lP9rp2Iro7Urb4IZAzTQ';
  71. const bounds = [
  72. [-2.460270, 53.370427],
  73. [-2.062598, 53.552900]
  74. ]
  75. const map = new mapboxgl.Map({
  76. container: 'map',
  77. style: 'mapbox://styles/tinama/ck7avipta06nj1jmomolvvrbr',
  78. center: [-2.884808, 53.495743],
  79. zoom: 9.5,
  80. });
  81. const Draw = new MapboxDraw({
  82. displayControlsDefault: false,
  83. controls: {
  84. polygon: true,
  85. trash: true
  86. }
  87. });
  88. console.log("turf", turf);
  89. const AddPopup = (map) => (area) => {
  90. let polygon = turf.polygon(area);
  91. let center = turf.centroid(polygon);
  92. console.log(center, polygon)
  93. return new mapboxgl.Popup({closeOnClick: false})
  94. .setLngLat(center.geometry.coordinates)
  95. .setHTML(`
  96. <h3>form</h3>
  97. <label for="data">some data</label>
  98. <input type="text" class="form-control" id="data" placeholder="" required>
  99. <button type="button">save</button>
  100. `)
  101. .addTo(map)
  102. }
  103. map.addControl(Draw, 'top-right');
  104. map.on('load', function() {
  105. let drawnData = {};
  106. map.on('draw.create', createArea);
  107. map.on('draw.delete', deleteArea);
  108. map.on('draw.update', updateArea);
  109. function createArea(polygon) {
  110. let area = polygon.features[0].geometry;
  111. drawnData = {
  112. ...drawnData,
  113. [polygon.features[0].id]: area
  114. };
  115. console.log("create", area);
  116. const popup = AddPopup(map)(area.coordinates);
  117. }
  118. function deleteArea(polygon) {
  119. console.log('delete', polygon);
  120. }
  121. function updateArea(polygon) {
  122. console.log('update', polygon)
  123. }
  124. });
  125. </script>
  126. </body>
  127. </html>