解决python ogr shp字段写入中文乱码的问题


Posted in Python onDecember 31, 2018

首先,先确认一下你的字段值是不是乱码,如果是,按照以下方法:

我的字段值是来自于一个geojson字符串,我在对它解析时做了如下处理:

properties = fea.get("properties")
pro_json=json.dumps(properties)
pro_json.replace('u\'','\'')#将unicode编码转化为中文先处理一下
pro_json=pro_json.decode("unicode-escape") #将unicode编码转化为中文
properties=json.loads(pro_json)

这样即可消除字段值中的中文乱码。

字段值没有乱码了,可是这样写入shp,shp中会出现乱码,使用如下方法解决:

首先,你需要用driver方法创建shp文件而不是直接用ogr.open:

driver=ogr.GetDriverByName("ESRI Shapefile")
ds =driver.CreateDataSource(shp_path)#打开要写入的数据源

然后,在driver创建之前加入如下两句:

gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")

成了。

源码如下:

def create_shp_with_geoJson2(a,shp_path):
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
driver=ogr.GetDriverByName("ESRI Shapefile")
ds =driver.CreateDataSource(shp_path)#打开要写入的数据源
if ds is None:
sys.exit('Could not open this folder!')
if ds.GetLayer('test_polygon'):
ds.DeleteLayer('test_polygon')#如果存在,就删除该数据
feature0=a['features'][0]
geo = feature0.get("geometry")
geo_type = geo.get('type')#获取图层类型
properties = feature0.get("properties")
keys=properties.keys()#获取字段名称数组
if geo_type=='Polygon' or 'MultiPolygon':
ogr_type=ogr.wkbPolygon
else:
if geo_type=='Point':
ogr_type=ogr.wkbPoint
else:
if geo_type=='LineString' or 'MultiLineString':
ogr_type=ogr.wkbLineString
out_lyr=ds.CreateLayer('test_polygon',None,ogr_type)#创建图层
#接下来往图层中写入feature
for key in keys:
field_testfield = ogr.FieldDefn(key, ogr.OFTString)#创建字段
field_testfield.SetWidth(254)
out_lyr.CreateField(field_testfield)
for fea in a['features']:
geometry_json=fea.get("geometry")
properties = fea.get("properties")
pro_json=json.dumps(properties)
pro_json.replace('u\'','\'')#将unicode编码转化为中文先处理一下
pro_json=pro_json.decode("unicode-escape") #将unicode编码转化为中文
properties=json.loads(pro_json)
geom=ogr.CreateGeometryFromJson(str(geometry_json))
out_defn=out_lyr.GetLayerDefn()
out_feat=ogr.Feature(out_defn)
out_feat.SetGeometry(geom)#创建geometry
for i in range(len(keys)):
value=properties.get(keys[i])#获取属性值
print(value)
out_feat.SetField(i,value)
out_lyr.CreateFeature(out_feat)#在图层中插入该要素
if __name__ == '__main__':
create_shp_with_geoJson2(a,'web')

以上这篇解决python ogr shp字段写入中文乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python的自动化部署模块Fabric的安装及使用指南
Jan 19 Python
python实现下载整个ftp目录的方法
Jan 17 Python
浅谈终端直接执行py文件,不需要python命令
Jan 23 Python
详解Python中最难理解的点-装饰器
Apr 03 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
PyTorch: 梯度下降及反向传播的实例详解
Aug 20 Python
Python:type、object、class与内置类型实例
Dec 25 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
Django实现将一个字典传到前端显示出来
Apr 03 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
Python使用Selenium实现淘宝抢单的流程分析
Jun 23 Python
Python图像处理之gif动态图的解析与合成操作详解
Dec 30 #Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 #Python
python实现播放音频和录音功能示例代码
Dec 30 #Python
利用python实现简易版的贪吃蛇游戏(面向python小白)
Dec 30 #Python
python中partial()基础用法说明
Dec 30 #Python
python读取各种文件数据方法解析
Dec 29 #Python
python 读取鼠标点击坐标的实例
Dec 29 #Python
You might like
十大催泪虐心动漫,你能坚持看到第几部?
2020/03/04 日漫
php radio 单选框获取与保持值的实现代码
2010/05/15 PHP
PHP简单判断字符串是否包含另一个字符串的方法
2016/03/25 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
Laravel框架模板加载,分配变量及简单路由功能示例
2018/06/11 PHP
javascript firefox兼容ie的dom方法脚本
2008/05/18 Javascript
javascript 常用代码技巧大收集
2009/02/25 Javascript
简单的js表单验证函数
2013/10/28 Javascript
IE浏览器中图片onload事件无效的解决方法
2014/04/29 Javascript
基于jquery的文字向上跑动类似跑马灯的效果
2014/09/22 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
JSON 的正确用法探讨:Pyhong、MongoDB、JavaScript与Ajax
2016/05/15 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
Vue单页应用引用单独的样式文件的两种方式
2018/03/30 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
实例详解Vue项目使用eslint + prettier规范代码风格
2018/08/20 Javascript
使用VUE+iView+.Net Core上传图片的方法示例
2019/01/04 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
详解Python3.1版本带来的核心变化
2015/04/07 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
python正则表达式re之compile函数解析
2017/10/25 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
2018/02/18 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
酒店管理专业毕业生求职自荐信
2014/04/28 职场文书
政府法律服务方案
2014/06/14 职场文书
广告学专业求职信
2014/06/19 职场文书
学习型党组织心得体会
2014/09/12 职场文书
2014医学院领导班子对照检查材料思想汇报
2014/09/19 职场文书
小学生班干部竞选稿
2015/11/20 职场文书
详解Oracle块修改跟踪功能
2021/11/07 Oracle
面试被问select......for update会锁表还是锁行
2021/11/11 MySQL