zoukankan      html  css  js  c++  java
  • 通过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文件。

     1 import arcpy
     2 from arcpy import env
     3 env.workspace="G:/GYcoor/GYCoor.gdb"
     4 
     5 line_table=arcpy.GetParameterAsText(0)
     6 polygon_table=arcpy.GetParameterAsText(1)
     7 gy_table=arcpy.GetParameterAsText(2)
     8 xzqbmVal=arcpy.GetParameterAsText(3)
     9 
    10 arcpy.AddField_management(line_table,"NAME","TEXT")
    11 arcpy.AddField_management(line_table,"TYBH","TEXT")
    12 arcpy.AddField_management(line_table,"Xs","DOUBLE")
    13 arcpy.AddField_management(line_table,"Ys","DOUBLE")
    14 arcpy.AddField_management(line_table,"Xe","DOUBLE")
    15 arcpy.AddField_management(line_table,"Ye","DOUBLE")
    16 
    17 arcpy.SelectLayerByAttribute_management(gy_table,"NEW_SELECTION","XZQBM='"+xzqbmVal+"'")
    18 
    19 arcpy.AddJoin_management(line_table,'id',polygon_table,'id',"KEEP_COMMON")
    20 arcpy.CalculateField_management(line_table,'NAME',"!"+polygon_table+".NAME!","PYTHON")
    21 arcpy.RemoveJoin_management(line_table)
    22 
    23 arcpy.AddJoin_management(line_table,'NAME',gy_table,'NAME',"KEEP_COMMON")
    24 arcpy.CalculateField_management(line_table,'TYBH',"!"+gy_table+".TYBH!","PYTHON")
    25 arcpy.RemoveJoin_management(line_table)
    26 
    27 arcpy.CalculateField_management(line_table,"Xs","!SHAPE.FIRSTPOINT.X!","PYTHON_9.3")
    28 arcpy.CalculateField_management(line_table,"Ys","!SHAPE.FIRSTPOINT.Y!","PYTHON_9.3")
    29 arcpy.CalculateField_management(line_table,"Xe","!SHAPE.LASTPOINT.X!","PYTHON_9.3")
    30 arcpy.CalculateField_management(line_table,"Ye","!SHAPE.LASTPOINT.Y!","PYTHON_9.3")

     2. 在ArcMap工具箱中添加脚本,并做好相关设置。

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

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

    遗留问题:

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

  • 相关阅读:
    Linux忘了root的密码怎么办
    缩略图的实现
    ASP.NET程序编写注意 (转载)
    太极拳
    Linux系统管理技巧大荟萃
    茶经(转载)
    datagrid的显示控制
    太极功
    Linux下硬盘分区详解
    Tomcat4.0中文问题简单解决方法
  • 原文地址:https://www.cnblogs.com/myfgis/p/5985922.html
Copyright © 2011-2022 走看看