天地图监听多边形是否改变

天地图4.0截止2025年3月24日,并没有提供多边形改变后的回调函数,其实多边形的应用在地图GIS系统中有很多用处,比方说点子围栏编辑告警;离不开多边形的绘制和编辑能力;

效果图
核心方法
typescript 复制代码
/*
 多边形默认经纬度
 应该是天地图BUG,直接用等于用了相同的引用改变会同步改变,后面无法计算是否改变;
*/
var prePolygonLngLats = JSON.parse(JSON.stringify(polygon.getLngLats()[0]));
// change定时器,防止重复触发
var polygonEditChangeTime = null;
// 绑定地图事件;曲线救国;
map.addEventListener('touchend', function(e) {
    handlePolygonChange();
});
// 绑定触发事件
function handlePolygonChange() {
   // 不在编辑状态直接退出
   if (!polygon.isEditable()) {
        return;
    }
    if (polygonEditChangeTime) {
        clearTimeout(polygonEditChangeTime)
        polygonEditChangeTime = null;
    }
    polygonEditChangeTime = setTimeout(() => {
        var curBou = polygon.getLngLats()[0]
        var isChange = handlePolygonCompare(prePolygonLngLats, curBou);
        if (isChange) {
            console.log('多边形改变了', isChange);
        };
        prePolygonLngLats = JSON.parse(JSON.stringify(polygon.getLngLats()[0]));
    }, 200);
}
// 比较经纬度是否一致
function handlePolygonCompare(oldArray, newArray) {
    // 如果长度不同,直接返回true(表示改变了)
    if (oldArray.length !== newArray.length) {
        return true;
    }
    // 如果长度相同,逐项对比
    for (let i = 0; i < oldArray.length; i++) {
        if (oldArray[i].lng !== newArray[i].lng || oldArray[i].lat !== newArray[i].lat) {
            return true; // 只要有一项不同,返回true
        }
    }
    // 如果所有项都相同,返回false
    return false;
}
调用
typescript 复制代码
map.addEventListener('touchend', function(e) {
    handlePolygonChange();
});
相关推荐
子兮曰8 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭8 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路10 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒11 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol12 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉12 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau12 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生12 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼13 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君8799713 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter