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 }, edit:{ featureGroup:drawnItems, edit:false, delete: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(); 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 // console.log("cek data", data); drawnItems.clearLayers(); if(dataRes.geom){ let datageojson = JSON.parse(dataRes.geom); currentGeoJson = datageojson // console.log("cek data geojson", datageojson); if (datageojson.type === 'FeatureCollection') { datageojson.features.forEach(feature => { let layer = L.geoJSON(feature); 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) // console.log("cek layers", layers[0]); }else{ let lGeoJson = L.geoJson(datageojson); let layers = lGeoJson.getLayers(); addDrawnLayer(layers[0]) } } actionLocationAc = "edit"; drawControl.remove(); 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(); // console.log("cek latlong", latlong); circLat = latlong.lat circLong = latlong.lng $("#modal_radius").modal("show"); // Do marker specific actions // let attri = layer.getAttribution(); // console.log("cek attribute", attri); return false; } let geJson = layer.toGeoJSON(); currentGeoJson = geJson; // let lgeojson = L.geoJson(geJson) // console.log("cek layer", layer.toGeoJSON()); // 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() // console.log("cek layer", layer.toGeoJSON()); // 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(); }); // console.log("cek layer", layers[0].toGeoJSON()); // console.log("cek layer", layer.toGeoJSON()); // 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 // console.log("geojsoncircle", geojsoncircle); addDrawnLayer(circle); map.addControl(drawnControlEdit); $("#modal_radius").modal('hide'); } $('#modal_radius').on('hide.bs.modal', function (event) { circLat = 0 circLong = 0 $("#buffer_radius").val(""); });