【 Arcpy 】栅格数据的批量镶嵌和上传切片

  这是Arcpy系列的第一篇文章,首先要先介绍一下Arcpy的来源与功能。

0. 缘起

  Arcpy是ArcGIS或者ArcGIS Pro中的一个Python模块,它提供了对ArcGIS功能的Python编程访问,允许用户通过Python脚本自动执行GIS分析、数据处理、地图制作等任务。arcpy模块使得用户能够在ArcGIS环境中编写脚本,利用强大的地理处理功能进行空间数据管理和分析。它提供了各种工具和函数,可用于读取、编辑、转换和分析地理空间数据,包括矢量数据(如点、线、面)和栅格数据(如影像、DEM)等。
  在ArcGIS中使用的是较为古早的Python2.7版本,ArcGIS Pro中使用的是较新的Python3.9版本,同时在今天要使用到的ArcGIS Server中也提供了Arcpy的功能调用。
  Arcpy的使用方法比较多,可以直接在ArcGIS软件中进行使用,或者使用掉包的方式在Vs Code或者PyCharm等编译器中进行使用,鄙人更推荐后者,方便在代码编写过程中进行调试和纠错,更直观方便一些。
  如下图为ArcGIS Pro中的Arcpy模块:
请添加图片描述

1. 实现

  本文要实现的功能是将一个文件夹中的栅格数据进行批量镶嵌再上传至ArcGIS Server中并进行切片。
  那么接下来讨论一下实现思路,分为镶嵌上传切片两部分。
  镶嵌前需要先进行栅格数据的投影,分别使用到了ProjectRaster_management和MosaicToNewRaster_management两个函数进行使用。
  上传切片部分使用了ArcGIS Server 10.2 的版本(这个版本与ArcGIS 10.8并不兼容,所以不能同时存在在一台电脑中),需要先通过CreateGISServerConnectionFile函数与Server 创建连接生成一个ags文件,再使用CreateImageSDDraft、AnalyzeForSD、UploadServiceDefinition_server三个函数分别直行创建服务定义草稿文件、错误分析和发布的任务;发布成功后再进行切片,CreateMapServerCache_server和ManageMapServerCacheTiles_server实现了这个功能。
  Arcpy中的功能和在ArcGIS中操作是相似的,你可以理解为ArcGIS软件中的面板是对函数的调用而每填入的输入框就是函数的参数,这样能有助于ArcPy代码的编写,同时这是基于此Arcpy的好处就是批量的直行这点类似于模型构建器,也就是直行循环,在需要重复进行计算时比较方便。

2. 部分代码

  栅格数据合并的代码如下:

# 栅格数据合并
mosaic_dataset_name = "MergedRaster.tif"  # 不能超过13个字符
mosaic_dataset_path = arcpy.os.path.join(output_filepath, mosaic_dataset_name)
# 传入参数分别为待合并的栅格数据集、合并后栅格数据集的输出工作空间、合并后的栅格数据集的名称、输出栅格数据集的坐标系统、输出栅格数据集的像素类型、输出栅格数据集的像素大小、输出栅格数据集的波段数、合并栅格数据集的方法、合并颜色表的模式
arcpy.MosaicToNewRaster_management(raster_list, output_filepath, mosaic_dataset_name, out_coordinate_system,
                                   '16_BIT_SIGNED', '250', '1', 'LAST', 'FIRST')
print("Raster datasets merged successfully.")

  上传至ArcGIS Server的代码如下:

sddraftname = 'servercon.sddraft'
sddraft_path = arcpy.os.path.join(env.workspace, sddraftname)
servicename = 'tif'
sdname = 'servercon.sd'
sdname_path = arcpy.os.path.join(env.workspace, sdname)
foldername = 'tif'
sddraft = arcpy.CreateImageSDDraft(mosaic_dataset_path, sddraft_path, servicename, 'ARCGIS_SERVER', ags_path, False, foldername)
# sddraft = arcpy.mapping.CreateMapSDDraft(mxd_path, sddraft_path, servicename, 'ARCGIS_SERVER', servercon, False, foldername)  # 创建服务定义草稿文件
analysis = arcpy.mapping.AnalyzeForSD(sddraft_path)
# 查看分析结果中的错误消息
for key, value in analysis['messages'].iteritems():
    print(key)
    for subvalue in value:
        print(subvalue['description'])

arcpy.StageService_server(sddraft_path, sdname_path)  # 将服务定义草稿(.sddraft) 转换为服务定义(.sd)文件
try:
    arcpy.UploadServiceDefinition_server(sdname_path, ags_path)  # 发布服务
except Exception, e:
    print e.message

3. 运行结果

  投影与镶嵌的运行结果如下:
请添加图片描述
  上传结果:
请添加图片描述

  • 35
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值