解决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 13 Python
Python对列表排序的方法实例分析
May 16 Python
python django事务transaction源码分析详解
Mar 17 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
python如何在循环引用中管理内存
Mar 20 Python
python绘制中国大陆人口热力图
Nov 07 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
Python.append()与Python.expand()用法详解
Dec 18 Python
Python序列化pickle模块使用详解
Mar 05 Python
Django中celery的使用项目实例
Jul 07 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
让你同时上传 1000 个文件 (二)
2006/10/09 PHP
php中filter函数验证、过滤用户输入的数据
2014/01/13 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
javascript 当前日期转化为中文的实现代码
2010/05/13 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
javascript制作sql转换为stringBuffer的小工具
2015/04/03 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
BootStrap使用popover插件实现鼠标经过显示并保持显示框
2016/06/23 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
小程序视频或音频自定义可拖拽进度条的示例代码
2018/09/30 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
JavaScript实现模态对话框实例
2020/01/13 Javascript
微信小程序学习总结(五)常见问题实例小结
2020/06/04 Javascript
Element Cascader 级联选择器的使用示例
2020/07/27 Javascript
Python开发的HTTP库requests详解
2017/08/29 Python
Python导入模块时遇到的错误分析
2017/08/30 Python
Python实现按特定格式对文件进行读写的方法示例
2017/11/30 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
匡威意大利官方商店 :Converse意大利
2018/11/27 全球购物
大整数数相乘的问题
2012/07/22 面试题
建筑毕业生自我鉴定
2013/10/18 职场文书
建筑学推荐信
2013/11/03 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
教师申诉制度
2014/01/29 职场文书
优秀护士获奖感言
2014/02/20 职场文书
个人课题方案
2014/05/08 职场文书
小学安全教育月活动总结
2014/07/07 职场文书
会计系毕业求职信
2014/08/07 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
高三教师工作总结2015
2015/07/21 职场文书
导游带团欢迎词
2015/09/30 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
PHP中多字节字符串操作实例详解
2021/08/23 PHP
抖音动画片,皮皮虾,《治愈系》动画在用这首REMIX作为背景音乐,Anak ,The last world with you完整版
2022/03/16 杂记
MySql统计函数COUNT的具体使用详解
2022/08/14 MySQL