通过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 ...
随机推荐
- ASP.NET WebApi OWIN 实现 OAuth 2.0(自定义获取 Token)
相关文章:ASP.NET WebApi OWIN 实现 OAuth 2.0 之前的项目实现,Token 放在请求头的 Headers 里面,类似于这样: Accept: application/jso ...
- 高级Java面试总结3
1,java堆,分新生代老年代,新生代有Eden,from surviver,to surviver三个空间,堆被所有线程共.eden内存不足时,发生一次minor GC,会把from survivo ...
- 开源播放器 ijkplayer (六) :Android 下使用 ijkplayer 异常处理思路
一. java.lang.IllegalStateException: mpjni: setOptionLong: null mp 根据已查到的资料看,目前是ijk内部的问题,只能通过try& ...
- Java开发快速上手
Java开发快速上手 前言 1.我的大学 2.对初学者的建议 3.大牛的三大特点 4.与他人的差距 第一章 了解Java开发语言 前言 基础常识 1.1 什么是Java 1.1.1 跨平台性 1.2 ...
- [Swift]LeetCode241. 为运算表达式设计优先级 | Different Ways to Add Parentheses
Given a string of numbers and operators, return all possible results from computing all the differen ...
- [Swift]LeetCode365. 水壶问题 | Water and Jug Problem
You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...
- [Swift]LeetCode815. 公交路线 | Bus Routes
We have a list of bus routes. Each routes[i]is a bus route that the i-th bus repeats forever. For ex ...
- [Abp 源码分析]十七、ASP.NET Core 集成
0. 简介 整个 Abp 框架最为核心的除了 Abp 库之外,其次就是 Abp.AspNetCore 库了.虽然 Abp 本身是可以用于控制台程序的,不过那样的话 Abp 就基本没什么用,还是需要集合 ...
- 又拍云 API 使用的那些小事
又拍云提供了丰富的 API 调用,为了减少用户在初次接入时可能会遇到的坑”,本文将对又拍云常用的 API 使用方法做个简单的梳理,力求让业务接入变得更简单,更高效. 目前我们的 API 主要有四大类, ...
- 深入解析 H.265 编码模式,带你了解Apple全面推进H.265的原因
今天我们聊聊视频编码.视频文件亘古以来存在一个矛盾:高清画质和视频体积的冲突,相同编码标准下,视频更高清,视频体积更大.因此,应用更先进的视频编码标准,降低视频体积,可以大幅降低网站的流量消耗. 目前 ...


