撰写日期:2019年12月10日
注意:随着时间推移,该博文可能不再适用,请仔细检查自己的版本与博文版本的对应关系,不能保证三五年后,该博文仍然对新版本的ArcGIS有效!
一般情况下,我们会发布影像服务、地图服务、要素服务三种服务至ArcGIS Server,然后在web端,可以利用ArcGIS API for Javascript调用三种服务。前面介绍了如何发布影像服务和地图服务,今天介绍如何利用ArcGIS发布要素服务。
由于要素服务发布后,我们想要编辑要素,而不仅仅是查看下,因此要素服务的发布一般需要借助某种数据库,例如SQL Server,要素图层实际上存储在关系数据库中。要素服务成功发布后,可以利用web端对要素进行修改、删除等编辑操作。当然在web端对要素的修改,实际上修改的是存储在数据库(如sql server)中的数据。
一、系统环境
- Windows 10 企业版 1903 64bit
- SQL Server 2014 Express
- ArcGIS Desktop 10.2.2
- ArcGIS Server 10.2.2
二、安装软件
ArcGIS连接数据库有两种方式,一种是直接连接,另外一种是服务连接。
- 直接连接也就是arcgis直接连接至关系数据数据库,没有中间层,不需要安装ArcSDE。
- 服务连接往往需要通过ArcSDE这一层,需要安装ArcSDE。
ESRI官方推荐是直接连接,因此本文也采用直接连接,不安装ArcSDE。
2.1 安装SQL Server 2014 Express
Express是学习版,安装包比较小。如果你功能要求比较多,可以装develop版本。或者安装Oracle。
2.2 安装ArcGIS Desktop 10.2.2
这里不赘述了,GIS专业的同学应该很熟悉。需要注意的是先安装ArcGIS License Manger,再安装ArcGIS for Desktop。如果你是第一次安装,最好不要搞反了顺序。(如果你是老手,这个顺序其实也是可以反的)
2.3 安装ArcGIS Server 10.2.2
这个过程很简单,比安装ArcGIS Desktop还要简单。唯一需要注意的是授权文件,记得保留着,后面创建企业级地理数据库时还需要它。
三、利用ArcGIS Desktop发布要素服务
要素服务与数据库的关系大致如下图,如果看不明白不要紧。接着往下看。
3.1 创建企业级地理数据库
从ArcGIS desktop中创建地理数据库,创建好的数据表实际上存放在Sql Server中(假设你用的Sql Server)。
(1)打开arcmap,然后打开ArcToolbox窗口,依次找到【Data Management Tools】->【Geodatabase Administration】->【Create Enterprise Geodatabase】,打开创建企业级地理数据库的对话框。
(2)这里我创建一个名字为Test的企业级地理数据库,创建好之后在Sql Server中可以看到名称为Test的数据库。按照下图的步骤依次填入对应的值或者选择对应的文件。最后点击【OK】按钮。
(3)sql server中查看创建好的地理数据库
利用Microsoft Sql Server Management Studio,连接至Sql server的后台,可以看到新出现了一个Test数据,就是我们刚才新建的Test地理数据库。Test数据库下有不少由arcgis创建的表。
(4)目前在ArcMap中我们无法看到刚才创建的地理数据库Test。我们可以通过添加一个连接,将ArcMap连接至Sql Server。具体方法是:
打开Catalog,展开Database Connections组,点击【Add Database Connection】,设置好相应的值,在Database栏选择刚才创建的Test数据库。点击【OK】,就会看到带红×的数据库连接,双击该数据库连接,就可以连上sql server数据库了。
直到目前为止,刚才创建的企业级地理数据库Test里面什么数据也没有,还是空的。下面,我们要加点数据进去。
3.2 添加数据至企业级地理数据库
(1)在刚才的设置的数据库连接【Connection to DESKTOP-3BAHAU6 (3).sde】上右键单击,选择【Import】-【Feature Class(single)】,导入单个要素类(当然你也可以一次性导入多个)。设置导入参数,就可以导入了。导入后可以看到数据库连接下有一个【Test.DBO.NewTest】,这就是我们刚才导入的要素类,现在它已经放到了sql server数据库中了。我们可以将其拖到到ArcMap工作区,就可以看到Test地理数据库中存放的要素类和原始的要素类数据是一样的。只是Test地理数据库是放在Sql Server中,而原始的要素类数据可能是文件或其他形式。
3.3 发布要素服务
(1)将刚才新建的数据库连接下的要素类【Test.DBO.NewTest】拖拽至ArcMap工作区。现在就可以看到该要素类了,设置要素类的显示样式。
(2)点击【File】->【Share as】->【Service】,进入发布要地图服务的流程。
后续的对话框中选择【Publish a service】,设置【Service name】,下一步我选择创建一个新的文件夹(当然也可以不创建)。
(3)在Service Editor对话框中,依次点击【Capabilities】-->勾选【Feature Access】,然后点击右上方的【Analyze】按钮。分析我们发布的要素服务存在的问题。
(4)可以发现,点击【Analyze】后下方确实出现了一个问题列表,其中还有错误。错误提示我们要素服务需要一个注册数据库。
双击该错误,弹出注册数据库的对话框。在Registered Databases一栏,点击右侧的+号,点击【Register Database】,然后依次设置各个对话框的值,如下图所示。
(5)回到【Service editor】对话框,再次点击【Analyze】按钮,可以发现这次没有错误了,可以点击【Publish】按钮发布地图服务至ArcGIS Server了。
3.4 检查发布结果
打开浏览器,输入:http://localhost:6080/arcgis/manager,进入ArcGIS Server管理界面。找到刚才发布的test服务文件夹,可以看到发布的服务NewTest。点击进去查看详细信息。
点击左侧的【功能】选项卡,点击【Feature Access】,下面URL栏出现的REST URL地址 http://localhost:6080/arcgis/rest/services/test/NewTest/FeatureServer 即为在ArcGIS API for JavaScript中的调用地址。
当然,你也可以点击【地图(始终启用)】,下面的REST URL就会变为地图服务的地址,类似于:http://localhost:6080/arcgis/rest/services/test/NewTest/MapServer 其中从MapServer即可看出是地图服务。
至此,ArcGIS发布要素服务讲解完毕。已经很详细了。
后面会讲解发布GP服务,以及在ArcGIS API for JS 4.13中调用的一些问题。