解决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获取当前时间的方法
Jan 14 Python
分享python数据统计的一些小技巧
Jul 21 Python
Python中标准模块importlib详解
Apr 16 Python
Python实现统计给定列表中指定数字出现次数的方法
Apr 11 Python
python中计算一个列表中连续相同的元素个数方法
Jun 29 Python
详解django自定义中间件处理
Nov 21 Python
python实现简单的文字识别
Nov 27 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
Dec 07 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
Python学习笔记之错误和异常及访问错误消息详解
Aug 08 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
68行Python代码实现带难度升级的贪吃蛇
Jan 18 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
2016/01/11 PHP
解决Laravel5.x的php artisan migrate数据库迁移创建操作报错SQLSTATE[42000]
2020/04/06 PHP
PHP isset()及empty()用法区别详解
2020/08/29 PHP
JavaScript Event学习第七章 事件属性
2010/02/07 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
js 通过html()及text()方法获取并设置p标签的显示值
2014/05/14 Javascript
jQuery实现简单的tab标签页效果
2016/09/12 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
2020/11/16 Javascript
Vue.js自定义指令的用法与实例解析
2017/01/18 Javascript
Vue.js学习之过滤器详解
2017/01/22 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
2018/09/13 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
[01:47]2018年度DOTA2最佳教练-完美盛典
2018/12/16 DOTA
python写日志封装类实例
2015/06/28 Python
python+pyqt5编写md5生成器
2019/03/18 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python坐标轴操作及设置代码实例
2020/06/04 Python
CSS改变网页中鼠标选中文字背景颜色例子
2014/04/23 HTML / CSS
HTML5 常用语法一览(列举不支持的属性)
2010/01/26 HTML / CSS
canvas环形倒计时组件的示例代码
2018/06/14 HTML / CSS
html5 canvas手势解锁源码分享
2020/01/07 HTML / CSS
CHARLES & KEITH英国官网:新加坡时尚品牌
2018/07/04 全球购物
Geekbuying波兰:购买中国电子产品
2019/10/20 全球购物
乌克兰珠宝大卖场:Zlato.ua
2020/09/27 全球购物
日本亚马逊官方网站:Amazon.co.jp
2020/04/14 全球购物
华为慧通笔试题
2016/04/22 面试题
宣传工作经验材料
2014/06/02 职场文书
公司总经理任命书
2014/06/05 职场文书
绵山导游词
2015/02/05 职场文书
中班下学期个人工作总结
2015/02/12 职场文书
当幸福来敲门观后感
2015/06/01 职场文书
导游词之镇江西津古渡
2019/11/06 职场文书
选购到合适的激光打印机
2022/04/21 数码科技
python实现简单的三子棋游戏
2022/04/28 Python