怎么用Python实现csv文件(点表和线表)转换为shapefile文件
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇内容主要讲解"怎么用Python实现csv文件(点表和线表)转换为shapefile文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Pytho
千家信息网最后更新 2026年11月01日怎么用Python实现csv文件(点表和线表)转换为shapefile文件
本篇内容主要讲解"怎么用Python实现csv文件(点表和线表)转换为shapefile文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Python实现csv文件(点表和线表)转换为shapefile文件"吧!
Python实现csv文件(点表和线表)转换为shapefile文件
说明
点表使用的geometry坐标是wkbPoint(几何点坐标)
线表使用的geometry坐标是wkbLineString(多点坐标)
区别详细看截图


参考别人写的方法加了注释,把点和边的转化写成了函数,每次转成功后加了读取shp文件来测试是否转化成功 注意事项
1.解决shp dbf 文件中文编码
#gdal.SetConfigOption("SHAPE_ENCODING", "")
#gdal.SetConfigOption("SHAPE_ENCODING", "gb2312")
gdal.SetConfigOption("SHAPE_ENCODING", "gbk")
2.layer.CreateField(ogr.FieldDefn('local_id', ogr.OFTString))
创建字段的名称最好为英文,而且不能超过十字字符,一个中文汉字占的字符多。
代码
(geopandas gdal 导入要考虑顺序,不然会报错)
import os, reimport geopandas as gpdimport gdalimport pandas as pdfrom osgeo import ogr, osr # osr用于获取坐标系统,ogr用于处理矢量文件from conf.path_config import gis_excel_dir# 解决shp dbf 文件中文编码 选自自己想转的编码 常用的 gbk gb2312 utf8# gdal.SetConfigOption("SHAPE_ENCODING", "")# gdal.SetConfigOption("SHAPE_ENCODING", "gb2312")gdal.SetConfigOption("SHAPE_ENCODING", "gbk")def point_csv_2_shp(path, shp_fn): """ point 转 shp """ os.chdir(os.path.dirname(path)) # 将path所在的目录设置为当前文件夹 ds = ogr.Open(path, 1) # 1代表可读可写,默认为0 csv_lyr = ds.GetLayer() # 获取csv文件 sr = osr.SpatialReference() sr.ImportFromEPSG(4326) # 定义坐标系统 shp_driver = ogr.GetDriverByName('ESRI Shapefile') # 获取shapefile文件处理句柄 if os.path.exists(shp_fn): # 如果文件夹中已存在同名文件则先删除 shp_driver.DeleteDataSource(shp_fn) shp_ds = shp_driver.CreateDataSource(shp_fn) layer = shp_ds.CreateLayer(shp_fn, sr, ogr.wkbPoint) # 创建一个点图层 layer.CreateField(ogr.FieldDefn('id', ogr.OFTString)) layer.CreateField(ogr.FieldDefn('ground_h', ogr.OFTString)) layer.CreateField(ogr.FieldDefn('type', ogr.OFTString)) for csv_row in csv_lyr: # 对于csv文件中每一行 point_feature = ogr.Feature(layer.GetLayerDefn()) # 创建一个点 x = csv_row.GetFieldAsDouble('横坐标') # csv中的坐标字段 y = csv_row.GetFieldAsDouble('纵坐标') # csv中的坐标字段 shp_pt = ogr.Geometry(ogr.wkbPoint) # 创建几何点 shp_pt.AddPoint(x, y) # 获取csv字段 # 为创建的shp文件字段赋值 point_feature.SetField('id', csv_row.GetFieldAsString('local_id')) # GetFieldAsString 获取csv中的列名 point_feature.SetField('ground_h', csv_row.GetFieldAsString('ground_h')) point_feature.SetField('type', csv_row.GetFieldAsString('dev_type')) point_feature.SetGeometry(shp_pt) # 将点的几何数据添加到点中 layer.CreateFeature(point_feature) # 将点写入到图层中 del ds del shp_ds # 释放句柄,文件缓冲到磁盘 print("This process has succeeded!")def line_csv_2_dbf(path, shp_fn): """ geometry坐标为 LineString坐标 """ os.chdir(os.path.dirname(path)) # 将path所在的目录设置为当前文件夹 ds = ogr.Open(path, 1) # 1代表可读可写,默认为0 csv_lyr = ds.GetLayer() # 获取csv文件 sr = osr.SpatialReference() sr.ImportFromEPSG(4326) # 定义坐标系统 shp_driver = ogr.GetDriverByName('ESRI Shapefile') # 获取shapefile文件处理句柄 if os.path.exists(shp_fn): # 如果文件夹中已存在同名文件则先删除 shp_driver.DeleteDataSource(shp_fn) shp_ds = shp_driver.CreateDataSource(shp_fn) layer = shp_ds.CreateLayer(shp_fn, sr, ogr.wkbLineString) # 创建多个点图层 layer.CreateField(ogr.FieldDefn('id', ogr.OFTString)) layer.CreateField(ogr.FieldDefn('l_id', ogr.OFTString)) layer.CreateField(ogr.FieldDefn('u_id', ogr.OFTString)) for csv_row in csv_lyr: # 对于csv文件中每一行 point_feature = ogr.Feature(layer.GetLayerDefn()) x1 = csv_row.GetFieldAsDouble('x1') # csv中的 x1坐标 y1 = csv_row.GetFieldAsDouble('y1') # y1坐标 x2 = csv_row.GetFieldAsDouble('x2') # x1坐标 y2 = csv_row.GetFieldAsDouble('y2') # y2坐标 mult_coord = '(' + str(x1) + ' ' + str(y1) + ',' + str(x2) + ' ' + str(y2) + ')' # geom = ogr.CreateGeometryFromWkt('LINESTRING ' + '(2 1,0 1)') geom = ogr.CreateGeometryFromWkt('LINESTRING' + mult_coord) # 获取csv字段 # 为创建的shp文件字段赋值 point_feature.SetField('id', csv_row.GetFieldAsString('gid')) # GetFieldAsString 获取csv中的列名 point_feature.SetField('l_id', csv_row.GetFieldAsString('l_id')) point_feature.SetField('u_id', csv_row.GetFieldAsString('u_id')) point_feature.SetGeometryDirectly(geom) layer.CreateFeature(point_feature) del ds del shp_ds # 释放句柄,文件缓冲到磁盘 print("This process has succeeded!")def read_shapefile(path): """ 测试转成的shp文件 """ df = gpd.read_file(path, encoding='gbk', rows=20) # 转shp前的编码格式 print(df)if __name__ == '__main__': '''线表转shp 以及读取测试''' shp_fn = "gd.shp" # 最终要得到的shp文件的文件名 path = os.path.join(gis_excel_dir, 'line.csv') # csv文件名称 line_csv_2_dbf(path=path, shp_fn=shp_fn) # 读取测试转之后的结果 read_shapefile(path=os.path.join(gis_excel_dir, 'gd.shp')) '''点表转shp 以及读取测试''' # shp_fn = "xnd.shp" # path = os.path.join(gis_excel_dir, 'point.csv') # csv文件名称 # point_csv_2_shp(path=path, shp_fn=shp_fn) # 读取测试转之后的结果 # read_shapefile(path=os.path.join(gis_excel_dir, 'point.shp'))到此,相信大家对"怎么用Python实现csv文件(点表和线表)转换为shapefile文件"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
文件
坐标
字段
测试
句柄
文件夹
编码
几何
名称
系统
中文
处理
成功
一行
代表
内容
字符
所在
方法
目录
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
保险科技 互联网保险
云之行互联网科技
互联网科技工作委员会毛军
互联网和科技技术
科技类互联网
易互联网科技有限公司
百单互联网科技有限公司
菲比寻常互联网科技
互联网科技公司做什么
中国互联网金融科技基金
美国互联网前沿科技
华中科技有哪些互联网大佬
互联网金融科技公司干啥的
伊宁互联网科技做什么的
上海科技产业互联网平台
元气玛特互联网科技公司是外包吗
梅州GM互联网络科技有限公司
互联网安防科技感
互联网高科技行业有哪些企业
科技发展第三阶段互联网时代
腾讯科技 互联网女皇
多迪互联网科技有限公司
互联网金融监管科技
老年人脱离互联网科技的作文
字节跳动和互联网科技
金融科技与互联网金融相同和不同
想开互联网科技公司怎么样
互联网科技包装股份有限公司上市
保山互联网科技靠谱吗
亚光科技低轨卫星互联网