本文介紹基於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
參數列示投影后站點向量資料的具體檔案。
# -*- 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 執行結果
執行上述程式碼,即可得到包含有表格檔案中所列全部站點的點要素向量圖層檔案,且其屬性表中包含了原有表格檔案中全部列所對應的欄位與內容。
檢視該圖層屬性,可以看到其已經具有了我們在程式碼中所指定的投影座標系。
至此,大功告成。