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

本文介绍基于PythonArcPy模块,读取Excel 表格数据并生成带有属性表矢量要素图层 ,同时配置该图层的坐标系的方法。

1 任务需求

首先,我们来明确一下本文所需实现的需求。

现有一个记录北京市部分PM2.5浓度监测站点 信息的Excel 表格数据,格式为.xls;文件内包含站点编号、XY坐标、站点名称等四列数据,部分数据如下所示。

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

2 代码实现

接下来,我们就基于PythonArcPy模块,进行详细代码的撰写与介绍。

首先,需要说明的是:当初在编写代码的时候,为了方便执行,所以希望代码后期可以在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参数表示投影后站点矢量数据的具体文件。

python 复制代码
# -*- coding: cp936 -*-
# @author: ChuTianjia

import xlrd
import arcpy

arcpy.env.workspace=arcpy.GetParameterAsText(0)
excel_path=arcpy.GetParameterAsText(1) # 站点信息表格文件
shapefile_name=arcpy.GetParameterAsText(3) # 需要生成的矢量要素的路径与名称

file_data=xlrd.open_workbook(excel_path)
sheet_data=file_data.sheets()[0]
sheet_row_num=sheet_data.nrows

point_geometry_list=[]
point_object=arcpy.Point()

# Read Spatial Coordinate Information
spatial_reference_txt=arcpy.GetParameterAsText(2) # 指定投影坐标系
spatial_reference=arcpy.SpatialReference()
spatial_reference.loadFromString(spatial_reference_txt)

# Import the Coordinates of Each Point
for i in range(1,sheet_row_num):
    x=sheet_data.row(i)[1].value
    y=sheet_data.row(i)[2].value
    point_object.X=float(x)
    point_object.Y=float(y)
    point_geometry=arcpy.PointGeometry(point_object,spatial_reference)
    point_geometry_list.append(point_geometry)

arcpy.CopyFeatures_management(point_geometry_list,shapefile_name)

# Import the Filed Information
field_list=["X","Y","ID_Own","Name"]
arcpy.AddField_management(shapefile_name,field_list[0],"FLOAT")
arcpy.AddField_management(shapefile_name,field_list[1],"FLOAT")
arcpy.AddField_management(shapefile_name,field_list[2],"SHORT")
arcpy.AddField_management(shapefile_name,field_list[3],"TEXT")

with arcpy.da.UpdateCursor(shapefile_name,field_list) as cursor:
    n=1
    for row in cursor:
        row[0]=sheet_data.row(n)[1].value
        row[1]=sheet_data.row(n)[2].value
        row[2]=sheet_data.row(n)[0].value
        row[3]=sheet_data.row(n)[3].value
        cursor.updateRow(row)
        n+=1

3 运行结果

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

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

至此,大功告成。

相关推荐
小鹿( ﹡ˆoˆ﹡ )2 分钟前
深入探索 Seaborn:高级绘图的艺术与实践
python·信息可视化
hummhumm2 分钟前
Oracle 第29章:Oracle数据库未来展望
java·开发语言·数据库·python·sql·oracle·database
聪明的墨菲特i11 分钟前
Django前后端分离基本流程
后端·python·django·web3
工业3D_大熊17 分钟前
【虚拟仿真】CEETRON SDK在船舶流体与结构仿真中的应用解读
java·python·科技·信息可视化·c#·制造·虚拟现实
SEEONTIME26 分钟前
python-24-一篇文章彻底掌握Python HTTP库Requests
开发语言·python·http·http库requests
Bearnaise26 分钟前
PointMamba: A Simple State Space Model for Point Cloud Analysis——点云论文阅读(10)
论文阅读·笔记·python·深度学习·机器学习·计算机视觉·3d
哇咔咔哇咔1 小时前
【科普】conda、virtualenv, venv分别是什么?它们之间有什么区别?
python·conda·virtualenv
CSXB991 小时前
三十四、Python基础语法(文件操作-上)
开发语言·python·功能测试·测试工具
亚图跨际2 小时前
MATLAB和Python及R潜变量模型和降维
python·matlab·r语言·生物学·潜变量模型
IT古董2 小时前
【机器学习】决定系数(R²:Coefficient of Determination)
人工智能·python·机器学习