关键词:

  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. 时时监听input内容的改变

    心得:我们都知道input有一个change事件,但是是在input元素失去焦点的时候发生,不能时时的监听input内容的改变. 刚开始的时候我是想用setInterval设置计时器的原理定时监听in ...

  2. JS关于Date函数的格式化输出

    // 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...

  3. [Swift]LeetCode236. 二叉树的最近公共祖先 | Lowest Common Ancestor of a Binary Tree

    Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According ...

  4. [Swift]LeetCode395. 至少有K个重复字符的最长子串 | Longest Substring with At Least K Repeating Characters

    Find the length of the longest substring T of a given string (consists of lowercase letters only) su ...

  5. HBase之CF持久化系列(续2)

    正如上篇博文所说,在本节我将为大家带来StoreFlusher.finalizeWriter..如果大家没有看过我的上篇博文<HBase之CF持久化系列(续1)>,那我希望大家还是回去看一 ...

  6. Django+Bootstrap+Mysql 搭建个人博客(四)

    4.1.博客分类 (1)blog_tags.py @register.simple_tag def get_categories(): return Category.objects.all() @r ...

  7. BBS论坛(三十三)

    33.celery实现邮件异步发送 (1)task.py pip install celery redis from celery import Celery from flask import Fl ...

  8. Javascript reduce方法

    reduce方法接收一个函数作为累加器,数组中的每个值(从左至右)开始缩减,最终计算为一个值 注意:reduce()对于空数组是不会执行回调函数 语法: array.reduce(function(t ...

  9. .NET Core实战项目之CMS 第七章 设计篇-用户权限极简设计全过程

    写在前面 这篇我们对用户权限进行极简设计并保留其扩展性.首先很感谢大家的阅读,前面六章我带着大家快速入门了ASP.NET Core.ASP.NET Core的启动过程源码解析及配置文件的加载过程源码解 ...

  10. requirejs、vue、vuex、vue-route的结合使用,您认为可行吗?

    在五一节之前和一网友讨论前端技术时,对方提到vue.vue-route如果配合requirejs应用.当时的我没有想得很明白,也没能这位网友一个准确的回复,但我许诺于他五一研究后给他一个回复.本是一天 ...