首页 资源列表 文章列表

天地图实现手动绘制多边形,获取顶点坐标,电子围栏设置区域

直接代码

<!DOCTYPE html>
<html lang="en">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<head>
    <meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="/static/js/jquery.min.js"></script>
    <!-- 天地底图 -->
    <script type="text/javascript" src="https://api.tianditu.gov.cn/api?v=4.0&tk=换成自己的token"></script>
    <style type="text/css">
        .btn-wrap{position: fixed;top:10px;right:20px;z-index: 999; display: flex;}
        #container{width:100%;height:1000px;}
        #right-btn {
            visibility: hidden;
            position: absolute;
            top: 0px;
            left: 0px;
            z-index: 999;
            background-color: #fff;
            cursor: pointer;
            border: 1px solid #dee1e6;
        }

        .right-item {
            margin: 4px;
            font-size: 12px;
        }


        .right-item:hover {
            color: #23aaf2;
        }

    </style>
</head>
<body>
<div id="right-btn">
    <p class="right-item" @click=""><i class="el-icon-edit"></i> 编辑</p>
    <p class="right-item" onclick="delPolygon()"><i class="el-icon-delete"></i> 删除</p>
    <p class="right-item" @click=""><i class="el-icon-circle-close"></i> 取消</p>
</div>

<div id='container'></div>
</body>
</html>
<script>

    //地图--------------------------------------------------开始
    //初始化地图
    function initMap() {
        createMap(); //创建地图
        addMapControl(); //向地图添加控件
        draw()
    }
    //创建地图函数:
    function createMap() {
        let map = new T.Map('container', {
            projection: 'EPSG:4326'
        });
        map.centerAndZoom(new T.LngLat(103.388611,35.563611), 4);
        map.enableScrollWheelZoom();
        map.setMapType(TMAP_HYBRID_MAP);//设置地图混合模式
        window.map = map; //将map变量存储在全局
    }
    //地图控件
    function addMapControl() {
        //创建比例尺控件对象
        let scale = new T.Control.Scale();
        //添加比例尺控件
        map.addControl(scale);
        //创建缩放平移控件对象
        control = new T.Control.Zoom();
        control.setPosition(T_ANCHOR_BOTTOM_RIGHT);
        //添加缩放平移控件
        map.addControl(control);
    }
    initMap(); //创建和初始化地图

    let ctrl = new T.Control.MapType([
        // 这里顺序不能变,图层要放到第一个
        {
            title: "地图", //地图控件上所要显示的图层名称
            icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/vector.png", //地图控件上所要显示的图层图标(默认图标大小80x80)
            layer: TMAP_NORMAL_MAP, //地图类型对象,即MapType。
        },
        {
            title: "卫星混合",
            icon: "https://api.tianditu.gov.cn/v4.0/image/map/maptype/satellitepoi.png",
            layer: TMAP_HYBRID_MAP,
        }
    ]);

    ctrl.setPosition(window.T_ANCHOR_BOTTOM_LEFT); //地图选择控件位置
    map.addControl(ctrl); //添加地图选择控件
    map.setMapType(TMAP_HYBRID_MAP)
    //地图-----------------------------------------------------------------结束  

    function draw() {
        polygonTool = new T.PolygonTool(map, {
            showLabel: false,  // 不显示面积信息
            color: "#ffcd42", weight: 3, opacity: 0.5, fillColor: "#ffdc00", fillOpacity: 0.5
        });
        polygonTool.open()
        polygonTool.addEventListener('draw',drawFinish)  // 监听双击绘制完成事件,调用drawFinish方法
    }
    function drawFinish(e) {
        console.log("顶点坐标列表 ----------> ", e.currentLnglats)
    }
    // 圈地结束
    function drawFinish(e) {
        console.log("顶点坐标列表 ----------> ", e.currentLnglats)
        e.currentPolygon.addEventListener('dblclick', dblclickPolygon)  // 绘制完成给覆盖物添加双击事件
    }
    function dblclickPolygon(e) {
        currentPolygon = e.target       // 把当前操作的覆盖物赋值给一个全局变量
        let menu = document.getElementById('right-btn');
        let evt = window.event || arguments[0];
        menu.style.left = evt.clientX - 220 + "px";
        menu.style.top = evt.clientY - 60 + "px";
        menu.style.visibility = "visible";
    }
     //删除圈地
    function delPolygon() {
        console.log('ok')
        map.removeOverLay(currentPolygon)  // 清除当前选中的覆盖物
        handlerMenu()   // 执行一个方法
    }
    function handlerMenu() {
        let menu = document.getElementById('right-btn');
        menu.style.visibility = "hidden";
    }

</script>