【Python+GIS】将xls中的经纬度数据转换为点矢量shp

1 背景

现手中有气象站点的日观测数据,想要将其导入到ArcGIS里面进行插值。

1.1 原始数据

一张xls中有31张sheet表,想把站点号、经度、纬度、空气温度和开尔文温度这几列写入点矢量文件,最终形成一个点文件能在ArcGIS里面打开。
在这里插入图片描述

2 参考文献

《地质男转行学遥感Python——创建矢量数据》

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")

结果如下图所示:
在这里插入图片描述
属性表与原始表的对比:
在这里插入图片描述

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,这是一个关于QGISPython编程的问题。我会尽力回答。 首先,需要安装QGIS软件,并确保已经安装了Python插件。然后,可以使用以下Python脚本实现批量将txt经纬度文件转换shp文件: ```python import os from qgis.core import * import qgis.utils # 设置QGIS应用程序路径 QgsApplication.setPrefixPath("C:/Program Files/QGIS 3.10", True) qgs = QgsApplication([], False) qgs.initQgis() # 设置经纬度txt文件路径 input_folder = "C:/input_folder" # 设置输出shp文件路径 output_folder = "C:/output_folder" # 遍历输入文件的所有txt文件 for file_name in os.listdir(input_folder): if file_name.endswith(".txt"): # 加载txt文件 uri = "file:///" + os.path.join(input_folder, file_name) + "?delimiter=," layer = QgsVectorLayer(uri, file_name[:-4], "delimitedtext") # 设置坐标系 crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId) layer.setCrs(crs) # 保存为shp文件 output_file = os.path.join(output_folder, file_name[:-4] + ".shp") QgsVectorFileWriter.writeAsVectorFormat(layer, output_file, "UTF-8", crs, "ESRI Shapefile") print("Converted {} to {}".format(file_name, output_file)) # 退出QGIS应用程序 qgs.exitQgis() ``` 在这个脚本,首先设置了QGIS应用程序的路径,并初始化了QGIS应用程序。然后,设置了输入文件夹和输出文件夹的路径,并遍历了输入文件的所有txt文件。对于每个txt文件,首先使用QGIS的delimitedtext数据提供程序加载文件,并设置其坐标系为WGS 84。然后,使用QGIS的ESRI Shapefile格式将图层保存为shp文件。最后,退出QGIS应用程序。 希望这个脚本能够帮助到你。如果你有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值