ArcGIS Maritime Server 开发教程Maritime Service 功能解读

Posted 李远祥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArcGIS Maritime Server 开发教程Maritime Service 功能解读相关的知识,希望对你有一定的参考价值。

ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读

本章导读:ArcGIS Maritime Server 能够以极简的方式发布海图服务,其服务的标准与传统的 MapService 对齐,是否意味着 ArcGIS JS API 针对 MapService 的操作都完全对齐呢?本章从服务协议以及海图数据方面对其功能进行解读。By 李远祥

Maritime Service 服务功能

在第一章中介绍了 Maritime Service 的发布方式,由于 Maritime Server 是使用 SOE 技术扩展出来的,其服务是需要依赖一个已有的地图服务进行扩展。详细可以参考《ArcGIS Maritime Server 开发教程(一)了解 ArcGIS Maritime Server》的介绍。
这里主要介绍 Maritime Service 的功能,通过 rest 地址进入到对应的 Maritime Service ,可以看到它对应开放的功能。如下图所示:

从 Supported Operations 项可以看到支持的是 export(地图请求)、identify(点选/框选查询) 、find(模糊查询)、notes、parameters 等,目前能够支持的功能不算多。
下面是 ArcGIS Server 常规的地图服务的功能对照,如下图

传统 MapService 提供更多的功能接口。

再来看更细致的功能,点击进单独的服务图层里面,查看其功能接口。下图是 Maritime Service rest 接口界面。

从这个界面可以看到,Maritime Service 是没有二级的图层接口,它只有 8 个图层组(姑且跟 ArcGIS 的图层组概念对照吧)。这 8 个图层组是根据 S-57 数据常用的图层控制显示进行划分的,无法自定义分组,唯一的作用是用作图层显示控制,也就是常说的开/关图层。

而传统的 MapService 服务,是可以点击进每一个图层,并可以使用图层的 rest 接口去实现诸如 Query 查询等操作。如下图所示,使用的是 ArcGIS Server 安装时默认的测试服务,点击进 Cities 图层,可以进行 Query(图层的属性和空间查找)、Generate Renderer(图层动态渲染)等。

从这一点可以看出 Maritime Service 同样是用 MapService 的时候,跟传统 MapService 还是有很大的差距的。

接下来再进一步查看两种服务都带有的一些功能,如 identify 和 find 功能。
下面是 Maritime Service identity 功能。

从图上可以看到的,就只有一个 tolerance 参数,如果想通过常规的页面请求去测试,根本上是没可能了。

笔者后面通过代码的方式会再进一步测试这个 identity 的功能到底能做些什么,能够跟传统的 identity 功能进行对标。

接着对比下传统 MapService 的 identity 功能,如下图

可以看出,传统的 MapService identity 功能提供的参数非常多,Maritime Service 就相形见绌了。

继续对比 find 接口。由于 Maritime Service 没有 Query 接口,那么 find 也就显得相对重要了。下图是 Maritime Service 的 find 接口。

提供了检索文本、返回字段以及是否返回查询结果的图形等,属于基本满足的状态。

而传统的 MapService 则是提供非常丰富的参数,这种情况跟 identity 比较类似。

Maritime Service 的 notes 和 parameters 接口,目前还没有找到对应的资料,暂时无法什么去体会。在后续找到资料之后会继续补全。

Maritime Service 服务模式

Maritime Service 的使用模式是依附在传统的 MapService 中的,所以,本身对 MapService 也是有一定的要求的。其最大的要求就是坐标系统的要求。
由于 S-57 使用的是 WGS84 坐标,所以,主体服务(后面的所有内容和章节都将 Maritime Service 依附的服务称为主体服务)的坐标系必须跟 Maritime Service 保持一致,不然计算发布成功也显示海图。

Maritime Service 是支持多种坐标系的,基本上就是 WGS84 ,以及椭球体为与 WGS84 相同的投影坐标系。

Maritime Service 的坐标系并不取决于 S-57 本身(因为 S-57 本身坐标系是固定的),它是由 Maritime Service 的服务配置决定。打个比方,如果主体服务是 Web 墨卡托(目前主流的互联网地图都在使用的坐标系),那么 Maritime Service 必须是 Web 墨卡托坐标系。在 Maritime Service 设置好配置文件目录之后(就是第一章所提及到的 maritimechartservice 配置目录),到 controlfiles 目录下修改 ServerConfiguration.xml 配置文件。如下图

用文本编辑工具打开,即可查看,将 CoordinateSystem 的 Value 值改为主体服务的 wkid ,保存后到 Server Manager 页面重启主体服务即可。

上图的 value=“4326”,实际上就是将 Maritime Service 设置为 WGS84 坐标。

Maritime Service 的这个参数默认为 102100 ,为谷歌地图的 web 墨卡托投影坐标。如果是使用ArcGIS Server 安装时的 SampleWorldCities 服务,则需要修改为 4326 。

Maritime Service 支持的坐标系可以在配置目录中的 crs.xml 文件中找到。原则上出现在这个XML文件里面的坐标系都支持。

Martime Service(动态地图服务)的计算能力和资源都是作用在主题服务中的,所以,如果要增加其并发能力,采用的方式跟传统 MapService 一致,需要到 ArcGIS Server Manager 调整主体服务的实例数(ArcSOC进程)。

因此,需要考虑大量访问的并发能力时,则必须遵循 ArcGIS Server 的性能评估原则。

为了尽可能减少性能的损耗,笔者建议主体服务采用非常小的数据,例如一个非常简单的面图层,并且发布的时候将图层隐藏。这样就只显示海图的服务,从而达到降低主体服务对计算资源的损耗。

Maritime Service 的服务种类

Maritime Service 只有一种形态,就是动态服务。这种动态服务比传统的动态地图服务有着更好的优势。S-57 数据本身有着其增量更新的方式,数据的跟新可以用 .001,.002 等方式进行增量变更。当有增量数据时,只需要将 Maritime Service 对应的主体服务停止,将数据拷贝到 Maritime Service 配置目录的 datasets 目录下,重新启动主体服务即可。Maritime Service 能够自动识别增量数据,并且将增量处理后的海图呈现出来。

当然,如果来一批全新的数据,那就停掉主体服务,替换所有的数据重启服务即可,方便快捷。

Maritime Service 这种动态服务,性能是相当不错的,但只要是动态地图,不管性能怎样,都属于耗资源的类型。如果是弱海图应用,只需要将海图作为底图使用,那么,提供切片的海图就相当有必要了。

Maritime Server 是没有提供任何的直接从服务生成地图切片的功能,不能像传统的地图服务的方式生成地图切片。但从 Maritime Server 10.5 版本开始支持地图切片包(tpk包),其方式是通过内置的小工具 mcstpk.exe 生成。下图是 mcstpk.exe 工具的截图。

tpk 包的方式正是 ArcGIS Online 和 ArcGIS Portal 生成切片服务的数据源。如果使用 ArcGIS Online 和 ArcGIS Portal ,那么直接上传生成好的 tpk 包就完成切片地图服务创建。如果只是传统的 ArcGIS Server ,那么可以通过变通的方式来实现海图切片服务的发布。mcstpk.exe 工具介绍以及生成海图切片服务的详细方法,可以参考笔者之前的文章《ArcGIS Maritime 发布海图切片服务详解》。

总结

本章节从 Maritime Service 暴露的接口去反观 Martime Server 提供的海图功能,与传统的 MapService 功能做了全面的对比,旨在让传统 GIS 开发人员能够对 Maritime Service 有一个较为直观的了解,能够在认识其功能和接口的基础上能够快速的从传统的 ArcGIS 开发模式切换过来。

更多的GIS主流和非主流技术,可以持续关注CSDN的GIS制图乐园,以及微信公众号【GIS制图乐园】。BY 李远祥

以上是关于ArcGIS Maritime Server 开发教程Maritime Service 功能解读的主要内容,如果未能解决你的问题,请参考以下文章

ArcGIS Maritime Server 开发教程Maritime Server 正确的开发模式

ArcGIS Maritime Server 开发教程Maritime Server 正确的开发模式

ArcGIS Maritime Server 开发教程Maritime Server 正确的开发模式

ArcGIS Maritime Server 开发教程Maritime Service 开发技巧

ArcGIS Maritime Server 开发教程Maritime Service 开发技巧

ArcGIS Maritime Server 开发教程Maritime Service 开发实践