Python基于Excel生成矢量图层及属性表信息:ArcPy

打印 上一主题 下一主题

主题 856|帖子 856|积分 2568

  本文先容基于Python中ArcPy模块,读取Excel表格数据并生成带有属性表矢量要素图层,同时配置该图层的坐标系的方法。
1 任务需求

  首先,我们来明确一下本文所需实现的需求。
  现有一个记录北京市部分PM2.5浓度监测站点信息的Excel表格数据,格式为.xls;文件内包罗站点编号、X与Y坐标、站点名称等四列数据,部分数据如下所示。

  我们须要将该表格文件中所记录的全部站点信息导入到Python中,并将全部站点创建为一个点要素的矢量图层;别的,须要同时可以指定该矢量图层的投影坐标系,并将表格文件中的四列信息作为矢量图层属性表的字段与内容
2 代码实现

  接下来,我们就基于Python中ArcPy模块,进行详细代码的撰写与先容。
  首先,须要说明的是:当初在编写代码的时间,为了方便实行,所以希望代码后期可以在ArcMap中直接通过工具箱运行,即用到Python程序脚本新建工具箱与自界说工具的方法;因此,代码中对于一些须要初始界说的变量,都用到了arcpy.GetParameterAsText()函数。大家如果只是希望在IDLE中运行代码,那么直接对这些变量进行具体赋值即可。关于Python程序脚本新建工具箱与自界说工具,大家可以检察ArcMap将Python写的代码转为工具箱与自界说工具详细相识。
  上面提到须要初始界说的变量一共有四个,其中arcpy.env.workspace参数表现当前工作空间,excel_path参数表现存储有北京市PM2.5浓度监测站点信息的Excel数据文件,spatial_reference_txt参数表现须要对站点矢量数据进行投影的坐标系类型(在本文中我们以“WGS 1984 UTM Zone 50N”投影为例),shapefile_name参数表现投影后站点矢量数据的具体文件。
  1. # -*- coding: cp936 -*-
  2. # @author: ChuTianjia
  3. import xlrd
  4. import arcpy
  5. arcpy.env.workspace=arcpy.GetParameterAsText(0)
  6. excel_path=arcpy.GetParameterAsText(1) # 站点信息表格文件
  7. shapefile_name=arcpy.GetParameterAsText(3) # 需要生成的矢量要素的路径与名称
  8. file_data=xlrd.open_workbook(excel_path)
  9. sheet_data=file_data.sheets()[0]
  10. sheet_row_num=sheet_data.nrows
  11. point_geometry_list=[]
  12. point_object=arcpy.Point()
  13. # Read Spatial Coordinate Information
  14. spatial_reference_txt=arcpy.GetParameterAsText(2) # 指定投影坐标系
  15. spatial_reference=arcpy.SpatialReference()
  16. spatial_reference.loadFromString(spatial_reference_txt)
  17. # Import the Coordinates of Each Point
  18. for i in range(1,sheet_row_num):
  19.     x=sheet_data.row(i)[1].value
  20.     y=sheet_data.row(i)[2].value
  21.     point_object.X=float(x)
  22.     point_object.Y=float(y)
  23.     point_geometry=arcpy.PointGeometry(point_object,spatial_reference)
  24.     point_geometry_list.append(point_geometry)
  25. arcpy.CopyFeatures_management(point_geometry_list,shapefile_name)
  26. # Import the Filed Information
  27. field_list=["X","Y","ID_Own","Name"]
  28. arcpy.AddField_management(shapefile_name,field_list[0],"FLOAT")
  29. arcpy.AddField_management(shapefile_name,field_list[1],"FLOAT")
  30. arcpy.AddField_management(shapefile_name,field_list[2],"SHORT")
  31. arcpy.AddField_management(shapefile_name,field_list[3],"TEXT")
  32. with arcpy.da.UpdateCursor(shapefile_name,field_list) as cursor:
  33.     n=1
  34.     for row in cursor:
  35.         row[0]=sheet_data.row(n)[1].value
  36.         row[1]=sheet_data.row(n)[2].value
  37.         row[2]=sheet_data.row(n)[0].value
  38.         row[3]=sheet_data.row(n)[3].value
  39.         cursor.updateRow(row)
  40.         n+=1
复制代码
3 运行结果

  实行上述代码,即可得到包罗有表格文件中所列全部站点的点要素矢量图层文件,且其属性表中包罗了原有表格文件中全部列所对应的字段与内容。

  检察该图层属性,可以看到其已经具有了我们在代码中所指定的投影坐标系。

  至此,大功告成。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表