说句题外话,前段时期生了大病,险些就与世长辞,修养了3个多月终于基本恢复。这里希望各位程序猿工作之余还是要保存身体,活着才能继续革命不是。
言归正传,近来有几个项目是要做专题图相关的项目。为提高效率,公司考虑使用 OneMap 作为基础框架进行快速开发。OneMap 是捷泰天域(Esri 在天朝的战略合作伙伴)的产品之一,是基于服务器 GIS 的软件产品,面向各行业提供多源异构空间信息服务资源整合、管理、安全监控与运维保障一体化的专业解决方案。OneMap产品包含平台 管理系统、资源服务中心、地图应用模板等不同的产品组件,还包括可选的公交换乘扩展模块(产品官网上照搬的,其实我表示一脸懵逼,哈哈哈)。
经过几次安装部署发现其中还遇到了不少坑,捷泰天域的官方安装部署手册中很多都写的太笼统。里面的原因有我对 GIS 开发其实也是不熟悉(以前更多就是用了高德百度地图 API),还有就是 GIS 这块的东西在国内资源还是比较难查,鉴于此情,写下学习过程中遇到的问题,以备以后查看。
1. 安装环境准备
这里我使用了2个虚拟机来分别存放数据和部署一下应用,是为了通过虚拟机的快照功能,快速恢复某一个的状态,避免玩崩了重装软件等麻烦事。
我的系统环境和安装的必要程序如下:
- 数据服务器(虚拟机,网络使用桥接方式)
系统:Windows Server 2012 R2 64位;
其它:Oralce11gR2 数据库。 - 应用服务器(虚拟机,网络使用桥接方式)
系统:Windows Server 2012 R2 64位;
其它:ArcGIS Server 10.5,Oralce11g 客户端 64位,准备工作完成后 OneMap 将安装到该主机。 - 本机
系统:Windows 10 专业版 64位;
其它:ArcGIS Desktop 10.5,Oracle11g 客户端 32位。
注意事项:
- 本文所用的截图为我这几次在不同环境下安装 OneMap 时为截图,图片内的部分版本号和日期并不一定对应,但并不影响安装的步骤和流程;
- 所有安装 ArcGIS 相关产品的主机都要预先安装 .NET Framework 3.5;
- 所有主机的机器名最好都为字母和数字组合,如果不是则最好在安装前更改机器名,不要带 "-” 和 "_" ,以免在安装部署 ActiveMQ(OneMap 需用到,MQ 在机器名为上述符号时有时启动会报异常)和 ArcGIS(不能使用 "_") 时发生异常;
- 由于 ArcGIS Server 是 64位的程序,所以 Oracle 客户端也必须安装 64位的并配置好环境变量,而 Desktop 是 32位的程序,所以 Oracle 客户端需要安装 32位。如果 Server 和 Desktop 安装在一个主机环境下,则 32位和64位的 Oracle 客户端都需要安装(详细 Arcgis 安装可以查阅 Esri 官方网站的安装说明手册)。
- Oracle 数据库的字符集要设置为 ZHS16GBK,为避免意外,最好实例名使用默认的 orcl;
-
需要修改 Oralce 的监听器中的地址为机器名,否则 ArcGIS 和数据库进行连接建立地理信息基础数据库时会出错,如下图所示:
解决方案:
- 打开 Oracle 的 Net Manager 程序
- 如下图所示,将监听中的主机名改为当前主机的机器名(默认是 localhost)
- 查看 ORACLE_HOME/NETWORK/ADMIN/listener.ora 里的监听名称是否已改为当前主机机器名
- 修改 tnsnames.ora 里的主机地址为当前主机的机器名,并将修改好的 tnsnames.ora 文件复制到所有客户端下的相同位置(如客户端目录下 NETWORK/ADMIN 文件夹不存在则创建),然后重启 Oracle 服务。
2. 注册 SDE 服务
2.1 在 Oracle 数据库中创建 sde 账户
此账户主要用于 ArcGIS 连接访问 Oracle 数据库。
- 打开 ArcGIS Desktop 中的 ArcMap 程序,在右侧 Catalog 工具栏窗口中按照 Toolboxes\System Toolboxes\Data Management Tools.tbx\Geodatabase Administration\ 的目录找到并打开 Create Enterprise Geodatabase,如下图所示:
在 Create Enterprise Geodatabase 窗口中填写数据库实例、用户密码等信息,点击 OK,如下图所示:
创建 sde 用户成功后,会显示如下信息:
登录 Oracle11g 控制台可以看到通过 ArcCatalog 工具创建的 sde 表空间和用户
2.2 在 ArcGIS Server 中注册 Oracle 数据库
在注册之前,如果 ArcGIS Server 尚为建立站点的话,需先行建立一个站点。建立站点本文不做描述,具体步骤可以查阅 Esri 的官方说明文档。
注册数据库可以通过两种方式,一种通过 ArcMap 来注册,一种是通过访问 ArcGIS Server 的管理后台( http://主机名:6080/arcgis/manager )来注册,这里我的是通过 ArcMap 的方式来完成此步骤。具体流程为:
- 在 Catalog 工具栏窗口中 Database Connections 项中找到并打开 Add Database Connection,使用刚才建立的 sde 用户来建立与数据库的连接,成功后会生成一个 .sde 文件,如下图所示:
- 右键生成的 .sde 文件,点击 properties,可以找到 sde 文件的物理位置,以备之后使用
- 在 Catalog 工具栏窗口中 GIS Servers 项中找到并打开 Add ArcGIS Server,建立与 Server 的连接,如下图所示:
- 选择建立一个管理端的 GIS 服务连接
- 填写 Server 的地址和站点管理员和密码
- 连接成功后可以在 GIS Servers 项下看到连接的项,如图所示:
- 在建立的 Server 连接上右键点击 Server Properties... 项,选择注册托管数据库,具体操作如图所示:
- 填写注册数据库的名称,点击 Import 按钮导入之前生成好的 .sde 文件
- 注册成功后,如下图所示:
注意事项
- 如果未安装 .NET Framework 3.5 此步骤可能会报如下图异常(此图为我之前用访问 Server 管理平台注册数据库时遇到此问题时的截图)
- 由于 OneMap 还未安装,故文件夹等之后再注册。
3. 发布要素服务
此服务主要是用于 OneMap 的扩展权限功能。
- 在之前 Database Connection 项下建立的 sde 连接上右键 New > Feature Class 打开要素服务窗口,并按照官方说明手册要求填写名称、坐标系等信息,具体参数设置请参照官方手册,本文就不再进行说明。大体流程如图所示:
- 完成后在左侧窗口中就可以看到添加好的数据,根据手册做相应配置后保存
而后选择左侧窗口中的数据,点击菜单栏 File > Share As > Service... 开始发布服务
- 选择 Server 服务和填写图层服务名称
- 参数设置完成后,点击右上角的 Publish 进行服务发布
- 发布成功后,可以登录 ArcGIS Server 的管理平台,可以看到刚刚发布的服务
- 至此 OneMap 安装前的准备工作就全部完成。
4. 安装和配置 OneMap
详细的安装流程请参照 OneMap 官方安装部署手册进行,本文只着重说明下其中的关键步骤。
4.1. 向数据库中导入 OneMap 的用户、库表结构和数据
- 运行安装程序,点击创建。而后填写数据库的连接信息,开始导入数据
4.2. 安装 OneMap 主程序
- 运行安装程序,点击安装开始进行安装,尽量不要改动其安装路径,避免将来遇到未知的错误
- 安装完成后,会弹出参数配置窗口,如下图所示:
- 这里需要注意的是,上图中蓝框的部分为数据库的配置,主机地址需要填写 Oracle 数据库所在主机的机器名或 IP。绿框的部分为 ArcGIS Server 的配置,主机地址需要填写 Server 所在主机的机器名或 IP。金黄色框的部分为 OneMap 的配置,主机地址需要填写 OneMap 所在主机的机器名或 IP。
- 之后在安装程序主界面点击授权,导入授权文件即可激活 OneMap。
- 安装 OneMap 主程序完成后,还需要在 ArcGIS Server 中注册 OneMap 的共享文件夹。首先先要设置 OneMap 所在主机的 C:\OneMap\temp\upload 文件夹为共享文件夹,并且 ArcGIS 的账户,默认为 arcgis 拥有权限,这里为了方便,直接向所有用户开放了权限。如图所示:
4.2 根据 OneMap 的部署要求配置 ArcGIS Server
- 将 C:\OneMap\extension\ArcGIS 文件夹下的 11个 jar 包服务到 ArcGIS Server 安装目录下的
framework\lib\server 文件夹下。
- 编辑 C:\OneMap\extension\ArcGIS 目录下的 proxool.xml 修改数据库主机地址为当前数据库所在主机的地址。并将修改好的 proxool.xml 文件复制到 ArcGIS Server 的工作文件夹中(默认为 C:\arcgisserver),本文是将文件复制到 C:\arcgisserver\oracle 文件夹下,并设置 oracle 文件夹为共享,以确保 proxool.xml 为共享文件,然后重启 Server 的服务 。
- 登录 ArcGIS Server 后台管理系统(主机名:6080/arcgis/admin),登录后,按照 security > config > Update Identity Store 的路径打开更新身份存储窗口。
- 将下图中的配置数据,填写到 User Store Configuration 和 Role Store Configuration 项中,红框的路径要设置为之前设置的共享文件位置。
- 填写完毕后,点击更新,成功则显示如下信息:
- 按照 security > users > getUsers 的路径打开窗口。然后和数据库中的对应表中的用户名是否一致。
4.3 为 Server 配置 OneMap 本地发布的 js 库
- 在 Server 根路径下找到 framework\runtime\tomcat\webapps\arcgis#rest\WEB-INF\classes\resources\rest-config.properties 配置文件并打开。将其中的 js 资源路径替换为 OneMap 发布的资源路径。
- 注:如果 classes 文件夹下是空的,可以用压缩工具打开 arcgis#rest\WEB-INF\lib\rest-10.4.1.5686.jar 包。提取 jar 里的 rest-config.properties 文件,修改保存后放置到文档要求的位置。 (不过这里有个疑问,官方手册匹配 ArcGIS 版本是10.1/10.2/10.3,我发现 10.4.1 版本的 rest-10.4.1.5686.jar 中的配置文件是放在根路径下,而并非是在 resources 包下,发布后应该也是在 classes 而不是 处理 classes/resources 下,具体等有时间了再进行测试)。
- 登录 ArcGIS Server 管理后台(Server 主机名:6080/arcgis/admin),按照 system > handlers > rest > servicesdirectory 的路径打开窗口。修改 js 相关地址为 OneMap 发布的资源地址并保存。
- 登录 ArcGIS Server Manager,在安全性功能下编辑令牌信息,默认:geoshare
4.4 启动 OneMap 服务
- 使用 OneMap 启动服务快捷方式启动所有服务。
- 如果出现 “拒绝访问” 的错误,可以使用管理员权限来执行此脚本程序。
- 打开服务管理器,确认 OneMap 的 4 个服务是否已全部开启。
5. 访问和初步配置 OneMap
5.1. 各系统访问地址
主要包含 4 个系统:
- OneMap 资源服务中心(门户系统),URL:http://主机名:8080/Portal;
- OneMap 捷泰天域平台管理系统(运维系统),URL:http://主机名:8080/GeoShareManager;
- OneMap 服务目录(服务系统),URL:http://主机名:8080/OneMapServer/rest/services;
- OneMap 用户信息安全加密服务系统(Token系统),URL:http://主机名:8080/RemoteTokenServer;
5.2. 配置服务引擎
- 登录运维系统,按照“系统配置” > “服务引擎配置” 进入引擎配置页面。按照自己的安装部署环境和需要配置 Server 引擎、OneMap 服务引擎、代理和令牌引擎。
5.3. 平台监控配置
- 打开“系统配置” > “平台监控配置”,有集群(选组织)、单机(选服务器)两种方式进行配置,这里用服务器的方式进行配置。
5.4. 日志系统配置
- 打开“系统配置” > “日志收割”,修改服务器的 IP 为部署 OneMap 的主机 IP,并保存。
- 点击远端配置按钮(下图红圈处),修改“访问账号”的绑定 IP 为部署 OneMap 的主机 IP。
6. 服务测试
至此 OneMap 全部安装和部署工作已全部完成。现在就就发布一组测试数据看看是否可以成功。
登录运维系统,打开“服务管理” > “本地服务发布”。这里我发布了 OneMap 在安装包中提供的示例中国行政区划图的 .sd 文件。
- 发布成功后,在“服务平台管理”中可以看到刚才发布的图层。
- 下图为把图层加载到 ArcGIS Online map viewer 中显示的效果。
- 注:OneMap 安装时会把系统的环境变量中 JDK 等路径设置为他自带的 JDK 1.6 的路径。从而影响系统里其他需要 1.7 和以上版本 JDK 的程序。有需要的或者有强迫症的,可以把 “C:\OneMap\Tomcat\bin\setclasspath.bat”、“C:\OneMap\services\activemq5.4.1\bin\activemq.bat”、“C:\OneMap\services\activemq5.4.1\bin\activemq-admin.bat” 中加上指定 JDK 的语句,然后把环境变量里的设置改回原来的即可。