自学内容网 自学内容网

javascript 与MQTT连接(2)

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no, width=device-width">
    <link rel="stylesheet" href="https://a.amap.com/jsapi_demos/static/demo-center/css/demo-center.css"/>
    <title>卫星图</title>
    <style>
        html,
        body,
        #container {
            margin: 0;
            padding: 0;
            width: 100%;
            height: 100%;
       /* 首先,为 <h4> 标签设置字体样式(如果尚未设置) */
       h4 {
             font-family: Arial, sans-serif; /* 示例字体,可以根据需要更改 */
             font-size: 14px; /* 示例字体大小,可以根据需要更改 */
             font-weight: normal; /* 可以设置为 bold 如果需要加粗 */
           /* 其他可能的样式,如 color, line-height 等 */
            }
       
       #delmarker,#sentmarker {
           border: none; /* 去除边框 */
           background-color: transparent; /* 如果需要,可以设置为透明背景 */
           padding: 5px 10px; /* 根据需要添加内边距 */
           cursor: pointer; /* 鼠标悬停时显示为手型,表明可点击 */
           font-size: 13px; /* 根据需要调整字体大小 */
         /* 你可以根据需要添加更多的样式属性,比如颜色、圆角等 */
           }
        }
    </style>
</head>
<body>
<div id="container"></div>
<div class="input-card">
    <h4>设置航点:<button id="delmarker">删除标点</button> <button οnclick="processLngLatArray()">发送数据</button></h4>
    <div class="input-item">
      <input type="text" readonly="true" id="lnglat">
    </div>
</div>
<script src="https://webapi.amap.com/maps?v=2.0&key=432746193f92f7fbb"></script>
 
<script>
    // 声明并初始化标记点数组
    var markersArray = [];
    var lnglatArray = [];
    var polylineArray = []; // 新增数组,用于存储线条
 

    var map = new AMap.Map('container', {
        center: [100.038, 28.23],
        layers: [new AMap.TileLayer.Satellite()],
        zoom: 18
    });

    // 为地图注册click事件,获取鼠标点击位置的经纬度坐标,并在该位置添加标记点A
    map.on('click', function(e) {
        // 显示经纬度坐标
        document.getElementById("lnglat").value = e.lnglat.getLng() + ',' + e.lnglat.getLat();

        // 创建标记点A
        var marker = new AMap.Marker({
            position: e.lnglat, // 使用点击事件的经纬度作为标记位置
            map: map,
            icon: new AMap.Icon({ // 可选:设置标记图标
                size: new AMap.Size(15, 20), // 图标大小
                image: 'CR2.png', // 自定义图标URL(请确保路径正确)
                imageOffset: new AMap.Pixel(-2, -2) // 图标相对图片左上角的偏移量(可选)
            })
        });

        // 将标记点添加到数组中
        markersArray.push(marker);
        lnglatArray.push({ lng: e.lnglat.getLng(), lat: e.lnglat.getLat() });

        // 如果已存在至少一个标记点,则添加线条
        if (markersArray.length > 1) {
            var polyline = new AMap.Polyline({
                path: [markersArray[markersArray.length - 2].getPosition(), e.lnglat], // 使用最后两个标记点的位置作为线条的路径
                strokeColor: "#00FF00", // 红色线条
                strokeOpacity: 1,
                strokeWeight: 2,
                strokeStyle: "solid",
                strokeDasharray: [10, 5],
                map: map
            });

            // 将线条添加到数组中
            polylineArray.push(polyline);
        }

      

        // 记录点击事件
        console.log('标记点已创建在点击位置');
        // 打印整个lnglatArray数组(包括新添加的经纬度对象)
       // console.log('lnglatArray after adding new point:', lnglatArray);
      
    });

    // 获取按钮delmarker元素
    var deleteMarkersBtn = document.getElementById('delmarker');

    // 为按钮添加点击事件监听器
    deleteMarkersBtn.addEventListener('click', function() {
        // 检查数组中是否有标记点
        if (markersArray.length > 0) {
            // 获取并移除数组中的最后一个标记点
            var lastMarker = markersArray.pop();
            var lastLngLat = lnglatArray.pop();

            // 移除对应的线条(如果有)
            if (polylineArray.length > 0) {
                var lastPolyline = polylineArray.pop();
                lastPolyline.setMap(null); // 从地图上移除线条
            }

            // 从地图上移除标记点
            lastMarker.setMap(null);

            // 记录删除事件(可选)
            console.log('上一个标记点和线条已删除');
        } else {
            // 如果没有标记点可删除,则输出提示信息
            console.log('没有可删除的标记点');
        }
    });
</script>
<script>
let specialLngLatArray = []; // 用于存储按规则分割后的经纬度信息
 
// 假设这是您在某个事件处理函数中调用的函数,用于处理lnglatArray并填充specialLngLatArray
function processLngLatArray() {
    // 如果lnglatArray长度小于3,直接将其作为specialLngLatArray的一个元素
    if (lnglatArray.length < 3) {
        specialLngLatArray.push([...lnglatArray]); // 使用解构赋值来复制数组,避免直接引用
    } else {
        // 如果lnglatArray长度大于或等于3,按长度为3分割数组
        for (let i = 0; i < lnglatArray.length; i += 3) {
            // 使用slice方法提取长度为3的子数组(或剩余的子数组)
            specialLngLatArray.push(lnglatArray.slice(i, i + 3));
        }
    }
 
    // 打印结果以验证
    console.log('Special LNG/LAT Array:', specialLngLatArray);
   // 调用发送函数
    sendSpecialLngLatArrayElements();
}
</script>

<script>
// 发送specialLngLatArray中的每个元素
async function sendSpecialLngLatArrayElements() {
    for (let i = 0; i < specialLngLatArray.length; i++) {
        let element = specialLngLatArray[i];
        let msg = JSON.stringify(element); // 将单个元素转换为JSON字符串
        try {
            await sendMessage(msg); // 发送单个元素的JSON字符串
        } catch (error) {
            console.error('发送消息时出错:', error);
        }
    }
}
</script>

<script>
// 发送消息的函数
async function sendMessage(msg) {
    var uid = '20ce9952acebfd'; // 请替换为您的实际用户ID
    var topic = 'testabc'; // 请替换为实际的Topic,注意去除前后的空格
    var type = '1'; // 请替换为实际的消息类型
 
    var params = new URLSearchParams({
        uid: uid,
        topic: topic,
        type: type,
        msg: msg
    });
 
    var apiUrl = 'http://apis.bemfa.com/va/sendMessage' + '?' + params.toString();
 
    try {
        let response = await fetch(apiUrl, {
            method: 'GET'
        });
 
        if (response.ok) {
            let data = await response.text();
            console.log('消息发送成功!响应:', data);
        } else {
            console.log('消息发送失败,状态码:', response.status);
        }
    } catch (error) {
        console.log('发生错误:', error.message);
    }
}
 
</script>

</body>
</html>


原文地址:https://blog.csdn.net/weixin_46290197/article/details/143807115

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!