arcgis server发布服务--python自动发布arcgis服务全过程解析

0、文章导读前言

最近好多小伙伴在咨询:
1、我能不能用代码批量自动发布服务?
答:可以完成,但是有限制;python的arcpy包可以完成;

2、我能不能用JS语言控制,调用和发布服务?
答:JS本身是前端web请求的东西,目前是只能实现某一个环节,无法实现整体发布服务流程;

3、我在发布服务的时候都会有哪些过程,会产生哪些文件?
答:发布服务的mxd(地图文件文档),sddraft(草稿定义文件)

ArcGIS 提供了多种方法供您通过 web 服务与其他用户共享信息。发布服务后,即可在 Web、桌面和移动应用程序中加以使用。服务具有 Web 地址或 URL,客户端应用程序可以通过此信息访问服务。ArcGIS Enterprise 门户和 ArcGIS Online 旨在与 ArcGIS Server 站点中的服务搭配使用。您还可以在自己的应用程序中包含服务。使用或开发应用程序时,由用户提供要使用的服务的 URL。应用程序将转到相关 URL,开始使用服务引入地图或其他请求的 GIS 功能。

本主题介绍了发布服务的方式和发布服务过程中会产生哪些文件。

之前有小伙伴咨询,为什么要发布服务呢?
答:通过这种方式,服务允许多个用户同时访问和浏览托管在中央服务器计算机上的数据,并将该数据包含在 Web 和移动设备上丰富的 GIS 产品中。

1、发布服务的方法

https://enterprise.arcgis.com/zh-cn/server/latest/publish-services/windows/approaches-for-publishing-services-with-arcgis.htm

大多数服务将从 ArcGIS Pro 和 ArcMap 发布到 ArcGIS Enterprise 和 ArcGIS Online。这些桌面应用程序可为您提供完整的工作站,帮助您创作强大而直观的 GIS 资源,然后将其共享到 Web GIS。ArcGIS Pro 与 ArcMap 的共享模型和工作流均有所不同,但是两者都以将 Web 服务发布到 ArcGIS Server 站点为中心。

也可以在 ArcGIS Enterprise 和 ArcGIS Online 中创建各种类型的托管图层和服务。这些图层和服务提供了便利和可扩展性。

从 ArcGIS Desktop 发布

arcmap发布服务也是我们用的比较多的一种发布服务的方式;

您可通过其 ArcMap 组件显示、浏览和编辑 GIS 数据集;执行制图工作以及准备要导出的地图布局。ArcMap 将指导您完成地图性能瓶颈分析以及地图发布过程。

根据您要发布的 GIS 资源,可将以下类型的服务从 ArcGIS Desktop 发布至 ArcGIS Server 站点:

  • ArcMap 文档中的要素 - 发布地图服务或要素服务。
  • 用于执行分析的地理处理工具或脚本 - 发布地理处理服务。
  • 影像或栅格数据 - 发布影像服务。
  • 用于复制工作流的企业级地理数据库 - 发布地理数据服务。
  • 用于地理编码的地址定位器 - 发布地理编码服务。
  • 用于路径分析的网络数据集 - 发布路径服务。

虽然可发布到服务器上的 GIS 资源多种多样,但发布服务的步骤均遵循一种共同的模式。

从 ArcGIS Desktop 发布服务的第一步是确定您要发布的资源:

选项 操作
发布地图文档 打开 ArcMap 文档,然后从主菜单中选择文件 > 共享为 > 服务。
发布地理处理模型或工具 浏览到结果窗口中模型或工具的一个成功结果,右键单击并选择共享为 > 地理处理服务。
发布其他内容,例如地理数据库或地址定位器 浏览到 ArcCatalog 或目录窗口中的相应项目,右键单击并选择共享为服务。

此时,您将看到三个选项:

  • 发布服务 - 如果做好了发布的准备,您可以执行连接到服务器并发布服务的整个过程。您可以随时将工作保存为草稿服务,以后再回来继续完善。本主题将介绍发布过程。

  • 保存服务定义文件 - 如果要设置服务的所有属性并将这些属性传送到另一台计算机上进行发布,您可以创建并保存一个服务定义文件。这在云环境、安全环境或服务器不是立即可用的情况下有时是必要的。

  • 覆盖现有服务 - 如果要用更新的 GIS 资源和辅助数据来覆盖现有服务,可选择此选项。

要从 ArcGIS Desktop 发布新服务,请执行以下步骤。
在这里插入图片描述

从 ArcGIS Pro 发布

通过 ArcGIS Pro,您可以使用 2D 地图和 3D 场景探索、可视化和分析数据。

工作准备就绪后,您可以将其共享至 ArcGIS Enterprise 或 ArcGIS Online。我们可以直接向我们的enterprise中发布服务,也可以直接发布到独立server上;

ArcGIS Pro 中存在两种基础共享模型。第一个模型将 Web 内容共享到活动门户,该门户可以是 ArcGIS Enterprise 门户或 ArcGIS Online。
第二个模型直接将服务发布到独立 ArcGIS Server 站点(不与门户联合的站点)。

(1)在主要模型中,您可以连接到活动门户(ArcGIS Enterprise 或 ArcGIS Online),然后与门户共享已丰富的 GIS 内容。作为共享过程的一部分,Web 服务将发布到与门户联合的 ArcGIS Server 站点。

(2)如果您要使用不与 ArcGIS Enterprise 门户联合的 ArcGIS Server 站点,您还可以在发布到 ArcGIS Server 10.6 及更高版本时将服务直接发布到该独立服务器站点。为此,您首先要建立从 ArcGIS Pro 到服务器站点的发布者或管理员连接。您可以将地图服务、地理编码服务和图像服务发布到独立服务器站点。

注:
您无法直接将服务从 ArcGIS Pro 发布到与门户联合的服务器站点。相反,您可将 Web 地图和 Web 图层共享到门户,且门户也会将服务发布到联合服务器。

Web 图层的类型
当您的 ArcGIS Server 站点与 ArcGIS Enterprise 门户联合后,您可以将以下类型的 Web 图层共享到门户。每个 Web 图层都将显示发布到 ArcGIS Server 站点的服务。

图层类型 说明
要素图层 支持要素查询、可视化以及编辑。要素图层适合在底图上可视化矢量数据。使用复制所有数据数据选项将要素图层共享到 ArcGIS Enterprise 时,该服务将始终发布到您的托管服务器中。使用引用注册数据数据选项将要素图层共享到 ArcGIS Enterprise 时,该图层将作为依赖图层共享到地图图像图层。

要素图层用于显示要素服务。
切片图层 支持使用一组预先绘制的地图影像或切片实现地图的快速可视化。这些切片将在数据上传结束后创建并存储在服务器上。Web 切片图层适用于底图。将切片图层共享至 ArcGIS Enterprise 时,该服务将始终发布到您的托管服务器中。

切片图层用于显示托管的缓存地图服务。
矢量切片图层 支持使用一组预先绘制的矢量切片实现地图的快速可视化。虽然这些切片不支持栅格数据,但是能够适应显示设备的分辨率,并且可以更改样式以用于多种用途。将矢量切片图层共享至 ArcGIS Enterprise 时,该服务将始终发布到您的托管服务器中。

矢量切片图层用于显示矢量切片服务。
地图图像图层 支持地图可视化和要素查询。地图图像图层可以由服务器或根据切片动态绘制。地图图像图层只能共享至 ArcGIS Enterprise。地图图像图层可以引用已注册到联合服务器的工作空间中的数据集。共享地图图像图层时,可将该服务发布至已于您所访问的门户联合的任何服务器。可以启用其他图层和功能;有关详细信息,请参阅其他图层和功能。

地图图像图层用于显示动态或缓存地图服务。
场景图层 支持点、3D 对象、建筑物和点云数据的查询和可视化。将场景图层共享至 ArcGIS Enterprise 时,该场景服务将始终发布到您的托管服务器中。

点和 3D 对象场景图层可具有关联的要素服务,使您可以编辑场景图层。
影像图层 支持可视化、元数据、测量和影像处理以显示作为底图的数据或分析结果。影像图层可共享至与 ArcGIS Enterprise 联合的任何服务器。

影像图层用于显示动态或缓存影像服务。
高程图层 支持高程数据源在场景地表的可视化、元数据、测量和影像处理。Web 场景中使用高程图层以显示自定义高程表面上的 3D 内容。将高程图层共享至本地缓存的 ArcGIS Enterprise 时,该服务将始终发布到您的托管服务器中。在服务器上进行缓存时,可将服务发布至与 ArcGIS Enterprise 联合的任何服务器。

高程图层将显示使用 LERC 压缩切片方案的缓存影像服务。
独立表 支持查看、过滤和编辑表属性。

独立表将显示要素服务。

发布托管图层

术语“托管”指的是由 ArcGIS 管理的服务或图层中的数据。好多小伙伴一直在问我发布服务,那么普通的要素服务和托管要素服务区别在哪里呢?

托管可以理解这,你的数据可以让其他的工具代着管理:
其实质上是:该数据可位于 ArcGIS Data Store 附近或位于 ArcGIS Server 站点上的文件夹中。

部分(尽管不是全部)托管图层和服务是在 ArcGIS Enterprise 或 ArcGIS Online 内创建的,例如当您将 CSV 文件上传到门户时。

由于 ArcGIS 对该数据进行本地管理,因此您无需对其使用专用的、用户管理的数据库。相反,系统会将该数据复制到 ArcGIS Enterprise 并代表您来管理该数据。这样,您的用户无需经过集中化流程即可将其数据提供给其他人,且不需要组织中的某个成员来管理其数据。系统还可以存储作为分析工作流以及由 ArcGIS Enterprise 用户执行的其他操作的一部分而生成的数据。

ArcGIS Enterprise

ArcGIS Enterprise 包含一个中心 GIS 门户、一个或多个 ArcGIS Server 站点,以及用于自助制图的 ArcGIS Data Store。ArcGIS Server 可用作 Web 服务托管引擎。所有组件均部署在您管理的基础架构(包括物理计算机、虚拟计算机和云基础架构)上。

使用 ArcGIS Enterprise,您可以完全控制谁可以查看和使用 GIS 内容。

您可以向 ArcGIS Enterprise 门户中添加 ArcGIS Server web 服务,即可在整个 ArcGIS 平台的应用程序中使用该服务。如何添加服务取决于您需要如何使用它。

(1)如果要创建对 ArcGIS Server web 服务的引用,便于他人访问和发现服务,可以执行以下操作之一:

  • 将来自独立 ArcGIS Server 站点上的 web 服务作为项目添加。
  • 将资源发布到与您的门户联合的 ArcGIS Server 站点上。 执行此操作时,服务会作为项目自动添加到您的门户中。

(2)您也可以将 ArcGIS Server web 服务直接添加到 Map Viewer 或 Scene Viewer,并在特定的地图或场景中配置服务图层。可以在应用程序中使用通过这些图层配置保存的地图和场景。

ArcGIS Online

ArcGIS Online 允许您将 GIS Web 服务发布到由 Esri 管理的云环境。不必安装任何程序;只需登录到您的 ArcGIS Online 帐户。

ArcGIS Online 托管服务可通过组织订阅 ArcGIS Online 获得。使用 ArcGIS Online 的优势在于不必安装任何服务器软件或调整服务。

与 ArcGIS Enterprise 门户一样,您可以通过两种方式将 ArcGIS Server web 服务添加到 ArcGIS Online:

  • 如果要创建对 ArcGIS Server Web 服务的引用,便于他人访问和发现服务,请将 Web 服务作为项目添加。当 ArcGIS Server Web 服务作为图层项目添加时,您可以使用图层项目存储自定义弹出窗口和设置样式等图层配置。将图层项目添加到地图或场景时,将使用图层配置。
  • 您也可以将 ArcGIS Server web 服务直接添加到 Map Viewer 或 Scene Viewer,并在特定的地图或场景中配置服务图层。可以在应用程序中使用通过这些图层配置保存的地图和场景。

2、arcgis server发布服务的过程中会产生哪些文件

服务定义草稿(.sddraft)

如果在发布前退出服务编辑器,则系统将询问您是否要保存草稿服务定义。如果选择保存,则将创建草稿服务定义文件 (.sddraft),其中包含对服务所做的所有修改。可以可通过 ArcMap 或从 ArcCatalog 或目录窗口打开此草稿服务定义。

为地图、地理处理、影像和地理编码服务创建服务定义草稿的函数包括:

CreateMapSDDraft
CreateGPSDDraft
CreateImageSDDraft
CreateGeocodeSDDraft

在 ArcMap 中使用服务编辑器发布服务或创建服务定义时,您可能需要再次返回到服务配置以进一步修正。例如,您发布了一项地图服务,但在分析地图文档过程中发现其中存在着大量错误,这时,您可能需要关闭 ArcMap 并在之后的会话中改正这些错误。实际工作中如果遇到了这种情况,您可以在关闭服务编辑器时将服务或服务定义配置保存为草稿。

可以将草稿服务和草稿服务定义视为操作过程中的一项工作。尽管草稿中可能包含了您想要在服务中包括的所有服务属性,但是草稿并未进行编译;也就是说,它不包括任何可以发布到服务器或暂存在本地磁盘上的 GIS 资源和数据。一旦完成了草稿并提交以发布服务或保存服务定义之后,GIS 资源和数据就会进行编译并删除草稿。

草稿服务定义保存的位置取决于您在共享为服务向导的第一个面板中是选择发布服务还是另存为服务定义文件,如下所示:
在这里插入图片描述

如果选择发布服务,草稿服务将保存至您选择发布到的服务器上的“草稿”文件夹。
如果选择另存为服务定义文件,草稿服务将保存到您选择保存服务定义的位置中。
注:如果发布大批量的影像,而中间可能会产生比较大的.sddraft文件,这时候如果发布失败的话,又不想等待,可以考虑手动删除;

https://enterprise.arcgis.com/zh-cn/server/latest/publish-services/windows/a-quick-tour-of-publishing-a-geoprocessing-service.htm

过渡的服务定义(.sd)

服务定义文件根据在创建时是连接到 ArcGIS Server 站点还是连接到门户组织而不同。在创建服务定义文件时,如果您连接到的是 ArcGIS Server 站点或选择包括 GIS 资源引用的数据,则只能在 ArcGIS Server 站点中使用文件,无法将其发布到 ArcGIS Enterprise 门户或 ArcGIS Online。同样,在创建服务定义文件时,如果选择的是连接到组织,则无法将服务定义文件发布至 ArcGIS Server 站点。

服务定义文件被封装为一个便携文件,其中包含了:服务属性、功能和服务类型等相关信息。
另外,您可对服务定义文件进行配置以包含 GIS 资源所引用的数据

例如,假设您是一位 GIS 分析师,管理着一个由几十个编辑人员不断进行修改的地理数据库。而且,每个月都需要对此数据执行质量保证检查流程,以保证其达到您所在组织的数据完整性标准。在对数据执行了质量检查之后,您可以使用服务定义文件来捕捉已经过验证的地理数据库,并将其传送给服务器管理员,以便发布到 ArcGIS Server 站点。

服务定义文件,我们还可以直接将文件拷贝到arcgis server所在的服务器上,然后在server界面直接上传sd文件即可;

3 利用python调用arcpy包发布服务

1、先生成服务定义草稿 (.sddraft) 文件
arcpy 函数 CreateMapSDDraft(在 arcpy.mapping 中)、CreateImageSDDraft 或 CreateGPSDDraft 创建服务定义草稿。

在 ArcGIS Pro 中,您可以使用 arcpy.sharing 模块为地图服务、地图图像图层、web 切片图层和 web 要素图层创建服务定义草稿 (.sddraft) 文件。您还可以使用函数为地理编码服务 (CreateGeocodeSDDraft)、地理处理服务 (CreateGPSDDraft) 和图像服务 (CreateImageSDDraft) 创建 .sddraft 文件。

2、过渡服务定义文件

得到草稿文件后,您可以使用 ArcPy 将文件过渡。

arcpy.sharing 模块和上面列出的其他 ArcPy 函数将创建 .sddraft 文件。在将服务定义文件上传到 ArcGIS Server 之前,您需要过渡文件。StageService 函数可将 .sddraft 文件转换为可上传的 .sd 文件。

过渡服务 (StageService) 示例(Python 窗口)

import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.StageService_server("myMapService.sddraft", "myMapService.sd")

3、得到服务定义文件并上传到服务器站点。

上传服务定义 (Server):根据过渡的服务定义 (.sd) 文件上传并发布 GIS 服务至特定的 GIS 服务器。

(1)上传服务定义 (UploadServiceDefinition) 示例(Python 窗口)
将服务定义上传并发布到指定服务器。


import arcpy
from arcpy import env
env.workspace = "C:/data"
arcpy.UploadServiceDefinition_server("myMapService.sd", "GIS Servers/myServerConnection")

(2)以下脚本演示了使用 Stage_Service 和 Upload_Service_Definition 的发布工作流。



# Name: StageService_UploadServiceDefinition_example2.py
# Description: Use a service definition draft to create a service definition
# and then upload and publish that service definition.
# Requirements: Connection to an ArcGIS Server, Spatial Data Server, or My Hosted Services

# Import system modules
import arcpy
from arcpy import env

# Set environment settings
env.workspace = "C:/data"

# Set local variables
inServiceDefinitionDraft = "myMapService.sddraft"
outServiceDefinition = "myMapService.sd"

# Execute StageService
arcpy.StageService_server(inServiceDefinitionDraft, outServiceDefinition)

# Set local variables
inSdFile = outServiceDefinition
inServer = "GIS Servers/myServerConnection"

# Execute UploadServiceDefinition
arcpy.UploadServiceDefinition_server(inSdFile, inServer)


完整示例:
在处理问题的时候,借鉴一个客户的代码,大家可以参考下:

#!/usr/bin/python
#coding:utf-8
#-*-coding:utf-8-*-
# 使用 CreateGISServerConnectionFile 连接server ;
# 使用 CreateMapSDDraft 将 地图文档(.mxd) 转换为服务定义草稿(.sddraft) ;
# 使用arcpy.StageService_server() 将 服务定义草稿(.sddraft) 转换为 服务定义(.sd)文件;
# 使用 arcpy.UploadServiceDefinition_server() 将 服务定义 (.sd)文件上传到server。

import arcpy
from arcpy import env
import os, sys, time, datetime, traceback, string,io
mxdpath = arcpy.GetParameterAsText(0)
serviceName = arcpy.GetParameterAsText(1)
serverFolder = arcpy.GetParameterAsText(2)
description = arcpy.GetParameterAsText(3)
# mxdpath = "C:\Users\weizhenhua\Desktop\export\gcbp.mxd"
# serviceName = "dddssd"
# serverFolder = ""
# description = ""
server_username = '****'
server_password = '*****'
folderPath = os.path.dirname(mxdpath)
wrkspc = folderPath+"/"
# 创建server连接
connection_type = 'ADMINISTER_GIS_SERVICES'
out_folder_path = folderPath
out_name = serviceName+'.ags'
server_url = 'http://192.168.0.217:6080/arcgis/admin'
use_arcgis_desktop_staging_folder = False
staging_folder_path = out_folder_path
arcpy.mapping.CreateGISServerConnectionFile(connection_type, out_folder_path, out_name, server_url,
                                            'ARCGIS_SERVER', use_arcgis_desktop_staging_folder,
                                            staging_folder_path, server_username, server_password,
                                            "SAVE_USERNAME")


currentTime = datetime.datetime.now()
arg1 = currentTime.strftime("%H-%M")
arg2 = currentTime.strftime("%Y-%m-%d %H:%M")
file = folderPath+"\\report_%s.txt" % arg1

# print results of the script to a report
report = io.open(file, 'wb')
report.write("缓存参数设置完毕!")
# 将mxd文档变为服务定义草稿(.sddraft)文件,服务定义草稿文件会在服务定义文件(sd)后自动删除
mapDoc = arcpy.mapping.MapDocument(mxdpath)
sddraft = wrkspc + serviceName + '.sddraft'
sd = wrkspc + serviceName + '.sd'
tags = ''
con = wrkspc + out_name
analysis = arcpy.mapping.CreateMapSDDraft(mapDoc, sddraft, serviceName, 'ARCGIS_SERVER',
                                          con, True, serverFolder, description, tags)
# arcpy.newType = 'esriServiceDefinitionType_Replacement'   //覆盖
if analysis['errors'] == {
    
    }:
    arcpy.StageService_server(sddraft, sd)
    arcpy.UploadServiceDefinition_server(sd, con)
    # arcpy.SignOutFromPortal_server()
else:
    print analysis['errors']

那么了解了发布服务的过程,接下来我们看一下有什么服务类型:

大家常见的有:
地图服务:发布和使用ArcGIS Server 服务之–地图服务(Mapserver)
要素服务:发布和使用 ArcGIS Server 服务之–要素服务(feature server)
影像服务:发布和使用 ArcGIS Server 服务之–影像服务(image server)
OGC 服务:发布和使用 ArcGIS Server 服务之–OGC服务(WMS/WMTS/WFS/WCS/WPS)
缓存服务:发布和使用 ArcGIS Server 服务之–缓存服务(TileServer)(一)
缓存服务:管理和迁移ArcGIS Server服务和缓存服务(TileServer)(二)
发布和使用ArcGIS Server 服务之–地理处理服务(Geoprocessing service)、矢量切片服务、场景服务
、地理数据服务、以及几何服务、KML 服务、地理编码服务、定位器Maritime Server、路径服务、Schematics 服务、流服务、公共设施网络服务、Workflow Manager 服务等;

注:如果在本地运行脚本的时候,提示无法CreateGISServerConnectionFile()无法链接的时候:
1、可以考虑在arcmap中重新生成一个新的arcgis server的ags文件;
2、可以看一下server的证书和浏览器证书,以及IIS或者tomcat服务器证书是否同意;
3、可以考虑在arcmap或者arcgis Pro自带的python控制台进行 运行.py文件;

参考链接:
ArcGIS Server教程四:通过服务定义文件发布服务

ARCGIS保存服务定义文件(.sd)后到服务器上发布服务

在 ArcMap 中创建服务定义文件

在 ArcMap 中创建服务定义)

arcgis Pro服务定义文件:保存服务定义简介

猜你喜欢

转载自blog.csdn.net/weixin_40625478/article/details/112847755
今日推荐