解决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中time模块和datetime模块的用法示例
Feb 28 Python
浅谈使用Python内置函数getattr实现分发模式
Jan 22 Python
全面分析Python的优点和缺点
Feb 07 Python
Python实现的爬虫刷回复功能示例
Jun 07 Python
python实现textrank关键词提取
Jun 22 Python
Python实现数据结构线性链表(单链表)算法示例
May 04 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
Jupyter Notebook输出矢量图实例
Apr 14 Python
解析python 类方法、对象方法、静态方法
Aug 15 Python
python/golang实现循环链表的示例代码
Sep 14 Python
简单介绍Python的第三方库yaml
Jun 18 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
英雄试炼之肉山谷—引领RPG新潮流
2020/04/20 DOTA
PHP实现用户认证及管理完全源码
2007/03/11 PHP
PHP array_flip() 删除重复数组元素专用函数
2010/05/16 PHP
PHP三种方式实现链式操作详解
2017/01/21 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
javascript window.opener的用法分析
2010/04/07 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
jQuery实现点击文本框弹出热门标签的提示效果
2013/11/17 Javascript
JQuery $.each遍历JavaScript数组对象实例
2014/09/01 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
javascript常用方法总结
2015/05/14 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
Javascript实现的简单右键菜单类
2015/09/23 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
基于JavaScript实现跳转提示页面
2016/09/24 Javascript
详解vue表单验证组件 v-verify-plugin
2017/04/19 Javascript
原生JS实现自定义滚动条效果
2020/10/27 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
layui 数据表格+分页+搜索+checkbox+缓存选中项数据的方法
2019/09/21 Javascript
python使用urlparse分析网址中域名的方法
2015/04/15 Python
Python实现的Excel文件读写类
2015/07/30 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Python基础之字符串操作常用函数集合
2020/02/09 Python
使用Python 自动生成 Word 文档的教程
2020/02/13 Python
DataFrame.groupby()所见的各种用法详解
2020/06/14 Python
Annoushka英国官网:英国奢侈珠宝品牌
2018/10/20 全球购物
体育纪念品、亲笔签名的体育收藏品:Steiner Sports
2020/07/31 全球购物
《自选商场》教学反思
2014/02/14 职场文书
2014年出纳工作总结与计划
2014/12/09 职场文书
高三英语教学计划
2015/01/23 职场文书
2015年评职称工作总结范文
2015/04/20 职场文书
2016寒假假期总结
2015/10/10 职场文书
java基础——多线程
2021/07/03 Java/Android