解决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实现异步回调机制代码分享
Jan 10 Python
Python读写Excel文件方法介绍
Nov 22 Python
使用IPython来操作Docker容器的入门指引
Apr 08 Python
利用python发送和接收邮件
Sep 27 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
使用Python抓取豆瓣影评数据的方法
Oct 17 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
python3实现指定目录下文件sha256及文件大小统计
Feb 25 Python
Python如何使用函数做字典的值
Nov 30 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
解决Keras自带数据集与预训练model下载太慢问题
Jun 12 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 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
基于文本的访客签到簿
2006/10/09 PHP
用PHP和ACCESS写聊天室(二)
2006/10/09 PHP
ThinkPHP的截取字符串函数无法显示省略号的解决方法
2014/06/25 PHP
php使用pdo连接并查询sql数据库的方法
2014/12/24 PHP
PHPTree――php快速生成无限级分类
2018/03/30 PHP
js计算页面刷新的次数
2009/07/20 Javascript
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
在chrome中window.onload事件的一些问题
2010/03/01 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
基于jQuery的360图片展示实现代码
2012/06/14 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
js判断ie版本号的简单实现代码
2014/03/05 Javascript
js实现文字垂直滚动和鼠标悬停效果
2015/12/31 Javascript
JS根据浏览器窗口大小实时动态改变网页文字大小的方法
2016/02/25 Javascript
JavaScript数组去重的两种方法推荐
2016/04/05 Javascript
微信小程序开发入门基础教程
2017/04/19 Javascript
js获取元素的偏移量offset简单方法(必看)
2017/07/05 Javascript
vue实现记事本功能
2019/06/26 Javascript
解决echarts vue数据更新,视图不更新问题(echarts嵌在vue弹框中)
2020/07/20 Javascript
使用基于Python的Tornado框架的HTTP客户端的教程
2015/04/24 Python
Linux系统上Nginx+Python的web.py与Django框架环境
2015/12/25 Python
在python里协程使用同步锁Lock的实例
2019/02/19 Python
pandas dataframe的合并实现(append, merge, concat)
2019/06/24 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
python 工具 字符串转numpy浮点数组的实现
2020/03/14 Python
css3 border-radius属性详解
2017/07/05 HTML / CSS
用CSS3实现背景渐变的方法
2015/07/14 HTML / CSS
英国鲜花速递:Serenata Flowers
2018/04/03 全球购物
JDO的含义
2012/11/17 面试题
国外的一些J2EE面试题一
2012/10/13 面试题
房地产公司财务总监岗位职责
2015/04/03 职场文书
2015年医院护理部工作总结
2015/04/23 职场文书
鸦片战争观后感
2015/06/09 职场文书
2015上半年个人工作总结
2015/07/27 职场文书
react antd实现动态增减表单
2021/06/03 Javascript