解决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+selenium3实现浏览器刷简书文章阅读量
Dec 26 Python
详解Python异常处理中的Finally else的功能
Dec 29 Python
Python批量合并有合并单元格的Excel文件详解
Apr 05 Python
python读取图片的方式,以及将图片以三维数组的形式输出方法
Jul 03 Python
python-tornado的接口用swagger进行包装的实例
Aug 29 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Python 日期时间datetime 加一天,减一天,加减一小时一分钟,加减一年
Apr 16 Python
Keras自定义IOU方式
Jun 10 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
Python爬虫与反爬虫大战
Jul 30 Python
Python Pandas知识点之缺失值处理详解
May 11 Python
Golang Web 框架Iris安装部署
Aug 14 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 将逗号、空格、回车分隔的字符串转换为数组的函数
2012/06/07 PHP
php网站地图生成类示例
2014/01/13 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
2016/03/21 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
javascript实现文本域写入字符时限定字数
2014/02/12 Javascript
jquery选择器原理介绍($()使用方法)
2014/03/25 Javascript
JQuery弹出炫丽对话框的同时让背景变灰色
2014/05/22 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
JS实现鼠标移上去显示图片或微信二维码
2016/12/14 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
JS中Attr的用法详解
2017/10/09 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
AngularJS标签页tab选项卡切换功能经典实例详解
2018/05/16 Javascript
解决vue 格式化银行卡(信用卡)每4位一个符号隔断的问题
2018/09/14 Javascript
分享5个好用的javascript文件上传插件
2018/09/16 Javascript
基于vue实现圆形菜单栏组件
2019/07/05 Javascript
Python网络爬虫实例讲解
2016/04/28 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
深入浅析python 中的匿名函数
2018/05/21 Python
用pandas中的DataFrame时选取行或列的方法
2018/07/11 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
树莓派3 搭建 django 服务器的实例
2019/08/29 Python
python实现批量修改文件名
2020/03/23 Python
Python3如何判断三角形的类型
2020/04/12 Python
HTML5 Canvas之测试浏览器是否支持Canvas的方法
2015/01/01 HTML / CSS
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
Crabtree & Evelyn欧盟:豪华洗浴、身体和护发
2021/03/09 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
业务部主管岗位职责
2014/01/29 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
捐款通知怎么写
2015/04/24 职场文书