ArcGIS发布FeatureServer和在线编辑applyEdit

2023-10-17 17:08

本文主要是介绍ArcGIS发布FeatureServer和在线编辑applyEdit,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文所用软件:arcmap10.3,server10.3,Oracle 11g

一.发布FeatureServer

用ArcGIS发布在线编辑服务,需要注意将数据存放在sde中,且进行版本注册。

1.创建企业级地理信息数据库

首先创建企业级地理信息库将arcmap用到的空间表与Oracle等关联,这样就可以像操作属性表那样对空间表进行修改了。

在toolbox工具条下找到 Data Management——Geodatabase Administration——Create Enterprise Geodatabase

打开如下:

点击确定,运行。

2.创建数据库连接

在catalog标签中找到Database Connection展开,双击Add Database Connection,输入之前设置的空间表管理账户,点击确定

3.创建要素类

打开创建好的数据库连接,可以右击创建要素类,也可以先创建要素集,在要素集中创建要素类。创建要素集通常会靠前显示,如果有多个要素类,放在要素集中也方便管理。创建好的要素类如下:

4.注册版本

如果只是要素类,则右键要素类,在Manage中点击Register As Versioned,如果要素类存放在要素集中,则右键要素集。注意在弹出的确认框中打上勾。

可能点击确定后会出现如下情况,可以尝试重启license服务。

5.发布服务

注册成功后,就和正常流程一样发布服务即可:将待发布的要素类拖入arcmap中,点击File——Share As——Service,在服务属性页的Capabilities中勾选Feature Access即可。

二.利用FeatureLayer.applyEdits方法在线增改删要素

上面我们发布的服务,在Mapping和Feature Access下分别对应两个rest地址,仔细对比发现是MapServer和FeatureServer,MapServer是用于展示空间要素,需要加载到Map中,FeatureServer用于编辑要素,不需要加载到Map中。

applyEdits(adds?, updates?, deletes?, callback?, errback?)方法前三个参数分别对应增改删操作。

adds参数需要传入graphic数组,graphic只需要赋geometry和attributes即可,不需要设置symbol。

updates参数与adds类似,同样graphic数组,不需要symbol,但是attributes中还需带有OBJECTID属性

deletes参数需要传入graphic数组,graphic只需要赋attributes中的OBJECTID即可。

示例代码:

require(["esri/map","esri/graphic","esri/layers/ArcGISTiledMapServiceLayer","esri/layers/FeatureLayer","esri/layers/GraphicsLayer","esri/SpatialReference","esri/geometry/Extent","esri/geometry/Point","esri/symbols/TextSymbol","esri/layers/LabelClass","esri/symbols/SimpleFillSymbol","esri/symbols/SimpleLineSymbol","esri/Color","esri/toolbars/draw","dojo/domReady!"],function(Map,Graphic,ArcGISTiledMapServiceLayer,FeatureLayer,GraphicsLayer,SpatialReference,Extent,Point,TextSymbol,LabelClass,SimpleFillSymbol,SimpleLineSymbol,Color,Draw){var baseSpatialRef = new SpatialReference({"wkt":'GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["degree",0.0174532925199433]]'});var map = new Map("map",{
// 				center:[113.03,34.69],showLabels : true,extent:new Extent({xmin:112.80,ymin:34.516,xmax:113.27,ymax:34.865,spatialReference:baseSpatialRef}),logo:false,maxZoom:17,minZoom:4,zoom:7});map.spatialReference = baseSpatialRef;var basemap = new ArcGISTiledMapServiceLayer(basemapUrl);var featuremap = new FeatureLayer(xmdkMapUrl,{//用于展示的MapServershowLabels: true,outFields: ["*"]});var featureLay = new FeatureLayer(xmdkFeaUrl,{//可编辑要素图层FeatureServermode: FeatureLayer.MODE_SNAPSHOT,outFields: ["*"]});var graphicLayer = new GraphicsLayer({id:"graph"});//设置文字标注属性var statesLabel = new TextSymbol().setColor(new Color("#FF0000"));statesLabel.font.setSize("14pt");statesLabel.font.setFamily("arial");//设置标注属性//create instance of LabelClass (note: multiple LabelClasses can be passed in as an array)var labelClass = new LabelClass({labelExpressionInfo: {"value": "{QYMC}"},useCodedValues: false,labelPlacement: "always-horizontal"});labelClass.symbol = statesLabel; // symbol also can be set in LabelClass' jsonfeaturemap.setLabelingInfo([ labelClass ]);map.addLayers([basemap,featuremap,graphicLayer]);<!-- 新增要素 -->var toolbar = new Draw(map);toolbar.activate(Draw.POLYGON);toolbar.on("draw-end", function(evt){toolbar.deactivate();var attr = {"QYMC":"qq","QYFZR":"ww"};var graphic = new Graphic(evt.geometry,"",attr);featureLay.applyEdits([graphic],null,null);//新增要素var extent = map.getZoom();map.setZoom(extent-1);//通过缩放形式刷新图层});<!-- 编辑及删除要素 -->var editclick = featuremap.on("click",function(evt){var attr = evt.graphic.attributes;attr.QYMC = "AA"var graphic = new Graphic(evt.graphic.geometry,"",attr);featureLay.applyEdits(null,[graphic],null);//编辑要素//var graphic = new Graphic("","",{//	"OBJECTID":evt.graphic.attributes.OBJECTID//});//featureLay.applyEdits(null,null,[graphic]);//删除要素var extent = map.getZoom();map.setZoom(extent-1);//通过缩放形式刷新图层editclick.remove();});});

以上代码从项目中抠出来的,不具有运行功能,只用于展示~

需要注意有两处:

1.执行applyEdits方法后,图层是不会自动刷新的,用FeatureLayer的refresh和redraw都没用,放到applyEdits的回调函数中依旧如此,所以选用了缩放达到刷新的目的,有好办法的同学可以留言,不胜感激。

2.执行添加方法过程中,发现待入库的graphic的属性字段(除OBJECTID,shape的属性字段)内容不能出现空值。举个例子,要素服务包含OBJECTID,QYMC,QYFZR字段,组装graphic时,QYMC,QYFZR内容不能为空,否则报错。

在firefox下报错:

在IE下报错:

这篇关于ArcGIS发布FeatureServer和在线编辑applyEdit的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/226769

相关文章

修复已被利用的高危漏洞! macOS Sequoia 15.6.1发布

《修复已被利用的高危漏洞!macOSSequoia15.6.1发布》苹果公司于今日发布了macOSSequoia15.6.1更新,这是去年9月推出的macOSSequoia操作... MACOS Sequoia 15.6.1 正式发布!此次更新修复了一个已被黑客利用的严重安全漏洞,并解决了部分中文用户反馈的

kkFileView在线预览office的常见问题以及解决方案

《kkFileView在线预览office的常见问题以及解决方案》kkFileView在线预览Office常见问题包括base64编码配置、Office组件安装、乱码处理及水印添加,解决方案涉及版本适... 目录kkFileView在线预览office的常见问题1.base642.提示找不到OFFICE组件

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

Linux在线解压jar包的实现方式

《Linux在线解压jar包的实现方式》:本文主要介绍Linux在线解压jar包的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux在线解压jar包解压 jar包的步骤总结Linux在线解压jar包在 Centos 中解压 jar 包可以使用 u

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

macOS Sequoia 15.5 发布: 改进邮件和屏幕使用时间功能

《macOSSequoia15.5发布:改进邮件和屏幕使用时间功能》经过常规Beta测试后,新的macOSSequoia15.5现已公开发布,但重要的新功能将被保留到WWDC和... MACOS Sequoia 15.5 正式发布!本次更新为 Mac 用户带来了一系列功能强化、错误修复和安全性提升,进一步增

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

使用Python构建一个Hexo博客发布工具

《使用Python构建一个Hexo博客发布工具》虽然Hexo的命令行工具非常强大,但对于日常的博客撰写和发布过程,我总觉得缺少一个直观的图形界面来简化操作,下面我们就来看看如何使用Python构建一个... 目录引言Hexo博客系统简介设计需求技术选择代码实现主框架界面设计核心功能实现1. 发布文章2. 加