解决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使用cookielib库示例分享
Mar 03 Python
跟老齐学Python之玩转字符串(2)更新篇
Sep 28 Python
python检测远程udp端口是否打开的方法
Mar 14 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
Python中方法链的使用方法
Feb 23 Python
python 用正则表达式筛选文本信息的实例
Jun 05 Python
解决Pycharm出现的部分快捷键无效问题
Oct 22 Python
python日期相关操作实例小结
Jun 24 Python
选择Python写网络爬虫的优势和理由
Jul 07 Python
python连接PostgreSQL过程解析
Feb 09 Python
Python如何定义接口和抽象类
Jul 28 Python
python opencv图像处理(素描、怀旧、光照、流年、滤镜 原理及实现)
Dec 10 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上传文件中文文件名乱码的解决方法
2013/11/01 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php rsa加密解密使用详解
2015/01/14 PHP
CI框架集成Smarty的方法分析
2016/05/17 PHP
Yii2框架实现登陆添加验证码功能示例
2018/07/12 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
JCalendar 日历控件 v1.0 beta[兼容IE&Firefox] 有文档和例子
2007/05/30 Javascript
引用其它js时如何同时处理多个window.onload事件
2014/09/02 Javascript
jQuery实现鼠标单击网页文字后在文本框显示的方法
2015/05/06 Javascript
通过XMLHttpRequest和jQuery实现ajax的几种方式
2015/08/28 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
浅谈jQuery框架Ajax常用选项
2017/07/08 jQuery
backbone简介_动力节点Java学院整理
2017/07/14 Javascript
浅谈Vue-cli单文件组件引入less,sass,css样式的不同方法
2018/03/13 Javascript
JS解析后台返回的JSON格式数据实例
2018/08/06 Javascript
nodejs 如何手动实现服务器
2018/08/20 NodeJs
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
angular4+百分比进度显示插件用法示例
2019/05/05 Javascript
详解ECMAScript2019/ES10新属性
2019/12/06 Javascript
Element图表初始大小及窗口自适应实现
2020/07/10 Javascript
ant design中upload组件上传大文件,显示进度条进度的实例
2020/10/29 Javascript
Python对数据库操作
2016/03/28 Python
对Python发送带header的http请求方法详解
2019/01/02 Python
Python用Try语句捕获异常的实例方法
2019/06/26 Python
Python+Tensorflow+CNN实现车牌识别的示例代码
2019/10/11 Python
TensorFlow实现自定义Op方式
2020/02/04 Python
CSS3条纹背景制作的实战攻略
2016/05/31 HTML / CSS
基于HTML5超酷摄像头(HTML5 webcam)拍照功能实现代码
2012/12/13 HTML / CSS
二手书店创业计划书
2014/01/16 职场文书
《水乡歌》教学反思
2014/04/24 职场文书
求职自我推荐信
2014/06/25 职场文书
刑事和解协议书范本
2014/11/19 职场文书
解决MySQL存储时间出现不一致的问题
2021/04/28 MySQL
Golang之sync.Pool使用详解
2021/05/06 Golang