map.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. 'use strict';
  2. import mapbox, { Map, Popup } from '../node_modules/mapbox-gl/dist/mapbox-gl.js';
  3. import MapboxDraw from '@mapbox/mapbox-gl-draw';
  4. import FreeHand from 'mapbox-gl-draw-freehand-mode';
  5. import '@mapbox/mapbox-gl-draw/dist/mapbox-gl-draw.css';
  6. import turf from 'turf';
  7. mapbox.accessToken = 'pk.eyJ1IjoidGluYW1hIiwiYSI6ImNpbWV2dDJudjAxM2Z0c2traGthOTJyZjYifQ.s_lP9rp2Iro7Urb4IZAzTQ';
  8. const map = new Map({
  9. container: 'map',
  10. style: 'mapbox://styles/tinama/ck7avipta06nj1jmomolvvrbr',
  11. center: [-2.884808, 53.495743],
  12. zoom: 9.5,
  13. });
  14. const Draw = new MapboxDraw({
  15. displayControlsDefault: false,
  16. controls: {
  17. polygon: true,
  18. trash: true
  19. }
  20. });
  21. const AddPopup = (map) => (area) => {
  22. let polygon = turf.polygon(area);
  23. let center = turf.centroid(polygon);
  24. console.log(center, polygon)
  25. return new Popup({closeOnClick: false})
  26. .setLngLat(center.geometry.coordinates)
  27. .setHTML(`
  28. <h3>form</h3>
  29. <label for="data">some data</label>
  30. <input type="text" class="form-control" id="data" placeholder="" required>
  31. <button type="button">save</button>
  32. `)
  33. .addTo(map)
  34. }
  35. map.addControl(Draw, 'top-right');
  36. map.on('load', function() {
  37. let drawnData = {};
  38. map.on('draw.create', createArea);
  39. map.on('draw.delete', deleteArea);
  40. map.on('draw.update', updateArea);
  41. function createArea(polygon) {
  42. let area = polygon.features[0].geometry;
  43. drawnData = {
  44. ...drawnData,
  45. [polygon.features[0].id]: area
  46. };
  47. console.log("create", area);
  48. const popup = AddPopup(map)(area.coordinates);
  49. }
  50. function deleteArea(polygon) {
  51. console.log('delete', polygon);
  52. }
  53. function updateArea(polygon) {
  54. console.log('update', polygon)
  55. }
  56. });