1 背景
现手中有气象站点的日观测数据,想要将其导入到ArcGIS里面进行插值。
1.1 原始数据
一张xls中有31张sheet表,想把站点号、经度、纬度、空气温度和开尔文温度这几列写入点矢量文件,最终形成一个点文件能在ArcGIS里面打开。
2 参考文献
3 代码
from osgeo import ogr,osr
import pandas as pd
import glob
#根据坐标文件生产点文件
sr = osr.SpatialReference()
sr.ImportFromEPSG(4326) #定义坐标信息
driver = ogr.GetDriverByName('ESRI Shapefile')
#输入文件夹,列举出xls文件
InputFolder=r"E:\excel\TA\3. delblank\2002"
inputfile_list = glob.glob(InputFolder + '/*.xls')
OutputFolder=r"E:\excel\TA\5. shpPoint" #输出的文件夹
for filename in inputfile_list:
print(filename)
for day in range(0,31):
if day<10:
datasource=OutputFolder+'\\'+filename[-10:-4]+' 0'+str(day+1)+'.shp'
name=filename[-10:-4]+' '+str(day+1)+'.shp'
if day>9:
datasource=OutputFolder+'\\'+filename[-10:-4]+' '+str(day+1)+'.shp'
name=filename[-10:-4]+' '+str(day+1)+'.shp'
ds = driver.CreateDataSource(datasource) #创建datasource
lyr = ds.CreateLayer(name, sr, ogr.wkbPoint) #创建layer
# 读取坐标点信息
point_data = pd.read_excel(filename,sheet_name=day)
#point_data.head()
# feature创建,几何写入,属性写入
fname = ogr.FieldDefn('station',ogr.OFTReal)
lyr.CreateField(fname)
fcx = ogr.FieldDefn('Lon', ogr.OFTReal)
lyr.CreateField(fcx)
fcy = ogr.FieldDefn('Lat', ogr.OFTReal)
lyr.CreateField(fcy)
fce = ogr.FieldDefn('Ta_Celsius', ogr.OFTReal)
lyr.CreateField(fce)
fcvalue = ogr.FieldDefn('Ta_Kelvin', ogr.OFTReal)
lyr.CreateField(fcvalue)
for i in range(0,len(point_data.index)):
feature = ogr.Feature(lyr.GetLayerDefn())
feature.SetField('station',point_data.loc[i][0])
feature.SetField('Lon',point_data.loc[i][2])
feature.SetField('Lat',point_data.loc[i][1])
feature.SetField('Ta_Celsius',point_data.loc[i][7])
feature.SetField('Ta_Kelvin',point_data.loc[i][8])
wkt = "POINT({} {})".format(point_data.loc[i][2],point_data.loc[i][1]) #"point({} {})"两个参数之间没有逗号,记住
point = ogr.CreateGeometryFromWkt(wkt)
feature.SetGeometry(point)
lyr.CreateFeature(feature)
del feature
del ds
print("ok")
结果如下图所示:
属性表与原始表的对比: