Linux/Solaris 中的缓存生成和更新
对于 Linux/Solaris 中的 ArcGIS Server,地图和 globe 服务缓存是使用可脚本化的地理处理工具创建的。安装 ArcGIS Server 时会同时安装几个脚本来帮助用户通过命令行管理缓存。这些脚本使用 ArcToolbox 中的服务器工具。
缓存脚本
缓存脚本位于 <ArcGIS Server 安装目录>/server10.0/java/tools/caching 目录下。
地图缓存脚本
- CreateMapServerCache.sh - 初始化缓存并设置切片方案。此工具不会创建任何切片。要创建切片,应使用 ManageMapServerCacheTiles.sh。
- ManageMapServerCacheTiles.sh - 创建新切片、替换旧切片或从缓存中删除切片。
- ManageMapServerCacheScales.sh - 向现有缓存中添加比例或从中移除比例。
- DeleteMapServerCache.sh - 删除所有缓存切片和缓存的文件夹结构。
- GenerateMapServerCacheTilingScheme.sh - 创建一个在整个组织内共享的切片方案。此工具将创建一个 XML 切片方案文件。您可以将此切片方案文件放置在共享位置并在运行 CreateMapServerCache.sh 时引用此文件。
- ConvertMapServerCacheStorageFormat.sh - 将原来的缓存转换为 ArcGIS Server 10 中新引入的紧凑格式。此工具可在松散格式和紧凑格式间双向转换缓存。
- ExportMapServerCache.sh - 以指定存储格式将切片子集导出到不同位置。之后,可将此目录导入其他缓存而与其他组织共享,以进行协作缓存构建。
- ImportMapServerCache.sh - 如果导入的方案与现有方案匹配,则在缓存之间导入切片子集。多个组织协作构建一个大型缓存时此脚本特别有用。
Globe 缓存脚本
- ManageGlobeServerCacheTiles.sh - 创建新切片、替换旧切片或从 globe 缓存中删除切片
- DeleteGlobeServerCache.sh - 删除 globe 缓存
运行脚本
以下是使用这些工具成功创建/更新地图或 globe 缓存的几个原则。
以 ArcGIS Server 安装程序所有者身份运行 ArcGIS Server 对象容器 (SOC) 进程。默认情况下,此用户不是 agsadmin 组的成员。仅 agsadmin 组的成员可在服务器上创建空上下文并成功运行地图缓存工具。
ArcGIS Server 安装程序所有者需要由 agsadmin 组添加。可使用以下步骤在管理器中完成这一过程:
- 登录 ArcGIS Server 管理器。
- 单击 GIS 服务器选项卡。
- 单击左侧的本地 GIS 用户链接。
- 单击添加用户链接。
- 指定用户名“ags”并将组设置为“agsadmin”(假定您已选择了 ags 作为 ArcGIS Server 安装程序所有者)。
- 单击保存。
- 请确保缓存目录中有足够可用空间。如果可用空间不足,请将默认缓存目录更改为可用空间充足的位置。
- 如果是多机部署,请确保 ArcSOC 进程对缓存位置具有写入权限。
现在即可通过命令行运行脚本来创建/更新缓存;作为 ArcGIS 安装程序所有者,从 <ArcGIS Server 安装目录>/server10.0/java/tools/caching 位置运行。脚本会提示您从变量列表为指定参数选择一个值或输入一个值。
如前所述,生成地图缓存共有两个步骤:(1) 设置地图缓存属性;(2) 创建/更新地图缓存切片。地图缓存属性既可通过 ArcGIS 管理器进行设置(导航到管理服务面板,选择一种地图服务,然后选择缓存选项卡),也可通过执行 CreateMapServerCache 脚本进行设置。
脚本:CreateMapServerCache
- Domain:对于 Unix 中的 ArcGIS Server,输入完全限定的主机名。
- Username/Password:输入用于连接到 ArcGIS Server 管理器的用户名/密码。默认值是 admin/admin。
- server_name:输入安装 ArcGIS Server 的主机名称或承载待缓存服务的 ArcGIS SOM 计算机的名称。
- object_name:此参数会列出正在运行的满足所执行脚本要求的地图服务。例如,如果未为地图服务配置缓存切片方案,则其不会在 ManageMapServerCacheTiles 脚本的选项中列出,即使服务正在运行。
- data_frame:此参数会列出指定地图服务可用的数据框的名称。按 ENTER 键即可接受默认数据框。
- out_folder - 服务器缓存目录:选择希望缓存数据驻留的缓存目录。如果想添加列表提供的目录之外的目录,则必须在 ArcGIS 管理器中添加新缓存目录。
- tiling_scheme_type - 切片方案:用于定义比例级数等缓存属性及其值。
- [新] * 默认值:创建新切片方案。
预定义:用于维护组织内的标准切片方案或制定一个与现有在线服务(例如 ArcGIS Online/Bing 地图/Google 地球)兼容的切片方案。
- tiling_schema: 仅当使用预定义类型的切片方案时此选项才可用,其需要切片方案的路径。
- scales_type - 比例:
- [标准] * 默认值:选择该项后,脚本将基于地图全图范围及其分辨率为指定比例级数建议比例值。
- 自定义:选择该项后,需要基于最佳显示设置为指定地图数据输入一列自定义比例值。
- num_of_scales:只有选择了标准类型的比例此选项才可用。在缓存级别中输入缩放的比例级数。一般来说,应该将请求的建议比例级数限制在 20 个以下。
- dpi - 每英寸的点(像素)数:要得到更清晰的分辨率,请选择较高的值。默认值 96 通常便已足够,除非在您经常使用的网络中,大多数客户端计算机都有与此不同的 DPI 设置。
- tile_width 和 tile_height - 切片宽度与切片高度(以像素为单位):选择较小的切片宽度和高度可提高向缓存请求切片的应用程序的性能,因为需要传输的数据较少。但是,切片越小缓存越大且创建时间越长。
- map_or_layers - 缓存类型:此为高级缓存设置。
- [融合]* 默认值:将地图中的所有图层都包括在一个融合图像中且必须同时打开和关闭。
- Multi_layer:各个图层的缓存图像集,可由用户启用或禁用。此选项对基于 .msd 的地图服务不可用。
- tile_origin:切片原点(地图单位)。
- levels:仅当将“scales_type”设置为“自定义”时此选项才可用。输入一列以分号分隔的自定义比例值。
- layers:仅当将“map_or_layers”变量设置为“多图层”时此选项才可用。输入一列需要生成缓存的图层,以分号分隔
- Antialiasing:
- [无]* 默认值
- Antialiasing:选择此项可平滑标注和线的边缘以提高显示质量。
- cache_format - 缓存切片图像格式:[Png8、Png24、Png32、JPEG、Mixed] 选择用于创建缓存切片的输出图像格式。图像格式用于确定磁盘上的缓存大小、图像质量以及支持背景透明度的能力。栅格数据用 JPEG 或 MIXED 图像格式表示最佳。
- tile_compression_quality:仅 JPEG 格式支持压缩。针对 JPEG 压缩质量输入一个介于 1 和 100 之间的值。对于 JPEG 切片格式,默认值为 75;对于其他切片格式,默认值为 0。选择的值越高,文件越大且图像质量越高,而选择的值越小,文件越小且图像质量越低。使用 JPEG 或 MIXED 格式的矢量地图时,应使用较高的压缩质量值(如 90),进而降低线和文本的模糊程度。
- storage_format - 缓存切片存储格式:
- 紧凑:对缓存切片进行分组以获取更高的存储效率和移动性。
- 松散:将每个切片存储为单独的文件。
- use_local_cache_dir - 服务器上的本地缓存目录:选择是否应在创建紧凑缓存时将包文件写入服务器上的本地目录,而不是直接写入共享的缓存目录。如果选择此选项,包文件在完成后将复制到共享的缓存目录。当多台计算机处理缓存作业时,此选项可提升性能。
- [True]* 这是缓存存储格式为“紧凑”时的默认值。包中存储的切片将写入本地缓存目录,然后在完成包后复制到共享的缓存目录。注:存储格式为“松散”时此选项不可用。
- False:切片将直接写入共享的缓存目录。存储格式为“松散”时,这是唯一有效的选项。
脚本:ManageMapServerCacheTile
- layers:仅当在缓存方案中将“map_or_layers”变量设置为“多图层”时此选项才可用。输入一列需要生成/更新缓存的图层,以分号分隔。
- levels:比例可用于从以下任一种工具的指定比例列表中选择比例:ManageMapServerCacheTiles、ExportMapServerCache 或 ImportMapServerCache。
- update_mode - 更新模式:
- 重新创建空切片:想要确保是为缺失的切片创建缓存时应使用此设置。注: 完成大型缓存作业时使用此设置将花费较长的时间,因为此设置会检查缓存所在文件夹并创建所有缺失的切片,进而确保创建的缓存的质量。
- 重新创建所有切片:第一次创建缓存或要放弃现有缓存并基于更新的地图服务创建新缓存时应使用此设置。
- 删除切片:保留缓存方案时删除现有缓存切片。
- constraining_extent - 更新范围:如果想为地图上的矩形区域创建切片,可更改默认的更新范围并输入自定义的矩形范围;为测试区域构建缓存时此参数特别有用。
- thread_count - 地图服务器实例的数量
- update_feature_class - 使用要素类范围更新缓存:提供要素类所在的路径以在空间上限制为仅在要素类的范围中创建切片,避免在空区域或不感兴趣的区域创建。这也可使缓存作业更易于管理和追踪。
- ignore_status:
- 追踪完成状态:用于标记哪些要素已在其区域上创建切片。将对正在缓存的要素类添加一个“已缓存”字段。当已针对要素范围创建切片时,将该要素的“已缓存”字段标记为“是”。可通过在 ArcCatalog 中打开要素类查看这些字段。
- [忽略完成状态字段] * 默认值:不添加或更新“已缓存”字段。
- Antialiasing:此参数是该工具中的只读参数。它基于在“服务属性”对话框的“缓存”选项卡中设置的值。
遵照脚本指令可完成缓存生成/更新过程。
完成相应的过程后,输出便位于缓存位置。默认的缓存位置是 <ArcGIS Server 安装目录>/server/serverdir/arcgiscache。
脚本:ManageMapServerCacheScales
levels:可以定义比例组,进而通过添加或删除比例来更新缓存方案。通过输入以分号分隔的比例值来提供一列更新的比例值。
脚本:GenerateMapServerCacheTilingScheme
- map_document:基于要创建新缓存切片方案的位置提供地图文档的路径。
- tiling_schema:提供要用于存储输出切片方案的路径。务必为新方案的名称追加扩展名 .xml。
- cache_levels:输入新切片方案应具有的比例级数。
- levels:默认情况下,脚本将基于地图范围为指定数量的缓存级别建议相应的比例值。可以选择使用建议的值或通过输入以分号分隔的新值自定义比例值。
脚本:ExportMapServerCache 和 ImportMapServerCache
- target_cache_path:输入导出所选缓存数据的文件夹路径。请确保文件夹存在且 ArcSOC 对其具有写入权限。
- storage_format_type:提供选项,选择导出的缓存的存储格式类型。其可与父缓存不同。注:默认情况下,“导入地图服务器缓存”工具选择目标文件夹的存储格式。
- export_extent/import_extent:提供用于仅导出/导入指定范围内部分缓存数据的选项。输入自定义的要导出或导入缓存数据的矩形范围。
- levels:用于从指定的比例列表中选择比例进行导出/导入。
- export_feature_class/import_feature_class:用于在空间上限制为将缓存切片导出到要素类的边界,避免导出到不感兴趣的区域。输入要素类所在的目录路径。
- source_cache_dataset:提供要从中导入缓存数据的文件夹中的图层文件的路径。例如,/net/plotemy/arcgiscache/sandiego/Layers。
脚本:ManageGlobeServerCacheTiles
- in_layers:选择要包含在图层缓存中的图层。
- 最小级别 - 选择开始建立图层缓存要依据的比例细节层次。如果将最小和最大细节层次比例用作最小值和最大值,将为图层建立完全缓存。
- 最大级别 - 选择开始建立图层缓存要依据的比例细节层次。如果将最小和最大细节层次比例用作最小值和最大值,将为图层建立完全缓存。
通过命令行自动生成缓存
要完全脚本化缓存工具而无需用户进行交互,请以 ArcGIS 安装所有者身份从命令行运行以下代码。按显示的顺序为上述参数输入值。
CreateMapServerCache .sh
./CreateMapServerCache.sh -u <username> -d <hostname> -p <passwd> -args <server_name> <object_name> <out_folder> <tiling_scheme_type> <scales_type> <num_of_scales> <dpi> <tile_width> <tile_height> <data_frame> <map_or_layers> <tiling_schema> <tile_origin> <'levels;customScale1'> <'layers;multiLayer1'> <antialiasing> <cache_format> <tile_compression_quality> <storage_format> <use_local_cache_dir> For example: To generate cache using New Tiling scheme Type & Standard scales ./CreateMapServerCache.sh -u admin -d hostname -p admin -args myserver Rainfall Layers /path/to/arcgiscache/ NEW STANDARD 4 96 512 512 FUSED '#' '-400 400' '#' '#' ANTIALIASING MIXED 75 Compact True Note: 1. Based on the chosen parameters, the depended properties will get enabled or disabled. 2. To enter default values or null values use # sign inside quotes.For example '#' 3. To enter multiple values for a parameter separate each value using semicolon (;) 4. Use single quotes('') when providing values that require a semi-colon(;) or a space as a separator. For example: 'scale1;scale2', 'layer1;layer2'
ManageMapServerCache.sh.
./ManageMapServerCacheTiles.sh -u <username> -d <hostname> -p <passwd> -args <server_name> <object_name> <data_frame> <'layers;multiLayer1'> <'levels;levels'> <update_mode> <constraining_extent> <thread_count> <Antialiasing> <update_feature_class> <ignore_status> For example: ./ManageMapServerCacheTiles.sh -u ags -d hostname -p ags -args myserver Rainfall Layers '#' '64000000;32000000' 'Recreate Empty Tiles' '-183.780014728684 16.3007091216187 -61.4068546696843 74.030308030969' 5 NONE /path/to/feature_class IGNORE_COMPLETION_STATUS_FIELD
计划在预定时间运行缓存脚本
# 1. Set the environment variable to point to an editor of choice (the example below uses vi) EDITOR=/usr/bin/vi; export EDITOR # 2. Bring up the crontab in the editor using the command crontab -e # 3. Add a line to crontab # <min> <hour> <day of month> <month> <day of week> <script to be executed> # Allowed values # <0-60> <0-23> <1-31> <1-12> <0-6> </path/to/customised_ManageMapServerCache.sh> 0 10 * * 0 /path/to/customised_Cache.sh # To run every Sunday at 10 AM 0 18 * * * /path/to/updatecache.sh # To run every day at 6 PM 0 0 1 * * /path/to/updatecache.sh # To run at midnight on the first of every month # 4. Save and exit the editor # 5. Verify that the cron job has been added to the list of cron tasks crontab -l Note: Do not use statements following '#' sign, these are comments for understanding the commands.