怎么用Python实现csv文件(点表和线表)转换为shapefile文件
发表于:2025-01-17 作者:千家信息网编辑
千家信息网最后更新 2025年01月17日,本篇内容主要讲解"怎么用Python实现csv文件(点表和线表)转换为shapefile文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"怎么用Pytho
千家信息网最后更新 2025年01月17日怎么用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安全错误
数据库的锁怎样保障安全
分布式数据库优化算法
联想服务器卡在f1界面
软件开发哪里有教程
软件开发测试和营销
磁盘安装数据库失败
软件开发是什么专业内容
水世界上海网络技术有限公司
安徽中烟网络安全招标
服务器开机的时候能备份c盘么
网络安全简单自查报告
软件开发工程单选
蚌埠软件开发费用
wifi数据库错误
医院数据库备份时间
浙江智能养老软件开发专业制作
息壤云服务器 登陆
热血传奇千人服务器
网络安全是什么系
中职生网络安全技能大赛现场
数据库概论第二章答案
服务器必须用杀毒吗
暗黑4服务器哪个最大
网络安全教育公益讲座主持稿
网络安全设备及手段系统
广西数字化城管软件开发电话
科技有限公司互联网营销环境
阿里云服务器项目管理
蓬溪2019年外贸数据库压缩包
幼儿园防诈骗网络安全
敏捷软件开发宣言图片