1
0
Fork 0
internet-everythings-agricu.../resources/views/monitor-mode-position.blade...

177 lines
4.9 KiB
PHP

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>在地图上打标点</title>
<style>
/* html,body{
width: 100%;
height: 100%;
} */
canvas {
cursor: crosshair;
width:1350px;
height: 900px;
}
</style>
<script src="{{asset('/admin/js/uuidv4.min.js')}}"></script>
</head>
<body>
<canvas id="myCanvas"></canvas>
<div style="position: relative;top:-900px;left: 1360px;width: 100px;">
<form id='positionForm' action="{{url('monitor-mode-position/save')}}" method="post" enctype="multipart/form-data">
@csrf
<input type="hidden" name="id" value="{{$id}}">
<input type="hidden" name="x" id="x" value="{{$x}}">
<input type="hidden" name="y" id="y" value="{{$y}}">
<button type="submit" onclick="return submitXY(this.form)">保存</button>
<button onclick="script:window.close();">返回</button>
</form>
</div>
<script>
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");
const sx = '{{$x}}';
const sy = '{{$y}}';
const map = new Image();
map.src = "/admin/dashboard-map.png";
map.onload = function () {
resizeCanvas();
drawMarkers();
};
const markerImage = new Image();
markerImage.src = "/admin/map-marker.png";
const markerRadius = 15;
const markers = [];
if(sx >0 && sy >0) {
markers.push({id: uuidv4(),
x:sx,
y:sy,
selected: false});
}
function addMarker(x, y) {
const marker = {
id: uuidv4(),
x,
y,
selected: false
};
markers.length = 0;
markers.push(marker);
document.getElementById("x").value = x;
document.getElementById("y").value = y;
console.log("新增", marker);
drawMarkers();
}
function drawMarkers() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
// 获取父容器的宽度和高度
const canvasWrapper = document.getElementById("myCanvas");
const canvasWrapperWidth = canvasWrapper.offsetWidth;
const canvasWrapperHeight = canvasWrapper.offsetHeight;
// 设置Canvas的大小为父容器的大小
canvas.width = canvasWrapperWidth;
canvas.height = canvasWrapperHeight;
// 绘制地图图片并调整大小以铺满Canvas
const scale = Math.max(canvas.width / map.width, canvas.height / map.height);
const newWidth = map.width * scale;
const newHeight = map.height * scale;
const offsetX = (canvas.width - newWidth) / 2;
const offsetY = (canvas.height - newHeight) / 2;
ctx.drawImage(map, offsetX, offsetY, newWidth, newHeight);
markers.forEach(marker => {
// if (marker.selected) {
// ctx.beginPath();
// ctx.arc(marker.x, marker.y, 15, 0, 8 * Math.PI);
// ctx.strokeStyle = "red";
// ctx.stroke();
// }
ctx.drawImage(markerImage, marker.x - markerRadius, marker.y - markerRadius, markerRadius * 2, markerRadius * 2);
});
}
function resizeCanvas() {//初始化地图
drawMarkers();
}
window.addEventListener("resize", resizeCanvas);
let isDragging = false;
let dragIndex = -1;
canvas.addEventListener("mousedown", event => {
const x = event.offsetX;
const y = event.offsetY;
markers.forEach((marker, index) => {
if (x >= marker.x - markerRadius / 2 && x <= marker.x + markerRadius / 2 && y >= marker.y - markerRadius / 2 && y <= marker.y + markerRadius / 2) {
isDragging = true;
dragIndex = index;
markers[index].selected = true;
} else {
markers[index].selected = false;
}
});
if (!isDragging) {
addMarker(x, y);
}
drawMarkers();
});
canvas.addEventListener("mousemove", event => {
if (isDragging) {
const x = event.offsetX;
const y = event.offsetY;
markers[dragIndex].x = x;
markers[dragIndex].y = y;
drawMarkers();
}
});
canvas.addEventListener("mouseup", event => {
isDragging = false;
dragIndex = -1;
});
function submitXY(theform)
{
var ttx = document.getElementById("x").value;
var tty = document.getElementById("y").value;
if(ttx <=0 || tty <=0){
alert('请点击地图,标记位置');
return false;
}
var res = theform.submit();
if($res['code'] != undefined){
if($res['code'] > 0){
alert($res['msg']);
return false;
}
}
return false;
}
</script>
</body>
</html>