通过Arcpy在ArcMap工具箱中添加脚本计算面图层的起终点坐标
关键词:
Arcpy,ArcMap Toolbox, Coordinates of Polygon
需求分析:
Arcmap中添加有三个图层:图层“GY乡级河道”(面图层)是全县13个乡镇全部的乡级河道,共计249条;图层“乡级河道polygon”(面图层)是其中某一个乡镇的乡级河道,有10条乡级河道,现在以此乡镇的10条乡级河道为例,求取这10个面要素的起终点坐标;图层“乡级河道polyline”是已经求好的这10条乡级河道的中心线,求取面图层的中心线的过程这里不再赘述。
因为面图层计算坐标时只能计算中心点的XY,而线图层可以计算起点、终点和中心点的XY,,所以必须先获得面图层的中心线,然后再计算中心线的起终点坐标。在本例中,即先求取“乡级河道polygon”的中心线“乡级河道polyline”,再计算其起终点坐标,即为所求乡级河道的起终点坐标。
预期结果是输出一个表格,包含TYBH(统一编号)、NAME(名称)、Xs(起点经度)、Ys(起点纬度)、Xe(终点经度)和Ye(终点纬度)等字段。现在“GY乡级河道”图层中有TYBH、XZQBM(行政区编码)和NAME字段,“乡级河道polygon”图层中有“NAME”字段和“Id”字段,“乡级河道polyline”图层中有“Id”字段,准备将计算结果集中到“乡级河道polyline”图层中。“乡级河道polyline”图层和“乡级河道polygon”图层可以通过字段“Id”关联,“乡级河道polygon”图层和“GY乡级河道”图层通过字段“NAME”关联,因为不同乡镇可能会有河道重名情况,即关联时会有多个相同匹配的情况,所以要先通过“XZQBM”字段筛选出这个选定乡镇的乡级河道(此乡镇的行政区编码是“32108404”),然后再进行关联。
| Arcmap中的三个图层 | ![]() |
| “乡级河道polyline”图层属性表 | ![]() |
| “乡级河道polygon”图层属性表 | ![]() |
| “GY乡级河道”图层属性表 | |
方法步骤:
1. 编写Arcpy脚本代码,保存为Python文件。
import arcpy
from arcpy import env
env.workspace="G:/GYcoor/GYCoor.gdb" line_table=arcpy.GetParameterAsText(0)
polygon_table=arcpy.GetParameterAsText(1)
gy_table=arcpy.GetParameterAsText(2)
xzqbmVal=arcpy.GetParameterAsText(3) arcpy.AddField_management(line_table,"NAME","TEXT")
arcpy.AddField_management(line_table,"TYBH","TEXT")
arcpy.AddField_management(line_table,"Xs","DOUBLE")
arcpy.AddField_management(line_table,"Ys","DOUBLE")
arcpy.AddField_management(line_table,"Xe","DOUBLE")
arcpy.AddField_management(line_table,"Ye","DOUBLE") arcpy.SelectLayerByAttribute_management(gy_table,"NEW_SELECTION","XZQBM='"+xzqbmVal+"'") arcpy.AddJoin_management(line_table,'id',polygon_table,'id',"KEEP_COMMON")
arcpy.CalculateField_management(line_table,'NAME',"!"+polygon_table+".NAME!","PYTHON")
arcpy.RemoveJoin_management(line_table) arcpy.AddJoin_management(line_table,'NAME',gy_table,'NAME',"KEEP_COMMON")
arcpy.CalculateField_management(line_table,'TYBH',"!"+gy_table+".TYBH!","PYTHON")
arcpy.RemoveJoin_management(line_table) arcpy.CalculateField_management(line_table,"Xs","!SHAPE.FIRSTPOINT.X!","PYTHON_9.3")
arcpy.CalculateField_management(line_table,"Ys","!SHAPE.FIRSTPOINT.Y!","PYTHON_9.3")
arcpy.CalculateField_management(line_table,"Xe","!SHAPE.LASTPOINT.X!","PYTHON_9.3")
arcpy.CalculateField_management(line_table,"Ye","!SHAPE.LASTPOINT.Y!","PYTHON_9.3")
2. 在ArcMap工具箱中添加脚本,并做好相关设置。


3. 打开工具,输入必要参数并运行脚本。

4. 工具执行成功,计算结果集中到“乡级河道polyline”图层中,该图层的属性表如下图所示,导出该属性表即可得到所需的表格。

遗留问题:
ArcMap计算经纬度时的单位默认是“米”,而不是常规的“度”,但是因为在编写Arcpy脚本过程中没有找到正确的方式来指定所需的经纬度单位,所以还是采用了默认的单位“米”。补救方法是在工具执行成功后,在“乡级河道polyline”图层的属性表中对4个经纬度字段再进行Calculate Geometry,重新计算得出符合要求的数值结果。

通过Arcpy在ArcMap工具箱中添加脚本计算面图层的起终点坐标的更多相关文章
- FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件
场景 FastReport .NET 2019是一款适用于Windows Forms, ASP.NET和MVC框架的功能齐全的报表分析解决方案.可用在Microsoft Visual Studio 2 ...
- VS工具箱中添加DevExpress控件
关闭所有VS进程: ①使用控制台进入DevExpress安装目录: D:\DevExpress\Components\Tools\ ②添加DevExpress控件:ToolboxCreator.exe ...
- Visual Studio 2017报表RDLC设计器与工具箱中Report Viewer问题
原文:VS2017入门 RDLC入门之01 本系列所有内容为网络收集转载,版权为原作者所有. VS2017初始安装后和VS2015一样,都没有ReportDesigner/ReportViewer R ...
- 在html中添加script脚本的方法和注意事项
在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script& ...
- ArcMap图层属性表中添加图片
一看标题是不是有点懵?懵就对了!刚接触到的时候我也有点懵,属性表不是都是文本啊数字啊之类的格式,怎么还可以存图片,下面就带大家来看看吧! 一.关于图层入库问题 图层进入数据库和图层以shp格式存储时, ...
- 定时执行自动化脚本-(二)ant发送邮件及邮件中添加附件
发送邮件及邮件添加附件均需要用java来实现 1.idea创建一个maven的java项目,目录结构如下 2.pom.xml文件添加依赖的javax.mail <dependencies> ...
- VSCode调试Html中的脚本 vscode前端常用插件推荐,搭建JQuery、Vue等开发环境 vsCode 添加浏览器调试和js调试的方法总结 VS Code - Debugger for Chrome调试js
一.背景 使用Visual Studio Code写了一个简单的Html页面,想调试下其中script标签里的javascript代码,网上查了一通,基本都是复制粘贴或者大同小异的文章,就是要安装De ...
- SQLServer 事务复制中使用脚本添加某个对象的发布
原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...
- 在页面中添加两个 <select> 标签,用来显示年份和月份;同时添加两个 <ul> 标签,一个用来显示星期,另一个用来显示日期 在 JavaScript 脚本中动态添加年份和月份,获取当前日期的年份
查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 Date 对象,在页面上显示一个万年历.选择不同的年份和月份,在页面中显示当前月的日历 实现思路: 在页面中添加两个 <s ...
随机推荐
- Roslyn还出现这么低级的错误,不应该呀!
前几天对Dora.Interception作了简单的重构,想提供C#脚本来定义Interception Policy,毫无疑问微软提供的编译平台Roslyn使C#脚本化提供了支持.但是没有想到随便尝试 ...
- 安装与配置Flutter开发环境
这篇博客我们介绍了Flutter,并且对比了H5,React Native,Flutter. 由于Flutter是跨平台的开发框架,开发一次可以同时运行在Android和iOS上面,所以我们开发时最好 ...
- [Swift]LeetCode169. 求众数 | Majority Element
Given an array of size n, find the majority element. The majority element is the element that appear ...
- 接口平台经常报server internal error(500)错误
查询日志,发现连接mysql报错,web页面显示server internal error(500) 解决方法:重启mysql服务器 systemctl start mysqld #安装mysql # ...
- [树莓派]启用root账户
树莓派使用的linux是debian系统,所以树莓派启用root和debian是相同的. debian里root账户默认没有密码,但账户锁定. 当需要root权限时,由默认账户经由sudo执行,Ras ...
- 陕西省网络空间安全技术大赛部分题目writeup
签到-欢迎来到CSTC2017 10 欢迎来到CSTC2017 ZmxhZ3tXZWlTdW9GeXVfQmllTGFuZ30= Base64解密:flag{WeiSuoFyu_BieLang} 种棵 ...
- asp.net mvc中action接收客户端发送过来的html片段
出于安全的考虑,默认情况下,如果从客户端发送过来的数据中直接包括了HTML内容,ASP.NET会自动启动保护措施,这当然是一个比较好的设计,只不过在某种情况下我们真的需要获取这个值,那我们应该怎么办呢 ...
- 『最短Hamilton路径 状态压缩DP』
状压DP入门 最短Hamilton路径 Description 给定一张 n(n≤20) 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径. Hamil ...
- Ocelot + Consul实践
关于Consul(https://www.consul.io)是一个分布式,高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla ...
- C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数
数字在已排序数组中出现的次数 提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&t ...


