怎么用Python实现csv文件(点表和线表)转换为shapefile文件
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇内容主要讲解"怎么用Python实现csv文件(点表和线表)转换为shapefile文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Pytho
千家信息网最后更新 2025年11月07日怎么用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安全错误
数据库的锁怎样保障安全
pe服务器刷钱
科技成果转化实现互联网
论文数据库清华同方
连接数据库修改字符集
德宏互联网科技靠谱吗
sql跨表查询数据库
网络安全手抄报字少一点
悦购互联网科技有限公司财务报表
关于进一步加强医疗设备网络安全
软件开发实例分析
十堰手机数据库修复来电咨询
master数据库恢复
ctf网络安全大赛盲文题
风压服务器
现军队数据库职工以后咋安置
cp软件开发定制
我的世界大部分人在玩什么服务器
北京智能土地资产管理软件开发
做网站和网络安全有什么关系
mongodb服务器
家政类app软件开发
零基础能学会软件开发
酒泉市网络安全信息中心
建设一个数据库的成本
构建数据库开发环境需要哪些步骤
数据库联合索引先后顺序
现军队数据库职工以后咋安置
浙江智能软件开发定做价格
数据库操作不成功后的操作
大专网络技术基础书籍