在ArcMap中通过Python编写自定义工具(Python Toolbox)实现点转线工具

news2025/3/9 20:12:15

文章目录

    • 一、需求
    • 二、实现过程
      • 2.1、创建Python工具箱(.pyt)
      • 2.2、使用catalog测试代码
      • 2.3、在ArcMap中使用工具
    • 三、测试

一、需求

通过插件的形式将点转线功能嵌入ArcMap界面,如何从零开始创建一个插件,包括按钮的添加、工具的实现以及用户界面的设计等。此外,如何处理输入参数,比如选择点要素、设置分组字段和排序字段,以及保存输出结果。

二、实现过程

在ArcMap中开发插件实现点转线功能,可以通过Python编写自定义工具(Python Toolbox)或使用Add-In插件。以下是一个完整的开发实例,基于 Python Toolbox 实现点转线工具,包含参数设置、工具逻辑和界面交互。

2.1、创建Python工具箱(.pyt)

创建一个名为 PointToLineTool.pyt 的文件,代码如下:

import arcpy
import pythonaddins

class Toolbox(object):
    def __init__(self):
        self.label = "PointToLineTool"
        self.alias = "CustomTools"
        self.tools = [PointsToLineTool]

class PointsToLineTool(object):
    def __init__(self):
        self.label = "PointToLineTool"
        self.description = "PointToLine group_field"
        self.canRunInBackground = False

    def getParameterInfo(self):
        param_input = arcpy.Parameter(
            name="input_points",
            displayName="pls input pointsfeature",
            datatype="DEFeatureClass",
            parameterType="Required",
            direction="Input"
        )
        param_input.filter.list = ["Point"]

        param_group_field = arcpy.Parameter(
            name="group_field",
            displayName="group_field",
            datatype="Field",
            parameterType="Required",
            direction="Input"
        )
        param_group_field.parameterDependencies = [param_input.name]


        param_sort_field = arcpy.Parameter(
            name="sort_field",
            displayName="sort field",
            datatype="Field",
            parameterType="Optional",
            direction="Input"
        )
        param_sort_field.parameterDependencies = [param_input.name]

        param_output = arcpy.Parameter(
            name="output_lines",
            displayName="output line_feature folder",
            datatype="DEFeatureClass",
            parameterType="Required",
            direction="Output"
        )

        return [param_input, param_group_field, param_sort_field, param_output]

    #def isLicensed(self):
        #return arcpy.CheckProduct("ArcInfo") == "Available"

    def updateParameters(self, parameters):
        if parameters[1].value:
            parameters[2].enabled = True
        else:
            parameters[2].enabled = False
        return

    def updateMessages(self, parameters):
        if parameters[1].value:
            field = parameters[1].valueAsText
            desc = arcpy.Describe(parameters[0].valueAsText)
            fields = desc.fields
            for f in fields:
                if f.name == field:
                    if f.type not in ["String", "Integer", "SmallInteger"]:
                        parameters[1].setErrorMessage("group_field format error")
        return

    def execute(self, parameters, messages):
        input_points = parameters[0].valueAsText
        group_field = parameters[1].valueAsText
        sort_field = parameters[2].valueAsText if parameters[2].value else None
        output_lines = parameters[3].valueAsText

        try:
            arcpy.PointsToLine_management(
                input_points,
                output_lines,
                group_field,
                sort_field
            )
            arcpy.AddMessage("successfully convert: {}".format(output_lines))
        except arcpy.ExecuteError as e:
            arcpy.AddError(arcpy.GetMessages(2))
        except Exception as e:
            arcpy.AddError("error: {}".format(str(e)))

2.2、使用catalog测试代码

pyt文件,鼠标右键选择check syntax
在这里插入图片描述

在这里插入图片描述

如果出现No Syntax Errors,说明pyt代码没问题,可以添加到arctools工具箱了。
在这里插入图片描述

2.3、在ArcMap中使用工具

  • 加载工具箱

打开ArcMap,右键点击目录窗口中的 工具箱 -> 添加工具箱 -> 选择PointToLineTool.pyt。

在这里插入图片描述
在这里插入图片描述

三、测试

工具将出现在工具箱列表中,双击运行。

在这里插入图片描述

界面操作:
在这里插入图片描述

输入点要素(必须是点图层)。

选择分组字段(例如每个线对应一个ID字段)。

可选排序字段(如时间或序号字段)。

指定输出线要素路径(如.shp或地理数据库中的要素类)。

在这里插入图片描述

在这里插入图片描述


坚持某种意义上也是一种能力…


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2312313.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

后智能体时代的LLM和Agent

文章目录 1. 关于AI重塑的哲学体系2. 关于AI大模型体系的认知3. 关于AI大模型体系的畅想4. 关于人和AI大模型体系的共处5. 写在最后 随着OpenAI、Deepseek、Manus等等智能体的爆火,人们茶前饭后、插科打诨的话题都离不开这些智能体,现状也正如《人民日报…

景联文科技:以精准数据标注赋能AI进化,构筑智能时代数据基石

在人工智能技术席卷全球的浪潮中,高质量数据已成为驱动AI模型进化的核心燃料。作为全球领先的AI数据服务解决方案提供商,景联文科技深耕数据标注领域多年,以技术为基、以专业为本,致力于为全球客户提供全场景、高精度、多模态的数…

嵌入式L6计算机网络

Telnet不加密 socket是应用层和下面的内核

华为鸿蒙系统全景解读:从内核设计到生态落地的技术革命

华为鸿蒙系统全景解读:从内核设计到生态落地的技术革命 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 文章目录 华为鸿蒙系统全景解读&#x…

八卡5090服务器首发亮相!

AI 人工智能领域热度居高不下。OpenAI 的 GPT - 4 凭强悍语言处理能力,在内容创作、智能客服等领域广泛应用。清华大学团队的 DeepSeek 大模型在深度学习训练优势突出,正促使各行业应用端算力需求向推理主导转变,呈爆发式增长 。 随着 DeepS…

基于SSM+Vue+uniapp的驾校预约管理小程序+LW示例

系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…

《用Python+PyGame开发双人生存游戏!源码解析+完整开发思路分享》

导语​ "你是否想过用Python开发一款可玩性高的双人合作游戏?本文将分享如何从零开始实现一款类《吸血鬼幸存者》的生存射击游戏!包含完整源码解析、角色系统设计、敌人AI逻辑等核心技术点,文末提供完整代码包下载!" 哈…

ArcGIS操作:13 生成最小外接矩阵

应用情景:筛选出屋面是否能放下12*60m的长方形,作为起降场候选点(一个不规则的形状内,判断是否能放下指定长宽的长方形) 1、面积初步筛选 Area ≥ 720 ㎡ 面积计算见 2、打开 ArcToolbox → Data Management Tools …

manus对比ChatGPT-Deep reaserch进行研究类学术相关数据分析!谁更胜一筹?

没有账号,只能挑选一个案例 一夜之间被这个用全英文介绍全华班出品的新爆款国产AI产品的小胖刷频。白天还没有切换语言的选项,晚上就加上了。简单看了看团队够成,使用很长实践的Monica创始人也在其中。逐渐可以理解,重心放在海外产…

Python —— pow()函数

一、示例1 # 计算 2 的 3 次幂 result1 pow(2, 3) print(result1) # 输出: 8# 计算 2.5 的 2 次幂 result2 pow(2.5, 2) print(result2) # 输出: 6.25 二、示例2 # 计算 (2 ** 3) % 5 result3 pow(2, 3, 5) print(result3) # 输出: 3 三、示例3 ntxt input("请输…

开发环境搭建-完善登录功能

一.完善登录功能 我们修改密码为md5中的格式,那么就需要修改数据库中的密码和将从前端获取到的密码转化成md5格式,然后进行比对。比对成功则登录成功,失败则禁止登录。 二.md5格式 使用DigestUtils工具类进行md5加密,调用md4Dig…

STM32G431RBT6--(3)片上外设及其关系

前边我们已经了解了STM32的内核,下面我们来介绍片上外设,对于这些外设,如果我们弄清楚一个单片机都有什么外设,弄清他们之间的关系,对于应用单片机有很大的帮助,我们以G431为例: 这个表格描述了…

docker 安装达梦数据库(离线)

docker安装达梦数据库,官网上已经下载不了docker版本的了,下面可通过百度网盘下载 通过网盘分享的文件:dm8_20240715_x86_rh6_rq_single.tar.zip 链接: https://pan.baidu.com/s/1_ejcs_bRLZpICf69mPdK2w?pwdszj9 提取码: szj9 上传到服务…

AI 驱动的软件测试革命:从自动化到智能化的进阶之路

🚀引言:软件测试的智能化转型浪潮 在数字化转型加速的今天,软件产品的迭代速度与复杂度呈指数级增长。传统软件测试依赖人工编写用例、执行测试的模式,已难以应对快速交付与高质量要求的双重挑战。人工智能技术的突破为测试领域注…

六轴传感器ICM-20608

ICM-20608-G是一个6轴传感器芯片,由3轴陀螺仪和3轴加速度计组成。陀螺仪可编程的满量程有:250,500,1000和2000度/秒。加速度计可编程的满量程有:2g,4g,8g和16g。学习Linux之SPI之前,…

TikTok Shop欧洲市场爆发,欧洲TikTok 运营网络专线成运营关键

TikTok在欧洲的影响力还在持续攀升,日前,TikTok发布了最新的欧盟执行和使用数据报告,报告中提到: 2024年7~12月期间,TikTok在欧盟地区的月活用户达1.591亿,较上一报告期(2024年10月发布&#xf…

专业工具,提供多种磁盘分区方案

随着时间的推移,电脑的磁盘空间往往会越来越紧张,许多人都经历过磁盘空间不足的困扰。虽然通过清理垃圾文件可以获得一定的改善,但随着文件和软件的增多,磁盘空间仍然可能显得捉襟见肘。在这种情况下,将其他磁盘的闲置…

你会测量管道液体流阻吗?西-魏斯巴赫方程(Darcy-Weisbach Equation)、Colebrook-White 方程帮你

测量管道液体流阻需要测量以下关键量: 需要测量的量 压力差(ΔP):管道入口和出口之间的压力差,通常通过压力传感器或差压计测量。流量(Q):流经管道的液体体积流量,可通…

SQL命令详解之多表查询(连接查询)

目录 1 简介 2 内连接查询 2.1 内连接语法 2.2 内连接练习 3 外连接查询 3.1 外连接语法 3.2 外连接练习 4 总结 1 简介 连接的本质就是把各个表中的记录都取出来依次匹配的组合加入结果集并返回给用户。我们把 t1 和 t2 两个表连接起来的过程如下图所示: …

导入 Excel 规则批量修改或删除 Excel 表格内容

我们前面介绍过按照规则批量修改 Excel 文档内容的操作,可以对大量的 Excel 文档按照一定的规则进行统一的修改,可以很好的解决我们批量修改 Excel 文档内容的需求。但是某些场景下,我们批量修改 Excel 文档内容的场景比较复杂,比…