let currentGeoJson = ""; let actionLocationAc = "add"; let lat = -6.228000; let long = 106.559242; let zoom = 10; let currentIdAct = 0; let map = L.map('map_activity').setView([lat, long], zoom); let drawnItems = new L.FeatureGroup().addTo(map); let inter = 5; let circLat = "", circLong = ""; L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors' }).addTo(map); var drawControl = new L.Control.Draw({ draw: { circlemarker: false, circle: false, polyline: false }, }); var drawnControlEdit = new L.Control.Draw({ draw: false, edit: { featureGroup: drawnItems, delete: true } }); map.addControl(drawControl); // add searching location (nominatim) on map L.Control.geocoder().addTo(map); function addDrawnLayer(layer) { drawnItems.addLayer(layer); } function updateCurrentGeoJson() { let shapes = []; drawnItems.eachLayer(function (layer) { let geojson = layer.toGeoJSON(); if (layer instanceof L.Circle) { geojson.properties.radius = layer.getRadius(); } shapes.push(geojson); }); currentGeoJson = { type: 'FeatureCollection', features: shapes }; } function openActivityMap(id) { currentIdAct = id; map.invalidateSize(); $.ajax({ url: `${base_url}task/edit/${id}`, type: "get", success: function (data) { let dataRes = data.data drawnItems.clearLayers(); if (dataRes.geom) { let datageojson = JSON.parse(dataRes.geom); currentGeoJson = datageojson if (datageojson.type === 'FeatureCollection') { datageojson.features.forEach(feature => { let lGeoJson = L.geoJSON(feature); let layers = lGeoJson.getLayers(); layers.forEach(layer => { let radius = layer.feature.properties.radius; if (radius) { let latlon = layer.getLatLng(); let circle = L.circle([latlon.lat, latlon.lng], { radius: radius }); addDrawnLayer(circle); } else { addDrawnLayer(layer) } }); }); } else { if (datageojson.properties.radius) { let radius = datageojson.properties.radius let lGeoJson = L.geoJson(datageojson); let layers = lGeoJson.getLayers(); let latlon = layers[0].getLatLng(); let newCircle = L.circle([latlon.lat, latlon.lng], { radius: radius }); addDrawnLayer(newCircle) } else { let lGeoJson = L.geoJson(datageojson); let layers = lGeoJson.getLayers(); addDrawnLayer(layers[0]) } } actionLocationAc = "edit"; map.addControl(drawnControlEdit); } else { currentGeoJson = ""; actionLocationAc = "add"; drawnControlEdit.remove(); map.addControl(drawControl); } $("#modal_activity_location").modal("show"); }, error: function (data) { gantt.alert("Get Activity Location Failed, try again later!"); } }); } $('#modal_activity_location').on('hide.bs.modal', function (event) { currentGeoJson = "" currentIdAct = 0; actionLocationAc = "add"; drawnControlEdit.remove(); map.addControl(drawControl); map.setView([lat, long], zoom); }); // map initialization $(document).ready(function () { let intervalMap = setInterval(function () { if (inter = 0) { clearInterval(intervalMap) } map.invalidateSize(); inter--; }, 1000); map.on(L.Draw.Event.CREATED, function (e) { var type = e.layerType, layer = e.layer; if (type === 'marker') { let latlong = layer.getLatLng(); circLat = latlong.lat circLong = latlong.lng $("#modal_radius").modal("show"); // Do marker specific actions // let attri = layer.getAttribution(); return false; } let geJson = layer.toGeoJSON(); currentGeoJson = geJson; // let lgeojson = L.geoJson(geJson) // layer.bindTooltip("cek"); // Do whatever else you need to. (save to db; add to map etc) addDrawnLayer(layer); updateCurrentGeoJson(); map.addControl(drawnControlEdit); // map.addLayer(layer); }); map.on(L.Draw.Event.DELETED, function (e) { var type = e.layerType; let layers = e.layers.getLayers(); layers.forEach(layer => { drawnItems.removeLayer(layer); }); updateCurrentGeoJson() // Do whatever else you need to. (save to db; add to map etc) // map.addLayer(layer); }); map.on(L.Draw.Event.EDITED, function (e) { // var type = e.layerType, // layer = e.layer; let layers = e.layers.getLayers(); layers.forEach(layer => { let geoJson = layer.toGeoJSON(); if (layer instanceof L.Circle) { geoJson.properties.radius = layer.getRadius(); } updateCurrentGeoJson(); }); // Do whatever else you need to. (save to db; add to map etc) // drawnControlEdit.remove(); // map.addControl(drawControl); // map.addLayer(layer); }); $("#modal_activity_location").on("click", "#btn_save_location", function () { if (currentGeoJson == "") { gantt.confirm({ text: "Lokasi belum ditentukan!, lanjutkan?", ok: "Submit", cancel: "Cancel", callback: function (result) { if (!result) { return false } else { submitShapes(); } } }); } else { submitShapes(); } }); function submitShapes() { let payload if (currentGeoJson && currentGeoJson != "") { payload = { geom: JSON.stringify(currentGeoJson), } } else { payload = { geom: null, } } $.ajax({ data: JSON.stringify(payload), url: `${base_url}task/update-regular/${currentIdAct}`, type: "PUT", processData: false, contentType: false, success: function (data) { $("#modal_activity_location").modal("hide"); currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location successfully updated!"); }, error: function (data) { $("#modal_activity_location").modal("hide"); currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location failed updated!, try again later!"); } }); } function submitLocation() { let payload if (currentGeoJson && currentGeoJson != "") { payload = { geom: JSON.stringify(currentGeoJson), } } else { payload = { geom: null, } } $.ajax({ data: JSON.stringify(payload), url: `${base_url}task/update-regular/${currentIdAct}`, type: "PUT", processData: false, contentType: false, success: function (data) { $("#modal_activity_location").modal("hide"); currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location successfully updated!"); }, error: function (data) { $("#modal_activity_location").modal("hide"); currentGeoJson = "" currentIdAct = 0; gantt.alert("Activity Location failed updated!, try again later!"); } }); } $("#modal_radius").on("click", "#btn_save_radius", function () { let radius = $("#buffer_radius").val(); if (radius <= 0) { gantt.alert("radius buffer tidak boleh kurang dari atau sama dengan 0!!"); } else { submitCircle(radius); } }); }); function submitCircle(radius) { let circle = L.circle([circLat, circLong], { radius: radius }); let geojsoncircle = circle.toGeoJSON(); geojsoncircle.properties.radius = radius currentGeoJson = geojsoncircle addDrawnLayer(circle); updateCurrentGeoJson(); map.addControl(drawnControlEdit); $("#modal_radius").modal('hide'); } $('#modal_radius').on('hide.bs.modal', function (event) { circLat = 0 circLong = 0 $("#buffer_radius").val(""); });