解决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不带重复的全排列代码
Aug 13 Python
Python的dict字典结构操作方法学习笔记
May 07 Python
Python中set与frozenset方法和区别详解
May 23 Python
django进阶之cookie和session的使用示例
Aug 17 Python
浅析Python四种数据类型
Sep 26 Python
OpenCV HSV颜色识别及HSV基本颜色分量范围
Mar 22 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
python中enumerate() 与zip()函数的使用比较实例分析
Sep 03 Python
python FTP批量下载/删除/上传实例
Dec 22 Python
python 爬虫 实现增量去重和定时爬取实例
Feb 28 Python
Python文件时间操作步骤代码详解
Apr 13 Python
django模型类中,null=True,blank=True用法说明
Jul 09 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
用PHP控制用户的浏览器--ob*函数的使用说明
2007/03/16 PHP
PHP 编程的 5个良好习惯
2009/02/20 PHP
php解决DOM乱码的方法示例代码
2016/11/20 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
div浮层,滚动条移动,位置保持不变的4种方法汇总
2013/12/11 Javascript
JS实现的数组全排列输出算法
2015/03/19 Javascript
javascript实现的右下角弹窗实例
2015/04/24 Javascript
JS模拟酷狗音乐播放器收缩折叠关闭效果代码
2015/10/29 Javascript
JS清除文本框内容离开在恢复及鼠标离开文本框时触发js的方法
2016/01/12 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
基于JavaScript实现活动倒计时效果
2017/04/20 Javascript
详解Chart.js轻量级图表库的使用经验
2018/05/22 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
原生js实现form表单序列化的方法
2018/08/02 Javascript
实例讲解JavaScript预编译流程
2019/01/24 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
javascript+css实现俄罗斯方块小游戏
2020/06/28 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
Django-xadmin+rule对象级权限的实现方式
2020/03/30 Python
Python批量将图片灰度化的实现代码
2020/04/11 Python
Python requests模块cookie实例解析
2020/04/14 Python
使用jupyter notebook将文件保存为Markdown,HTML等文件格式
2020/04/14 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
世界领先的26岁以下学生和青少年旅行预订网站:StudentUniverse
2018/07/01 全球购物
Java工程师面试集锦之Spring框架
2013/06/16 面试题
TCP/IP模型的分界线
2012/12/01 面试题
2015年“七七卢沟桥事变”纪念活动总结
2015/03/24 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js
Python jiaba库的使用详解
2021/11/23 Python
python实现简单的三子棋游戏
2022/04/28 Python