You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
249 lines
7.8 KiB
249 lines
7.8 KiB
2 years ago
|
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 inter = 5;
|
||
|
|
||
|
let circLat = "",
|
||
|
circLong = "";
|
||
|
|
||
|
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
|
||
|
attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
|
||
|
}).addTo(map);
|
||
|
|
||
|
let drawnItem = L.featureGroup().addTo(map);
|
||
|
|
||
|
var drawControl = new L.Control.Draw({
|
||
|
draw: {
|
||
|
circlemarker: false,
|
||
|
circle:false,
|
||
|
polyline: false
|
||
|
},
|
||
|
edit:{
|
||
|
featureGroup:drawnItem,
|
||
|
edit:false,
|
||
|
delete:false
|
||
|
}
|
||
|
});
|
||
|
|
||
|
var drawnControlEdit = new L.Control.Draw({
|
||
|
draw: false,
|
||
|
edit:{
|
||
|
featureGroup:drawnItem,
|
||
|
delete:true
|
||
|
}
|
||
|
});
|
||
|
|
||
|
map.addControl(drawControl);
|
||
|
|
||
|
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);
|
||
|
drawnItem.clearLayers();
|
||
|
if(dataRes.geom){
|
||
|
let datageojson = JSON.parse(dataRes.geom);
|
||
|
currentGeoJson = datageojson
|
||
|
// console.log("cek data geojson", datageojson);
|
||
|
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});
|
||
|
drawnItem.addLayer(newCircle);
|
||
|
// console.log("cek layers", layers[0]);
|
||
|
}else{
|
||
|
let lGeoJson = L.geoJson(datageojson);
|
||
|
let layers = lGeoJson.getLayers();
|
||
|
drawnItem.addLayer(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)
|
||
|
drawnItem.addLayer(layer);
|
||
|
drawControl.remove();
|
||
|
map.addControl(drawnControlEdit);
|
||
|
// map.addLayer(layer);
|
||
|
});
|
||
|
|
||
|
map.on(L.Draw.Event.DELETED, function (e) {
|
||
|
var type = e.layerType,
|
||
|
layer = e.layer;
|
||
|
|
||
|
// console.log("cek layer", layer.toGeoJSON());
|
||
|
// Do whatever else you need to. (save to db; add to map etc)
|
||
|
currentGeoJson = "";
|
||
|
drawnItem.removeLayer(layer);
|
||
|
drawnControlEdit.remove();
|
||
|
map.addControl(drawControl);
|
||
|
// map.addLayer(layer);
|
||
|
});
|
||
|
|
||
|
map.on(L.Draw.Event.EDITED, function (e) {
|
||
|
// var type = e.layerType,
|
||
|
// layer = e.layer;
|
||
|
let layers = e.layers.getLayers();
|
||
|
let layer = layers[0]
|
||
|
let geoJson = layers[0].toGeoJSON();
|
||
|
if(layer instanceof L.Circle){
|
||
|
geoJson.properties.radius = layer.getRadius();
|
||
|
currentGeoJson = geoJson
|
||
|
}else{
|
||
|
currentGeoJson = geoJson
|
||
|
}
|
||
|
// 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)
|
||
|
// drawnItem.removeLayer(layer);
|
||
|
// 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{
|
||
|
submitLocation();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
}else{
|
||
|
submitLocation()
|
||
|
}
|
||
|
});
|
||
|
|
||
|
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);
|
||
|
drawnItem.addLayer(circle);
|
||
|
drawControl.remove();
|
||
|
map.addControl(drawnControlEdit);
|
||
|
|
||
|
$("#modal_radius").modal('hide');
|
||
|
}
|
||
|
|
||
|
$('#modal_radius').on('hide.bs.modal', function (event) {
|
||
|
circLat = 0
|
||
|
circLong = 0
|
||
|
$("#buffer_radius").val("");
|
||
|
});
|