arcgis for js 图形Graphic右键菜单编辑功能

本文介绍了一个基于ArcGIS的自定义地图编辑工具栏实现方案,通过鼠标右键菜单提供图形删除、移动、拉伸、旋转及编辑功能。使用了esri库进行地图操作,并通过dijit实现了菜单项的定制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSS:
.menucontent{
    padding-top:10px;
    background-color:#fff;
    width:150px;
    margin-bottom:20px;
    border-radius:3px;
    border:1px solid #8c7d7d;
    box-shadow:#666 2px 2px 4px;
}
.menu-item{
    line-height:25px;
    font-size:15px;
    padding-left:15px;
    color:#000;
}
.menu-item:hover{
    background-color:#e2e2e2b3;
}

 

JS:

/**图层编辑鼠标右键点击事件*/

function mapOfOnMouse(){
    require([
        "esri/geometry/Point", 
        "esri/toolbars/edit",
        "esri/symbols/SimpleMarkerSymbol", 
        "esri/graphic", 
        "esri/InfoTemplate",
        "dijit/Menu",
        "dijit/MenuItem",
        "dijit/MenuSeparator",],
         function(Point,Edit, SimpleMarkerSymbol, Graphic, InfoTemplate, Menu, MenuItem, MenuSeparator){
        var layerid="buffoksLayer";
        var bufflayer=map.getLayer(layerid);
        if(!bufflayer){//创建图层
            bufflayer = new esri.layers.GraphicsLayer();  
            bufflayer.id=layerid;
             map.addLayer(bufflayer);//添加缓冲区几何图层到缓冲区图层上
        }
        var ctxMenuForGraphics;
        $("#map").oncontextmenu=function(e){
            e.preventDefault();
        }
        dojo.connect(bufflayer, "onMouseDown", function(evt) {
            if(evt.which==3 || evt.button==2){
                params.menuGraphic=evt.graphic;
                //是鼠标右键
                ctxMenuForGraphics=new Menu({});
                createGraphicsMenu(evt);
                ctxMenuForGraphics.bindDomNode(evt.graphic.getDojoShape().getNode());
            }
        });
        function createGraphicsMenu(e) {
            ctxMenuForGraphics.addChild(new MenuItem({
                label: '<div class="menucontent"><div class="menu-item" name="删除">删除</div></div>'
                      +'<div class="menucontent"><div class="menu-item" name="移动">移动</div></div>'
                      +'<div class="menucontent"><div class="menu-item" name="拉伸">拉伸</div></div>'
                      +'<div class="menucontent"><div class="menu-item" name="旋转">旋转</div></div>'
                      +'<div class="menucontent"><div class="menu-item" name="编辑">编辑</div></div>',
                onClick: function (e) {
                    var name=$(e.target).attr("name");
                    var gtype=params.menuGraphic.geometry.type;
                    if(gtype=="point" && name != "删除" && name != "移动"){
                        return false;                    //图片图形和文本图形皆不能做其它操作,容易出错
                    }
                    require(["esri/toolbars/edit"], function ( Edit) {
                        var edit = new Edit(map);
                        switch(name){
                            case "删除":                    //删除图形
                                 var bufflayer=map.getLayer("buffoksLayer");
                                 bufflayer.remove(params.menuGraphic);
                                 break;
                            case "移动":                    //激活Edit工具(移动)
                                edit.activate(Edit.MOVE,params.menuGraphic);
                                alert("鼠标拖拽图形进行移动,单击地图结束移动!");
                                break;
                            case "拉伸":                    //激活Edit工具(拉伸客户端图形)
                                //构建Edit参数 注:拉伸的时候,可以指定是否保持长宽比例
                                var options = {
                                    uniformScaling:true
                                };
                                edit.activate(Edit.SCALE,params.menuGraphic,options);
                                break;
                            case "旋转":                    //激活Edit工具(旋转客户端图形)
                                edit.activate(Edit.ROTATE,params.menuGraphic);
                                break;
                            case "编辑":                    //构建Edit参数
                                //注:编辑折点的时候,要指定是否能添加或者删除结点。
                                var options = {
                                    allowAddVertices:true,//能添加结点
                                    allowDeleteVertices: true//能删除结点
                                };
                                edit.activate(Edit.EDIT_VERTICES, params.menuGraphic, options);
                                break;
                        }
                        var yiDong=map.on("click", function () {
                            edit.deactivate();
                            yiDong.remove();
                            alert("已结束编辑!");
                        })
                    });
                }
            }));
            ctxMenuForGraphics.startup();
        }
        
     });
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

祥哥哥咩~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值