Arcpy入门学习笔记(二):脚本工具

Arcpy入门学习笔记(二):脚本工具

主要介绍Arcpy脚本工具制作

Arcpy语法速查

1、ArcGIS工具界面的【工具帮助】

image-20240419235458653

image-20240419235513830

2、地理处理的【结果】会话窗口,右键工具提供的“【复制为Python代码片段】

image-20240419235859687

image-20240419235944587

3、ArcGIS模型【导出至Python脚本文件】

image-20240420000844887

Arcpy脚本常用代码

会经常使用到的代码或代码块

包的导入

# 导入sys模块,设置Python解释器的默认编码为UTF-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')

# 导入ArcPy模块
import arcpy

# 导入NumPy库
import numpy as np

# 导入Python标准库中的os模块,用于操作文件路径
import os

# 导入datetime类,用于处理日期和时间
from datetime import datetime

# 从ArcPy空间分析模块导入所有函数和类
from arcpy.sa import *

# 导入xlwt模块,用于创建和操作Excel文件(xls格式)
import xlwt

获取工具箱参数

# 获取参数
layer = arcpy.GetParameter(0)

# 获取参数并读取为Unicode
out_path = arcpy.GetParameterAsText(1)

# 获取参数并转为整数
num = int(arcpy.GetParameterAsText(2)) 

# 获取参数并转为字符串
out_path = str(arcpy.GetParameterAsText(3)) 

# 在参数获取方法相同时,可批量获取
args = tuple(arcpy.GetParameterAsText(i) for i in range(arcpy.GetArgumentCount()))
Test(*args)

环境设置

#!/usr/bin/env python
# coding=utf-8

# 确认分析模块是否可用
arcpy.CheckOutExtension("spatial")

# 设置工作空间
arcpy.env.workspace = out_path

# 设置并行处理因子为0,因为有的学习版用不了这个功能
arcpy.env.parallelProcessingFactor = '0'

# 设置输出可覆盖文件
arcpy.env.overwriteOutput = "True"

工具箱输出

# 在工具箱输出栏中打印信息
arcpy.AddMessage("ok")

脚本工具制作

本部分较为繁琐,可粗略看看

准备好py文件

比如下面这个,先在Pycharm中进行测试,可以根据指定数量生成圆的个数,每个圆的半径依次增加50m

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-21 11:41

import sys
reload(sys)
sys.setdefaultencoding('utf8')
import arcpy
import os
import math

def create_shapefiles(num, out_path):
    # 设置坐标系为WGS84_UTM_50N
    spatial_reference = arcpy.SpatialReference(32650)  # WGS84_UTM_50N的WKID为32650

    # 根据num循环创建矢量文件
    for i in range(1, num + 1):
        # 创建要素类名称和路径
        circle_name = "Circle_{}m".format(i * 50)
        circle_path = os.path.join(out_path, circle_name + ".shp")

        # 创建圆
        arcpy.management.CreateFeatureclass(os.path.dirname(circle_path), circle_name, "POLYGON", spatial_reference=spatial_reference)
        circle_cursor = arcpy.da.InsertCursor(circle_path, ["SHAPE@"])
        circle = arcpy.Point()
        circle_geometry = arcpy.Array()
        for angle in range(0, 361, 10):
            circle.X = 50 * i * math.cos(math.radians(angle))  # 半径为50*i
            circle.Y = 50 * i * math.sin(math.radians(angle))
            circle_geometry.add(circle)
        circle_geometry.add(circle_geometry.getObject(0))  # 添加起始点以闭合圆
        circle_cursor.insertRow([arcpy.Polygon(circle_geometry)])
        del circle_cursor

if __name__ == "__main__":
    num = 2
    out_path = r'G:\MyTestProject\arcpy2_test\data'

    arcpy.CheckOutExtension("spatial")
    arcpy.env.parallelProcessingFactor = '0'
    arcpy.env.overwriteOutput = "True"
    arcpy.env.workspace = out_path

    create_shapefiles(num, out_path)

    arcpy.AddMessage(num)
    arcpy.AddMessage(out_path)

在Pycharm中运行结果打开如下:

image-20240421130358309

测试没问题之后,将最后一段改掉,从面板获取参数,并将代码中的中文注释都删掉或者改成英文注释,不然会有一些离谱的bug,修改后准备的导入脚本的代码如下:

#!/usr/bin/env python
# coding=utf-8
# @Time : 2024-04-21 11:41

import sys
reload(sys)
sys.setdefaultencoding('utf8')
import arcpy
import os
import math

def create_shapefiles(num, out_path):
    spatial_reference = arcpy.SpatialReference(32650)  # WGS84_UTM_50N的WKID为32650

    for i in range(1, num + 1):
        circle_name = "Circle_{}m".format(i * 50)
        circle_path = os.path.join(out_path, circle_name + ".shp")

        arcpy.management.CreateFeatureclass(os.path.dirname(circle_path), circle_name, "POLYGON", spatial_reference=spatial_reference)
        circle_cursor = arcpy.da.InsertCursor(circle_path, ["SHAPE@"])
        circle = arcpy.Point()
        circle_geometry = arcpy.Array()
        for angle in range(0, 361, 10):
            circle.X = 50 * i * math.cos(math.radians(angle))
            circle.Y = 50 * i * math.sin(math.radians(angle))
            circle_geometry.add(circle)
        circle_geometry.add(circle_geometry.getObject(0))
        circle_cursor.insertRow([arcpy.Polygon(circle_geometry)])
        del circle_cursor

if __name__ == "__main__":
    # num = 2
    # out_path = r'G:\MyTestProject\arcpy2_test\data'
    num = int(arcpy.GetParameterAsText(0))
    out_path = str(arcpy.GetParameterAsText(1))

    arcpy.CheckOutExtension("spatial")
    arcpy.env.parallelProcessingFactor = '0'
    arcpy.env.overwriteOutput = "True"
    arcpy.env.workspace = out_path

    create_shapefiles(num, out_path)

    arcpy.AddMessage(num)
    arcpy.AddMessage(out_path)

创建工具

创建好一个工具箱后,在其中创建工具集,并在工具集中添加脚本

image-20240421130946332

修改名称和标签,存储为相对路径(对应的地图文档属性最好也提前设置为相对路径,在【文件】【地图文档属性】【路径名】处进行勾选)

image-20240421131053202

导入脚本文件所在位置

image-20240421131411366

设置参数,一个为“圆的数量”,对应数据类型为长整型;一个为“输出文件夹”,对应数据类型为文件夹

image-20240421131900538

右键打开工具

image-20240421132218453

初步使用可行

image-20240422001014508

脚本工具各功能详解

脚本右键功能

image-20240421133114511

【属性】中的【常规】

image-20240421133327100

【属性】中的【源】

image-20240421133508006

【属性】中的【参数】

image-20240421134022597

【属性】中的【验证】

image-20240421134315206

修改默认编辑和调试

在ArcGIS菜单栏中【地理处理选项】中,将【编辑器】和【调试程序】换做pycharm所在位置,之后即可在脚本右键【编辑】快速在pycharm中打开对应文件(这个根据个人需要设置)

D:\py\Pycharm\bin\pycharm64.exe

image-20240421115026617

总结

脚本工具先自己有个数就行,而且在Pycharm中可以正常运行的工具转为脚本工具可能会有一些奇奇怪怪的错误,最好学一些Arcpy基础之后再用,边学边用就懂了;

其次就是在脚本工具中,尽量不要使用中文,包括注释

相关推荐

  1. jni入门学习 CMakeLists脚本

    2024-04-23 10:00:05       18 阅读
  2. 阿里云计算之linux入门命令学习笔记

    2024-04-23 10:00:05       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-23 10:00:05       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-23 10:00:05       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-23 10:00:05       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-23 10:00:05       20 阅读

热门阅读

  1. STM32 ST-LINK

    2024-04-23 10:00:05       50 阅读
  2. QML与C++交互

    2024-04-23 10:00:05       17 阅读
  3. 每日一题:Spring MVC 的执行流程是什么❓

    2024-04-23 10:00:05       15 阅读
  4. 【LeetCode热题100】【图论】课程表

    2024-04-23 10:00:05       40 阅读
  5. Linux bond0 配置方法

    2024-04-23 10:00:05       14 阅读
  6. 【C++提高】算法

    2024-04-23 10:00:05       12 阅读
  7. 7-17 KMP模式匹配算法

    2024-04-23 10:00:05       11 阅读
  8. rabbitmq 之 无法自动创建队列的问题

    2024-04-23 10:00:05       15 阅读
  9. pandas

    2024-04-23 10:00:05       13 阅读