解决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使用PyV8执行javascript代码示例分享
Dec 04 Python
Python生成随机数的方法
Jan 14 Python
Python Trie树实现字典排序
Mar 28 Python
在Python中使用SimpleParse模块进行解析的教程
Apr 11 Python
在Python中使用判断语句和循环的教程
Apr 25 Python
python显示生日是星期几的方法
May 27 Python
CentOS 7 安装python3.7.1的方法及注意事项
Nov 01 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 Python
Pytest如何使用skip跳过执行测试
Aug 13 Python
Python 使用office365邮箱的示例
Oct 29 Python
Python趣味挑战之给幼儿园弟弟生成1000道算术题
May 28 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
实用函数3
2007/11/08 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
PDO::setAttribute讲解
2019/01/29 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
JavaScript 字符串连接性能优化
2008/12/20 Javascript
javascript 函数使用说明
2010/04/07 Javascript
javascript学习笔记(十九) 节点的操作实现代码
2012/06/20 Javascript
AngularJS基础 ng-switch 指令简单示例
2016/08/03 Javascript
微信小程序 免费SSL证书https、TLS版本问题的解决办法
2016/12/14 Javascript
easyUI实现类似搜索框关键词自动提示功能示例代码
2016/12/27 Javascript
Vue.js学习记录之在元素与template中使用v-if指令实例
2017/06/27 Javascript
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
浅谈js获取ModelAndView值的问题
2018/03/28 Javascript
微信小程序代码上传、审核发布小程序
2019/05/18 Javascript
前端路由&webpack基础配置详解
2019/06/10 Javascript
JavaScript, select标签元素左右移动功能实现
2020/05/14 Javascript
[00:44]华丽开场!DOTA2勇士令状带来全新对阵画面
2019/05/15 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
2017/08/30 Python
Python使用wxPython实现计算器
2018/01/30 Python
Python装饰器用法实例总结
2018/05/26 Python
Python之变量类型和if判断方式
2020/05/05 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
python os.rename实例用法详解
2020/12/06 Python
css3实现背景图片拉伸效果像桌面壁纸一样
2013/08/19 HTML / CSS
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
英国领先的新鲜松露和最好的松露产品供应商:TruffleHunter
2019/08/26 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
服务员岗位责任制
2014/02/11 职场文书
2014年残联工作总结
2014/11/21 职场文书
邀请书格式范文
2015/02/02 职场文书
vue router 动态路由清除方式
2022/05/25 Vue.js