首页 > 其他分享 >arcgis 添加要素并获取objectId

arcgis 添加要素并获取objectId

时间:2024-08-21 17:04:16浏览次数:4  
标签:要素 objectId featureLayer arcgis 添加 result query var new

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>WebGIS</title>
    <link rel="stylesheet" type="text/css" href="http://10.20.3.127/arcgis_js_api/library/3.32/dijit/themes/tundra/tundra.css" />
    <link rel="stylesheet" href="  http://10.20.3.127/arcgis_js_api/library/3.32/esri/css/esri.css" />
    <script type="text/Javascript" src="http://10.20.3.127/arcgis_js_api/library/3.32/init.js"></script>


    <style type="text/css">
        .MapClass {
            width: 100%;
            height: 500px;
            border: 1px solid #000;
        }
    </style>
    <script type="text/javascript">

        require(["esri/map",
            "dojo/on",
            "dojo/query",
            "esri/layers/ArcGISDynamicMapServiceLayer",
            "esri/toolbars/draw",
            "esri/layers/FeatureLayer",
            "esri/graphic", "esri/dijit/editing/Add",
            "esri/dijit/editing/Delete", "esri/dijit/editing/Update", "esri/tasks/query", "dojo/json",
            "dojo/domReady!"],
            function (Map, on, query, ArcGISDynamicMapServiceLayer, Draw, FeatureLayer, Graphic, Add, Delete, Update, Query, jsonUtil) {


                var map = new esri.Map("MyMapDiv");
                var layer = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/HBKYQ/Test001/MapServer");
                map.addLayer(layer);
                //用于操作的要素图层,注意我们是操作的宿舍楼图层
                var featureLayer = new FeatureLayer("http://localhost:6080/arcgis/rest/services/HBKYQ/Test001/FeatureServer/1",
                    {
                        mode: FeatureLayer.MODE_SNAPSHOT,
                        outFields: ["*"]
                    });
                //在添加要素时,利用Draw工具获得geometry对象
                var d = new Draw(map, { showTooltips: true });
                //要操作的graphic
                var g;
                var btns = query("button");
                on(btns, "click", function (event) {
/*                query("button").on("click", function (event) {*/
                    var value = this.innerHTML;
                    switch (value) {
                        case "添加要素":
                            d.activate(Draw.POLYGON);
                            break;
                        case "删除要素":
                            //创建Graphic对象,删除OBJECTID为34的元素,
                            //因为OBJECTID是主键,所以只需要指定主键即可
                            g = new Graphic("", "", {
                                "OBJECTID": 34
                            });
                            //创建删除对象
                            var de = new Delete({
                                "featureLayer": featureLayer,
                                "deletedGraphics": [g]
                            });
                            //执行删除结果
                            de.performRedo();
                            //刷新图层
                            layer.refresh();
                            break;
                        case "修改要素":
                            //用于修改要素的函数,查询更新为36的要素
                            updateFeature(1);
                            break;
                        case "查询要素":
                            //用于查询要素的函数,查询主键为36的要素
                            searchFeather(1);
                            break;
                    }
                });
                //当画图完毕时,添加要素
                on(d, "draw-complete", function (result) {

                    ////要素只赋予了geometry,属性信息为空  添加方法一
                    //var attr = { "Id": 1, "name": "Name", "alias": "Mesa Mint" };
                    ///*var graphic = new Graphic(result.geometry, null, attr);*/
     //               var graphic = new Graphic(result.geometry, null, attr);
                    //var add = new Add({
                    //    "featureLayer": featureLayer,//给哪一个要素图层添加要素
                    //    "addedGraphics": [graphic]//用于添加的要素
                    //})
                    ////执行添加函数
                    //add.performRedo();
                    ////刷新视图
                    //layer.refresh();
                    ////关闭绘图对象
                    //d.deactivate();

            //添加方法二
                    var attr = { "Id": 2, "name": "Name", "alias": "Mesa Mint" };
                    var graphic = new Graphic(result.geometry, null, attr);        
                    //applyEdits(adds?, updates?, deletes?, callback?, errback?)
                    featureLayer.applyEdits([graphic], null, null, callback, errback)

                    layer.refresh();
                    //关闭绘图对象
                    d.deactivate();

                });

                function callback(info) {
                    featureLayer.refresh();
                    layer.refresh();
                    alert("成功!");
                    alert(info[0].objectId);
                    console.log(info);
                }

                function errback(error) {
                    console.log('failed');
                }
                //根据id修改要素
                function updateFeature(id) {
                    //注意:(第二个参数)这里传入一个回调函数,用于处理查询出来的数据
                    searchFeather(id, function (result) {
                        //获得旧的要素
                        var oldgraphic = result[0];
                        //新的要素
                        var newgraphic = new Graphic(oldgraphic.toJson());
                        //将alias属性修改为:修改后的A区宿舍
                        newgraphic.attributes.alias = "修改后的A区宿舍";
                        //创建更新对象
                        var update = new Update({
                            "featureLayer": featureLayer,
                            "postUpdatedGraphics": [newgraphic],//修改之后的要素
                            "preUpdatedGraphics": [oldgraphic]//修改之前的要素
                        })
                        //执行刷新操作
                        update.performRedo();
                        //刷新视图
                        layer.refresh();
                        alert("修改成功");

                    })

                }
                //根据id查询要素
                function searchFeather(id, callback) {
                    //得到要素图层的主键属性
                    var idProperty = featureLayer.objectIdField;
                    //定义查询参数
                    var query = new Query();
                    //是否返回几何形状
                    query.returnGeometry = false;
                    //图层的主键名称(根据自己要求修改)
                    query.objectIds = [id];
                    //查询条件1=1意思是:只根据主键查询,忽略where子句
                    query.where = "1=1";
                    //进行查询
                    featureLayer.selectFeatures(query, FeatureLayer.SELECTION_NEW, function (result) {
                        //如果callback不存在,说明仅仅是查询操作
                        if (!callback) {
                            //因为我们根据主键查询,一定只有一个元素
                            var graphic = result[0];
                            //获得属性
                            var attributes = graphic.attributes;
                            //得到该属性信息转换成字符串
                            var result = jsonUtil.stringify(attributes)
                            //将结果弹出一下
                            alert(result);
                        } else//如果callback存在,说明是更新操作
                        {
                            callback(result);
                        }

                    });
                }
            });


    </script>
</head>
<body>
<div id="MyMapDiv" class="MapClass"></div>
<button class="btn">添加要素</button>
<button class="btn">删除要素</button>
<button class="btn">修改要素</button>
<button class="btn">查询要素</button>
</body>
</html>

 

标签:要素,objectId,featureLayer,arcgis,添加,result,query,var,new
From: https://www.cnblogs.com/leebokeyuan/p/18372049

相关文章

  • Postman中Body添加注释后请求报错问题解决【保姆级教程!!!】
    本文介绍关于Postman中Body添加注释后请求报错问题解决方法如:请求返回下述报错操作失败!系统异常,JsonParseException:Unexpectedcharacter(‘/’(code47)):maybea(non-standard)comment?(notrecognizedasonesinceFeature‘ALLOW_COMMENTS’notenabled......
  • Maven如何手动添加jar包
    关于maven依赖死活都下载不了时,可以使用手动添加jar包解决方案:举例:先搜索 mysql-connector-java对应需要的jar包并下载好,然后本地将jar包下载放在E:\jar文件下在pom.xml中添加文件<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifact......
  • arcgis js 获取距离和面积
    Definesthetypeofcalculationforthegeometry.Thetypecanbeoneofthefollowing:planar: Planarmeasurementsuse2DCartesianmathematicstocalculatelength.Usethistypeifthelengthneedstobecalculatedintheinputspatialreferenceotherw......
  • kubespray 配置添加额外参数
    目录在k8s-cluster.yml文件中,你可以配置许多与Kubernetes集群相关的重要参数。这些参数涵盖了集群设置、组件配置、安全性和网络等多个方面。以下是一些常见的配置参数类别:APIServer参数:kube_apiserver_insecure_port:配置APIServer的不安全端口。kube_apiserve......
  • 10046-1-批量为视频添加文字水印每隔几秒钟显示一次水印-视频首尾不显示水印-UI
    程序功使用环境▶适用的系统环境说明:win7以上64位win系统注意:win32位系统/mac系统需要额外定制▶使用期限:无需注册、不绑电脑、无时间限制▶如何安装:不需要安装程序功能说明▶子文件夹穿透:支持▶支持的文件格式:'.mp4','.avi','.mkv','.webm','.ts','.flv','.mov','.wmv'......
  • 【收藏】Arcgis api4.x renderer根据字段值渲染,唯一值渲染和分级渲染
    1.根据字段值渲染(唯一值渲染)  定义唯一值渲染器中每个唯一值的样式,以根据数据字段的不同值为要素指定不同的符号,从而实现基于分类数据的图形化表示。 constrenderer={type:"unique-value",field:"type",defaultSymbol:{type:"simple-marke......
  • 通过代码添加的控件的事件如何编写?
    0背景这两天在重新复习事件,比如Winform控件的事件,利用vs很方便地实现。比如:想要在窗体加载时,修改窗口的标题;我们只需要双击Form1的标题栏即可;vs便会给我们生成如下代码,且光标自动定位到方法体中:privatevoidForm1_Load(objectsender,EventArgse){}然后我......
  • sonarqube添加一条自定义规则,扫描文件中出现的username和password,方法二,使用implement
    特别指出: 所以,sonarqube默认过滤掉了resources下的文件;以下代码可以扫出yml/xml/properties等文件中的敏感字符,当然是放在src/main下的,不是resources;下载源码与使用详情参考:Sonarqube自定义规则,部署SonarSource/sonar-java源码中示例规则:docs/java-custom-rules-exam......
  • sonarqube添加一条自定义规则,扫描文件中出现的username和password,方法一
    下载源码与使用详情参考:Sonarqube自定义规则,部署SonarSource/sonar-java源码中示例规则:docs/java-custom-rules-example-yxchun-博客园(cnblogs.com)假设你已经有了sonarqube-java源码,并且已经把sonarqube部署到电脑上1、在check里面创建文件 MyTxtBlockCheck.javap......
  • 在前面定义的 Person 类中添加两个构造器: 第一个无参构造器:利用构造器设置所有人的 ag
    1publicclassConstructorExercise{2//编写一个main方法3publicstaticvoidmain(String[]args){4Personp1=newPerson();//无参构造器5//下面输出name=null,age=186System.out.println("p1的信息name="+p......