关键词:

  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工具箱中添加脚本计算面图层的起终点坐标的更多相关文章

  1. FastReport安装包下载、安装、去除使用限制以及工具箱中添加控件

    场景 FastReport .NET 2019是一款适用于Windows Forms, ASP.NET和MVC框架的功能齐全的报表分析解决方案.可用在Microsoft Visual Studio 2 ...

  2. VS工具箱中添加DevExpress控件

    关闭所有VS进程: ①使用控制台进入DevExpress安装目录: D:\DevExpress\Components\Tools\ ②添加DevExpress控件:ToolboxCreator.exe ...

  3. Visual Studio 2017报表RDLC设计器与工具箱中Report Viewer问题

    原文:VS2017入门 RDLC入门之01 本系列所有内容为网络收集转载,版权为原作者所有. VS2017初始安装后和VS2015一样,都没有ReportDesigner/ReportViewer R ...

  4. 在html中添加script脚本的方法和注意事项

    在html中添加script脚本有两种方法,直接将javascript代码添加到html中与添加外部js文件,这两种方法都比较常用,大家可以根据自己需要自由选择 在html中添加<script& ...

  5. ArcMap图层属性表中添加图片

    一看标题是不是有点懵?懵就对了!刚接触到的时候我也有点懵,属性表不是都是文本啊数字啊之类的格式,怎么还可以存图片,下面就带大家来看看吧! 一.关于图层入库问题 图层进入数据库和图层以shp格式存储时, ...

  6. 定时执行自动化脚本-(二)ant发送邮件及邮件中添加附件

    发送邮件及邮件添加附件均需要用java来实现 1.idea创建一个maven的java项目,目录结构如下 2.pom.xml文件添加依赖的javax.mail <dependencies> ...

  7. VSCode调试Html中的脚本 vscode前端常用插件推荐,搭建JQuery、Vue等开发环境 vsCode 添加浏览器调试和js调试的方法总结 VS Code - Debugger for Chrome调试js

    一.背景 使用Visual Studio Code写了一个简单的Html页面,想调试下其中script标签里的javascript代码,网上查了一通,基本都是复制粘贴或者大同小异的文章,就是要安装De ...

  8. SQLServer 事务复制中使用脚本添加某个对象的发布

    原文:SQLServer 事务复制中使用脚本添加某个对象的发布 -- use [发布库] --添加表:创建项目并将其添加到发布中 exec sp_addarticle @publication = N ...

  9. 在页面中添加两个 <select> 标签,用来显示年份和月份;同时添加两个 <ul> 标签,一个用来显示星期,另一个用来显示日期 在 JavaScript 脚本中动态添加年份和月份,获取当前日期的年份

    查看本章节 查看作业目录 需求说明: 使用 JavaScript 中的 Date 对象,在页面上显示一个万年历.选择不同的年份和月份,在页面中显示当前月的日历 实现思路: 在页面中添加两个 <s ...

随机推荐

  1. [Swift]LeetCode14. 最长公共前缀 | Longest Common Prefix

    Write a function to find the longest common prefix string amongst an array of strings. If there is n ...

  2. [Swift]LeetCode406. 根据身高重建队列 | Queue Reconstruction by Height

    Suppose you have a random list of people standing in a queue. Each person is described by a pair of ...

  3. [Swift]LeetCode476. 数字的补数 | Number Complement

    Given a positive integer, output its complement number. The complement strategy is to flip the bits ...

  4. [Swift]LeetCode835. 图像重叠 | Image Overlap

    Two images A and B are given, represented as binary, square matrices of the same size.  (A binary ma ...

  5. [Swift]LeetCode1000. 合并石头的最低成本 | Minimum Cost to Merge Stones

    There are N piles of stones arranged in a row.  The i-th pile has stones[i] stones. A move consists ...

  6. [Swift]LeetCode1010. 总持续时间可被 60 整除的歌曲 | Pairs of Songs With Total Durations Divisible by 60

    In a list of songs, the i-th song has a duration of time[i] seconds. Return the number of pairs of s ...

  7. POI生成EXCEL文件

    POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...

  8. scala的input

    获取用户输入的信息,一般使用 input 函数,但是 scala 里面是没有 input 这个方法的,为了获取控制台的输入操作, scala 定义的方法为: val Inputcontent = Co ...

  9. python传入不确定个数参数

    Python3自带的一个函数为 zip ,使用方式如下: In: print zip([1, 2],[3, 4]) Out: [(1, 3), (2, 4)] In: print zip([1, 2] ...

  10. 死磕 java集合之WeakHashMap源码分析

    欢迎关注我的公众号"彤哥读源码",查看更多源码系列文章, 与彤哥一起畅游源码的海洋. 简介 WeakHashMap是一种弱引用map,内部的key会存储为弱引用,当jvm gc的时 ...