背景:如何实现一键制作等高线;前面讲过等高线制作流程:
1.Excel to table
2.display X Y Data
3.Create TIN
4.生成DEM数据。
5.生成等高线。
是由这五个步骤完成的,那么怎么把五个GP工具直接塞进一个python脚本工具呢? 并且直接生成等高线。
注:本篇先以创建 TIN为例说明如何有.py脚本文件 制作成 GP工具,也就是下面所说要讲解的;
然后在将4、5步骤的工具生成DEM数据和生成等高线制作成一个python脚本工具。
arcgis根据经纬度xyz坐标点生成等高线
目的:也即是有 CreateTin.py这么一个脚本文件(往下面看有完整脚本),生成下面这个一个python工具:
通过创建脚本工具,可以将自己的 Python 脚本和功能转变为地理处理工具,这些工具的外观和操作都和系统地理处理工具相类似。创建后,脚本工具具有许多优势:
您创建的脚本工具会像系统工具一样成为地理处理的组成部分,您可以从搜索 或目录 窗口中打开它,可在模型构建器和 Python 窗口中使用它,还可以从其他脚本中调用它。
您可以将消息写入结果 窗口和进度对话框。
使用内置的文档工具,可以创建文档。
将脚本作为脚本工具运行时,arcpy 完全知道从哪个应用程序(如 ArcMap)调用该脚本。在应用程序中所做的设置(如 arcpy.env.overwriteOutput 和 arcpy.env.scratchWorkspace)都可从脚本工具中的 ArcPy 中获得。
要在自定义工具箱中创建脚本工具,需要以下三项:
脚本
自定义工具箱
脚本参数的精确定义
Python 工具箱
是完全用 Python 语言创建的地理处理工具箱。Python 工具箱及其所包含工具的外观、操作和运行方式与任何以其他方式创建的工具箱和工具相类似。Python 工具箱 (.pyt) 只是一个基于 ASCII 的文件,该文件定义了工具箱和一个或多个工具。
创建后,Python 工具箱中的工具具备以下优势:
通过创建 Python 工具箱,您可以利用您的 Python 知识来快速构建原型并创建功能完备的地理处理工具。
您所创建的工具会像系统工具一样成为地理处理的组成部分,您可以从搜索 或目录 窗口中打开它,可在模型构建器和 Python 窗口中使用它,还可以从脚本中调用它。
您可以将消息写入结果 窗口和进度对话框。
使用内置的文档工具,可以创建文档。
将脚本作为脚本工具运行时,arcpy 完全知道从哪个应用程序(如 ArcMap)调用该脚本。在应用程序中所做的设置(如 arcpy.env.overwriteOutput 和 arcpy.env.scratchWorkspace)都可从脚本工具中的 ArcPy 中获得。
注:在这里说明的意思是,本文说的讲解的有脚本.py文件制作成python脚本工具的制作;而不是制作python工具箱。
ArcGIS 9.0 中引入了脚本工具框架,该框架便于新用户创建基于 Python 的工具,但是,对于经验比较丰富的用户,其效率并不高。在脚本工具框架中,可执行以下操作:
通过向导定义参数。
创建处于工具箱中的验证代码。
以及分别创建和维护源脚本。
所有这些部分都是分离的,而且很难进行集中管理。
在 ArcGIS 10.1 中,引入了创建基于 Python 工具的第二种方法,即 Python 工具箱。在 Python 工具箱中,参数定义、验证代码和源代码都通过 Python 代码进行处理,因而,Python 工具的创建和维护更加容易。
对于具有 Python 经验的用户,Python 工具箱使您可以充分利用所掌握的 Python 技能,完全基于 Python 来方便地创建工具。如果您是 Python 新手,则更适合在自定义工具箱中创建工具,在自定义工具箱中,向导会逐步引导您完成脚本工具的必要部分。
如果您已经或计划在脚本工具中使用重要验证代码,您肯定会发现使用 Python 工具箱更为简单。
本文以 创建 TIN 为例,也就是使用
arcpy.CreateTin(out_tin, {spatial_reference}, {in_features}, {constrained_delaunay})
这个GP工具,先用python脚本,进行处理分析,然后实现将此py脚本成功运行,脚本名称为CreateTin.py文件。
代码比较简单,就不一一介绍了,全部代码在下面:
import arcpy
from arcpy import env
import os
arcpy.CheckOutExtension("3D")
env.workspace = r"D:\20200309\shujushouji\Pythonaddin\denggaoxian\Excel"
sss ='c610data.shp'
INPUTdata=r"D:\20200309\shujushouji\Pythonaddin\denggaoxian\Excel\New File Geodatabase.gdb\c610_layersstest"
INPUTdatalujing=os.path.split(INPUTdata)[0]
print ("His name is %s".format(INPUTdatalujing))
INPUTdataname=os.path.split(INPUTdata)[1]
arcpy.CreateTin_3d("{0}".format(INPUTdataname),"WGS_1984_UTM_Zone_48N.prj","{0} Shape.Z Mass_Points".format(sss),"CONSTRAINED_DELAUNAY")
接下来,我们需要修改CreateTin.py脚本文件使其能够接受用户通过ArcToolbox界面提供的动态输入参数。在IDLE中打开CreateTin.py文件。
你会看到工作空间路径和包含CreateTin的数据逗号分隔文本文件的路径都是硬编码处理的:也可以理解为在脚本中输入的绝对路径,硬编码限制了脚本的灵活性。如果数据集移动或者删除了,脚本也就无法运行。
除此以外,硬编码还会让脚本缺少针对不同输入和输出数据集要求的灵活性。
在下一步中,我们会移除这些硬编码,让脚本可满足动态输入参数要求。
env.workspace = r"D:\20200309\shujushouji\Pythonaddin\denggaoxian\Excel"
sss =‘c610data.shp’
INPUTdata=r"D:\20200309\shujushouji\Pythonaddin\denggaoxian\Excel\New File Geodatabase.gdb\c610_layersstest"
那么需要做的就是替换掉 这些绝对路径的,替换成GetParameterAsText()参数输入的。
接下来学习调用arcpy提供的GetParameterAsText()函数来接受用户提供的动态输入参数。如下所示,在try语句下添加以下脚本代码:
inputdata = arcpy.GetParameterAsText(0)
inputdataname =os.path.split(inputdata)[1]
outputFC = arcpy.GetParameterAsText(2)
你会看到我们上下两部分修改的,修改后完整的脚本如下。
#encoding:utf-8
import arcpy
from arcpy import env
import os
arcpy.CheckOutExtension("3D")
inputdata = arcpy.GetParameterAsText(0)
inputdataname =os.path.split(inputdata)[1]
arcpy.AddMessage("当前加载的数据的名称是: " + str(inputdataname) + "writen to feature class")
spatial_reference = arcpy.GetParameterAsText(1)
spatial_referenceCname =os.path.split(spatial_reference)[0]
arcpy.env.workspace=spatial_reference
arcpy.AddMessage("输出工作空间的路径 : " + str(spatial_reference) + " 的 feature class")
outputFC = arcpy.GetParameterAsText(2)
outputFCname =os.path.split(outputFC)[1]
arcpy.AddMessage("输出数据的名称是: " + str(outputFC) + " 的 feature class")
# env.workspace = r"D:\20200309\shujushouji\Pythonaddin\denggaoxian\Excel"
INPUTdata=r"D:\20200309\shujushouji\Pythonaddin\denggaoxian\Excel\New File Geodatabase.gdb\c610_layersstest"
INPUTdatalujing=os.path.split(INPUTdata)[0]
print ("His name is %s".format(INPUTdatalujing))
INPUTdataname=os.path.split(INPUTdata)[1]
arcpy.CreateTin_3d("{0}".format(outputFCname),"WGS_1984_UTM_Zone_48N.prj","{0} Shape.Z Mass_Points".format(inputdataname),"CONSTRAINED_DELAUNAY")
arcpy.AddMessage("当前程序运行结束,请查看结果")
那么到这里,我们的整个的脚本就修改完成了,接下来一起来看看如何在arcmap中进行创建Python工具做准备,并怎么添加对应的类型。
右键单击要在其中创建新工具箱的文件夹或地理数据库,然后单击新建 > 工具箱,即可创建自定义工具箱。
两个途径新建tbx工具箱,都需要选择在自己需要放置的对应的位置即可;
那么在我们的工具箱上直接就看到了,刚才新建的tbx工具箱:
右键属性,可以查看此工具箱对应的位置以及一些属性信息:
可以直接在catalong的对应文件路径上 New 然后新建 Toolbox即可,修改工具箱名称。
其实步骤和在工具箱中Add Toolbox 是一样的操作,如果后期需要在arcmap的toolbox进行 打开,可以在toolbox上直接 右键 Add Toolbox 打开即可。
注:此步骤,也就是把我们修改后的CreateTin.py文件,新增到我们新建的TestToolbox.tbx工具箱内的操作;
要创建脚本工具,可右键单击工具箱,然后单击添加 > 脚本。这将打开添加脚本 向导,它将引导您逐步完成脚本工具的创建过程。完成这些步骤后,您的工具箱将包含一个新的脚本工具。您可以随时右键单击脚本工具并选择属性来修改脚本工具的属性名称和数据类型。
具体实现
3、将脚本添加到刚刚创建的TestToolbox工具箱中。在ArcToolbox中,右键单击之前创建的TestToolbox工具箱,选择添加|脚本(Add|Script)。并在弹出添加脚本(Add Script)的对话框中填写脚本名称,标签以及描述信息,其中名称信息不能有空格以及特殊字符。
在下面对话框中进行显示参数设置,包括输入、输出要素类、工作空间。其中输入和工作空间为输入类型,输出TIN类参数为output类型。
这里小编一一截图,大家只需要把对应的修改后的CreateTin.py放到自己电脑的文件中,新增和设置参数即可。
上述这些完成后:点击完成(Finish)按钮。
如下图所示,一个新的脚本工具就会添加到TestToolbox工具箱中。
注:此处说的参数类型,也就是修改后的脚本中的 arcpy.GetParameterAsText(0/1/2等)与 python脚本新建时的对应关系;也即是其面的一张图中的Data Type应该如何选择和确定呢?
在这里插入图片描述
输入参数的显示名称后,通过单击数据类型单元格为参数选择一种数据类型,如下所示。
几乎所有工具都具有参数,可在工具对话框或脚本中设置参数值。执行工具时,会将参数值发送到该工具的源代码。工具将读取这些值,然后继续执行操作。
要了解有关参数的详细信息,请参阅了解脚本工具参数。
如果需要创建可接受多个值的参数,请选中多值复选框。如果需要创建复合数据类型(即可接受不同数据类型的参数),您可以选中多种数据类型。
还可以为每个参数设置其他属性,如之前所述及以下所示。
小编在这只是总结一些常用的基础入门的,如果有详细的需求,可以参考官网:
设置脚本工具参数
那么我们创建完成后,只需要运行工具即可
点击OK即可;
上图是小编的处理结果,大家可以自己尝试哈。
回归主题:那么如何一键创建等高线呢??
那么利用arcpy的这五个GP工具即可。 其中disaplay可以替换成 Make XY Event Layert替换:
1.Excel to table
2.display X Y Data
3.Create TIN
4.生成DEM数据。
5.生成等高线。
小编第一次转换的时候,稍微走了一些弯路,其中参考这两篇文章的部分内容,大家也可以参考学习下
https://www.jianshu.com/p/b032cd2b6ecf
https://blog.csdn.net/gislaozhang/article/details/80690090)