ArcGIS 发布服务的那些事儿——(6)要素服务之在线编辑(A1篇)

    个人认为要素服务在整个ArcGIS Enterprise中占据比较大的分量,因为其与数据库的结合,使得能够发挥更多的功能。接下来小编带你揭开要素服务的神秘面纱。
注:本文以10.7.1为例,不同版本在界面或者是功能上会有不同。因我不是专业研究数据库的人员,有些措辞不准确的位置还请各位指正。
   能够满足发布要素服务的基本软件:ArcGIS Desktop产品(ArcMap 或ArcGIS Pro)+ArcGIS Server+数据库(企业级地理数据库、地理数据库、托管数据库)+Portal for ArcGIS
不同的产品会组合出支持不同功能的要素服务
基本概念介绍:
地理数据库:是ArcGIS的原生数据结构,用来做数据编辑和数据管理,可存储多个地理信息系统的文件格式,如shapefile、TIN、格网、CAD 数据、影像、地理标记语言 (GML) 文件和大量其他 GIS 数据源等。支持SQL语句进行增、删、改、查,支持拓扑网络版本化编辑,具有一个管理 GIS 数据工作流的事务模型。
企业级地理数据库:企业级地理数据库是存储在数据库管理系统中并通过 ArcGIS Enterprise 或 ArcGIS GIS Server Basic(企业版)获得许可的多用户地理数据库。
托管数据库:配置了ArcGIS Enterprise的基本部署,datastore中的关系库就是托管数据库。

预期功能一:数据存在自己企业级地理数据库中,要在前端实现对某个图层的新增、更新、删除操作。
所需软件:ArcGIS Desktop、ArcGIS Server、企业级地理数据库

A: ArcMap中发布要素服务
发布过程如下,需要注意的点有:
1、数据源来自数据库
2、该数据库注册到了Server
3、发布服务时勾选FeatureAccess
注:有的用户发现,当数据源位于数据库时,开启编辑数据会提示无可编辑的图层,有两种解决方式:1、这是因为没有注册版本的原因,需要在catalog中找到该数据,然后右键–管理–注册为版本即可。
2、在edit工具条中找到options,切换到Versioning中,取消勾选Edit a verson of the database with the ablility to undo and redo。

前端调用效果(实现的是要素服务的前端编辑功能之一:删除)
ArcGIS 发布服务的那些事儿——(6)要素服务之在线编辑(A1篇)_第1张图片
代码:

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>edit</title>
    <link rel="stylesheet" href="https://js.arcgis.com/3.29/esri/css/esri.css">
    <style>
        html,
        body,
        #map {
            height: 100%;
            width: 100%;
            margin: 0;
            padding: 0;
        }
    </style>
    <script src="https://js.arcgis.com/3.29/"></script>
    <script>
        require([
            "dojo/dom-construct",
            "esri/map",
            "esri/layers/FeatureLayer",
            "esri/geometry/Extent",
            "esri/InfoTemplate",
            "esri/graphic", 
            "esri/geometry/Polygon",
            "dojo/domReady!"
        ], function (
            domConstruct,Map,FeatureLayer, Extent,
            InfoTemplate, Graphic, Polygon
        ) {
                var bounds = new Extent({
                    "xmin": -117.09180766612269,
                    "ymin": -40.45013111600945,
                    "xmax": -9.36297192907923,
                    "ymax": 18.408694391368222,
                    "spatialReference": { "wkid": 4326 }
                });
                var map = new Map("map", {
                    extent: bounds
                });
                var url2 = "https://aj.enterprise.cn/serverwa/rest/services/blog/featureAccess2/FeatureServer/0";
                var template = new InfoTemplate();
                var fl = new FeatureLayer(url2, {
                    id: "world-regions"
                });
                map.addLayer(fl);
                map.on("click", function (evt) {
                    if (evt.graphic.attributes) {
                        selectFeature = evt.graphic;
                        fl.applyEdits(null, null, [selectFeature])
                    }
                });
            }
        );
    </script>
</head>

<body>
    <div id="map"></div>
</body>

</html>

0509更新 要素服务的前端编辑功能:编辑属性和删除
代码:

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no">
    <title>edit</title>
    <link rel="stylesheet" href="https://js.arcgis.com/3.29/esri/css/esri.css">
    <style>
        html,
        body,
        #map {
            height: 100%;
            width: 100%;
            margin: 0;
            padding: 0;
        }

        #info {
            bottom: 20px;
            color: #444;
            height: auto;
            font-family: arial;
            left: 20px;
            margin: 5px;
            padding: 10px;
            position: absolute;
            width: 200px;
            z-index: 40;
        }
    </style>
    <script src="https://js.arcgis.com/3.29/"></script>
    <script>
        require([
            "dojo/dom-construct",
            "esri/map",
            "esri/layers/FeatureLayer",
            "esri/geometry/Extent",
            "esri/InfoTemplate",
            "esri/graphic",
            "esri/geometry/Polygon",
            "dijit/registry",
            "dojo/on",
            "dojo/dom",
            "dojo/domReady!"
        ], function (
            domConstruct, Map, FeatureLayer, Extent,
            InfoTemplate, Graphic, Polygon, registry, on, dom
        ) {
            var map = new Map("map");
            var url2 = "https://aoj.esrichina.com/server/rest/services/featureService/FeatureServer/0";
            var template = new InfoTemplate();
            var fl = new FeatureLayer(url2);
            map.addLayer(fl);
            on(dom.byId("deletePolygon"), "click", function () {
                console.log("删除要素");
                map.on("click", function (evt) {
                    console.log(evt);
                    selectFeature = evt.graphic;
                    fl.applyEdits(null, null, [selectFeature])
                })
            });
            on(dom.byId("editPolygon"), "click", function () {
                console.log("编辑要素");
                map.on("click", function (evt) {
                    var changeSelectFeature = new Graphic({
                        attributes: {
                            objectid: evt.graphic.attributes.objectid,
                            省代码: "20200509",: "test",
                            类型: "test",
                            sheng: "test",
                            leixing: "test"
                        }
                    });
                    fl.applyEdits(null, [changeSelectFeature], null)
                })
            });
        }
        );
    </script>
</head>

<body>
    <div id="map"></div>
    <div id="info" class="esriSimpleSlider">
        <button id="editPolygon" data-dojo-type="dijit.form.Button">editPolygon</button>
        <button id="deletePolygon" data-dojo-type="dijit.form.Button">deletePolygon</button>
    </div>
</body>

</html>

修改前
ArcGIS 发布服务的那些事儿——(6)要素服务之在线编辑(A1篇)_第2张图片
修改后
ArcGIS 发布服务的那些事儿——(6)要素服务之在线编辑(A1篇)_第3张图片
要点:更新属性,要将所有字段都写上(即使不修改),缺少任意一个都会更新失败
ArcGIS 发布服务的那些事儿——(6)要素服务之在线编辑(A1篇)_第4张图片
加objectid共6个字段
0509更新结束


B: ArcGIS Pro中发布要素服务
    原理是相同的,只不过界面有些许不同,直接看图即可

预期功能二:数据存在自己托管数据库中,要在前端实现对某个图层的新增、更新、删除操作。
所需软件:ArcGIS Desktop、ArcGIS Enterprise

C: 通过Portal发布托管要素服务
    首先需要将shp数据打包成zip,然后通过portal上传,默认托管服务是不开启编辑功能的,因此需要手动开启后才能编辑,在server端显示是有applyEdits接口

D:通过ArcMap发布托管要素服务
    需要在ArcGIS Administrator中设置Enterprise的连接,在ArcMap中登录之后,需要该连接即可,具体步骤如下:

E:通过ArcGIS Pro发布托管要素服务
    步骤与方法B类似,只有一个小点需要注意,方法B中,数据源必须是在自己的企业级地理数据库中,才能发布普通的要素服务,而在本方法中,因为要发布托管要素服务,即意味着,发布前数据源不论在哪,发布后的数据源一定是在托管库中的,因为在选择功能的时候,只需要选择拷贝数据要素即可,便会发布成为托管要素服务。
ArcGIS 发布服务的那些事儿——(6)要素服务之在线编辑(A1篇)_第5张图片
本篇就介绍到这里,下一篇讲要素服务之离线编辑,欢迎围观

你可能感兴趣的:(ArcGIS,Enterprise使用)