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

2023-11-09

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 李远祥

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读 的相关文章

  • echart旭日图_ECharts 旭日图

    ECharts 旭日图 旭日图 Sunburst 由多层的环形图组成 在数据结构上 内圈是外圈的父节点 因此 它既能像饼图一样表现局部和整体的占比 又能像矩形树图一样表现层级关系 ECharts 创建旭日图很简单 只需要在 series 配
  • 检测到“RuntimeLibrary”的不匹配项

    1 gt libCGAL vc140 mt 4 4 I 900 lib all files obj error LNK2038 检测到 RuntimeLibrary 的不匹配项 值 MT StaticRelease 不匹配值 MD Dyna

随机推荐

  • golang处理execl文件

    1 引入execl依赖包 go get github com xuri excelize v2 2 打开execl文件 并获取句柄 打开文件 获取句柄 f err excelize OpenFile path if err nil fmt
  • elasticsearch全文检索流程

    elasticsearch全文检索流程 elasticsearch全文检索流程 索引过程 创建索引 获得原始文档 创建文档对象 分析文档 创建索引 查询索引 elasticsearch全文检索流程 索引过程 索引过程 对要搜索的原始内容进行
  • java中包装类的作用

    Java中包装类的作用 一 包装类是什么 包装类就是解决java的八种基本数据类型不面向对象的缺陷 而设计出来的一个个与每一个与基本类型相对应的类 这八种基本数据类型对应的类统称包装类 Wrapper Class 包装类均位于java la
  • 升级到spring security5遇到的坑-密码存储格式

    遇到的问题 将spring security oauth2 包括spring security 升级到最新 代码没有改动 运行项目没有报错 但是页面登陆时报错 There is no PasswordEncoder mapped for t
  • 火猴之图片立体翻转效果展示(firemonkey)

    结果 思路 1 使用firemonkey之3d应用 2 layout3d image3d textlayer3d 3 使用floatanimation改变image3d的rotation的角度实现 4 运用floatanimation的fi
  • Python自动化测试框架:Pytest和Unittest的区别

    pytest和unittest是Python中常用的两种测试框架 它们都可以用来编写和执行测试用例 但两者在很多方面都有所不同 本文将从不同的角度来论述这些区别 以帮助大家更好地理解pytest和unittest 1 原理 pytest是基
  • Nginx上线一个项目并简操

    Nginx上线一个项目 上线一个商场项目 第一步 将项目源码和数据库文件上传至html文件中 第二步 解压项目源码和导入数据文件 第三步 修改Nginx配置文件 配置server 虚拟机 第四步 在项目代码文件中配置连接MySQL的用户密码
  • 听说你Pycharm都不会用?这篇快速上手指南你必须拥有!

    0 前言 大家好 欢迎来到今天的基础入门编辑器Pycharm的使用篇 Pycharm 作为一款针对 Python 的编辑器 配置简单 功能强大 使用起来省时省心 对初学者友好 这也是为什么编程教室一直推荐新手使用 Pycharm 的原因 本
  • CTF之逆向之阿里巴巴

    题目地址 http www shiyanbar com ctf 13 题目预览 解题过程 1 下载附件发现是exe文件 2 使用PEid和Detect It Easy查壳 和 开发语言 发现没有加壳 都是用C 开发的 3 C 和Java P
  • 打开方式中选择默认方式无反映_系统小技巧:找回丢失的文件“打开方式”

    无论你在使用最经典的Windows 7 还是最主流的Windows 10 当某种文档可以用多个不同程序打开时 在文件的右键菜单中会出现 打开方式 的菜单项 从中可选择打开文档的程序 但有时我们会发现 明明程序在电脑中并未被卸载 但右键菜单中
  • 腾讯云域名解析

    腾讯云域名解析 外链图片转存失败 img 7ZtbvWq2 1562133684211 http shp qpic cn txdiscuz pic 0 bbs qcloud com common cf 163844rpqz5g6g6p6qf
  • 动态代理步骤

    实现动态代理的步骤 1 创建接口 定义目标类要完成的方法 2 创建目标类实现接口 3 创建InvocationHandler接口的实现了类 在invoke方法中完成代理类的功能 1 调用目标方法 2 增强功能 4 使用Proxy类的静态方法
  • jdk动态代理与CGLib的区别

    昨天被人问及动态代理与CGlib的区别 赶紧回顾一下 什么是代理 静态代理与动态代理 静态代理实例 JDK动态代理实例 CGLib 简介 CGLib 与JDK动态代理的区别 代理模式是Java中常见的一种模式 英文名字叫走Proxy或者Su
  • 基于 TiDB 的 Apache APISIX 高可用配置中心的最佳实践

    项目背景 什么是 Apache APISIX API 网关作为微服务架构中的重要组件 是流量的核心出入口 用于统一处理和业务相关的请求 可有效解决海量请求 恶意访问等问题 保障业务安全性与稳定性 作为开源的云原生 API 网关 Apache
  • SQL Server Powershell 开源数据库管理工具 dbatools

    在 Windows 中开发自动化运维 除了 python 就是 powershell了 powershell 与 windows 相关产品关联紧密 Windows 环境下的自动化开发一般使用 powershell sql server 亦是
  • 高效液相色谱分析的基本原理

    一 高效液相色谱分析法 百度百科 高效液相色谱以经典的液相色谱为基础 是以高压下的液体为流动相的色谱过程 通常所说的柱层析 薄层层析或纸层析就是经典的液相色谱 所用的固定相为大于100um 的吸附剂 硅胶 氧化铝等 这种传统的液相色谱所用的
  • Dubbo 3.x源码(10)—Dubbo初始化导出/引用模块配置源码

    基于Dubbo 3 1 详细介绍了Dubbo初始化导出 引用模块配置的源码 此前我们学习了Dubbo配置的加载与覆盖的一系列源码 Dubbo 3 x源码 7 Dubbo配置的加载入口源码 Dubbo 3 x源码 8 Dubbo配置中心的加载
  • JeecgBoot Vue2前端国际化语言切换

    JeecgBoot antd Vue2前端国际化语言切换 jeecg官方文档 参考 jeecg前端的国际化解决方案 参考 一 需求场景 后台管理系统 放置一个中英文切换选择按钮 页面切换所选语言后 系统会重新加载 获取对应的语言数据 并且下
  • Git 的origin和master分析

    lt lt 关键是 中英文切换着打字太辛苦了转载请注明出处 gt gt http lishicongli blog 163 com blog static 1468259020132125247302 首先要明确一点 对git的操作是围绕3
  • ArcGIS Maritime Server 开发教程(三)Maritime Service 功能解读

    ArcGIS Maritime Server 开发教程 三 Maritime Service 功能解读 本章导读 ArcGIS Maritime Server 能够以极简的方式发布海图服务 其服务的标准与传统的 MapService 对齐