解决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基础教程之Hello World!
Aug 29 Python
关于Python数据结构中字典的心得
Dec 04 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
May 11 Python
详解python中list的使用
Mar 15 Python
计算机二级python学习教程(1) 教大家如何学习python
May 16 Python
python字典改变value值方法总结
Jun 21 Python
如何通过python画loss曲线的方法
Jun 26 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
Django中使用MySQL5.5的教程
Dec 18 Python
python框架flask入门之路由及简单实现方法
Jun 07 Python
python爬虫构建代理ip池抓取数据库的示例代码
Sep 22 Python
python多线程方法详解
Jan 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
php实现转换ubb代码的方法
2015/06/18 PHP
php批量修改表结构实例
2017/05/24 PHP
php实现支付宝当面付(扫码支付)功能
2018/05/30 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
用javascript作一个通用向导说明
2011/08/30 Javascript
jquery动态更换设置背景图的方法
2014/03/25 Javascript
最新最热最实用的15个jQuery插件汇总
2015/07/05 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
简单实现js选项卡切换效果
2016/02/03 Javascript
js仿新浪微博消息发布功能
2017/02/17 Javascript
小程序实现带年月选取效果的日历
2018/06/27 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
微信小程序登录数据解密及状态维持实例详解
2019/05/06 Javascript
JS中的一些常用的函数式编程术语
2019/06/15 Javascript
用js编写留言板
2020/03/17 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
跟老齐学Python之模块的加载
2014/10/24 Python
python实现用于测试网站访问速率的方法
2015/05/26 Python
python技能之数据导出excel的实例代码
2017/08/11 Python
python实现简单遗传算法
2018/03/19 Python
利用pandas读取中文数据集的方法
2018/07/25 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
pygame游戏之旅 按钮上添加文字的方法
2018/11/21 Python
Python3.5 Pandas模块之DataFrame用法实例分析
2019/04/23 Python
html5+css3气泡组件的实现
2014/11/21 HTML / CSS
如何使用amaze ui的分页样式封装一个通用的JS分页控件
2020/08/21 HTML / CSS
加拿大时尚床上用品零售商:QE Home | Quilts Etc
2018/01/22 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
J2ee常用的设计模式?说明工厂模式
2015/05/21 面试题
老师给学生的表扬信
2014/01/17 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
Java中Dijkstra(迪杰斯特拉)算法
2022/05/20 Java/Android