解决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实现简单状态框架的方法
Mar 19 Python
python3实现短网址和数字相互转换的方法
Apr 28 Python
selenium python浏览器多窗口处理代码示例
Jan 15 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
python得到单词模式的示例
Oct 15 Python
python 获取页面表格数据存放到csv中的方法
Dec 26 Python
理想高通滤波实现Python opencv示例
Jan 30 Python
Python面向对象实现一个对象调用另一个对象操作示例
Apr 08 Python
python求最大值最小值方法总结
Jun 25 Python
Python交互式图形编程的实现
Jul 25 Python
python except异常处理之后不退出,解决异常继续执行的实现
Apr 25 Python
python实现暗通道去雾算法的示例
Sep 27 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调用Java对象的方法
2006/10/09 PHP
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
浅析is_writable的php实现
2013/06/18 PHP
PHP会员找回密码功能的简单实现
2016/09/05 PHP
php与阿里云短信接口接入操作案例分析
2020/05/27 PHP
js null,undefined,字符串小结
2010/08/21 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
Jquery图片滚动与幻灯片的实例代码
2013/04/08 Javascript
12种不宜使用的Javascript语法整理
2013/11/04 Javascript
javascript教程之不完整的继承(js原型链)
2014/01/13 Javascript
jQuery插件Skippr实现焦点图幻灯片特效
2015/04/12 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
jQuery编写网页版2048小游戏
2017/01/06 Javascript
微信小程序 新建登录页并实现tabBar隐藏
2017/06/13 Javascript
jQuery实现的页面遮罩层功能示例【测试可用】
2017/10/14 jQuery
JavaScript 五大常见函数
2018/03/23 Javascript
webpack结合express实现自动刷新的方法
2019/05/07 Javascript
web.py获取上传文件名的正确方法
2014/08/26 Python
使用Python 正则匹配两个特定字符之间的字符方法
2018/12/24 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
python 批量解压压缩文件的实例代码
2019/06/27 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
美国领先的奢侈美容零售商:Bluemercury
2017/07/26 全球购物
什么是java序列化,如何实现java序列化
2012/11/14 面试题
C语言笔试集
2012/07/24 面试题
什么是虚拟内存?虚拟内存有什么优势?
2012/02/19 面试题
函授教育个人学习的自我评价
2013/12/31 职场文书
十一酒店活动方案
2014/02/20 职场文书
夫妻双方自愿离婚协议书怎么写
2014/12/01 职场文书
幼儿园教师岗位职责
2015/04/02 职场文书
机器人总动员观后感
2015/06/09 职场文书
《桂花雨》教学反思
2016/02/19 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
JS中forEach()、map()、every()、some()和filter()的用法
2022/05/11 Javascript