gpt4 book ai didi

解决python ogr shp字段写入中文乱码的问题

转载 作者:qq735679552 更新时间:2022-09-28 22:32:09 29 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章解决python ogr shp字段写入中文乱码的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

首先,先确认一下你的字段值是不是乱码,如果是,按照以下方法:

我的字段值是来自于一个geojson字符串,我在对它解析时做了如下处理:

?
1
2
3
4
5
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

?
1
2
driver = ogr.GetDriverByName( "ESRI Shapefile" )
ds = driver.CreateDataSource(shp_path) #打开要写入的数据源

然后,在driver创建之前加入如下两句:

?
1
2
gdal.SetConfigOption( "GDAL_FILENAME_IS_UTF8" , "YES" )
gdal.SetConfigOption( "SHAPE_ENCODING" , "GBK" )

成了.

源码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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字段写入中文乱码的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我.

原文链接:https://blog.csdn.net/jin80506/article/details/80973883 。

最后此篇关于解决python ogr shp字段写入中文乱码的问题的文章就讲到这里了,如果你想了解更多关于解决python ogr shp字段写入中文乱码的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com