gdal包用于处理栅格数据,ogr用于处理矢量数据。
 1 #!C:\Program Files\pythonxy\python\python.exe
2 #-*- coding:gb2312 -*-
3
4 from osgeo import ogr,osr,gdal
5 import os
6
7 """
8 Understanding OGR Data Type:
9 Geometry - wkbPoint,wkbLineString,wkbPolygon,wkbMultiPoint,wkbMultiLineString,wkbMultiPolygon
10 Attribute - OFTInteger,OFTReal,OFTString,OFTDateTime
11 """
12
13 class ARCVIEW_SHAPE:
14 #------------------------------
15 #read shape file
16 #------------------------------
17 def read_shp(self,file):
18 #open
19 ds = ogr.Open(file,False) #False - read only, True - read/write
20 layer = ds.GetLayer(0)
21 #layer = ds.GetLayerByName(file[:-4])
22 #fields
23 lydefn = layer.GetLayerDefn()
24 spatialref = layer.GetSpatialRef()
25 #spatialref.ExportToProj4()
26 #spatialref.ExportToWkt()
27 geomtype = lydefn.GetGeomType()
28 fieldlist = []
29 for i in range(lydefn.GetFieldCount()):
30 fddefn = lydefn.GetFieldDefn(i)
31 fddict = {'name':fddefn.GetName(),'type':fddefn.GetType(),
32 'width':fddefn.GetWidth(),'decimal':fddefn.GetPrecision()}
33 fieldlist += [fddict]
34 #records
35 geomlist = []
36 reclist = []
37 feature = layer.GetNextFeature()
38 while feature is not None:
39 geom = feature.GetGeometryRef()
40 geomlist += [geom.ExportToWkt()]
41 rec = {}
42 for fd in fieldlist:
43 rec[fd['name']] = feature.GetField(fd['name'])
44 reclist += [rec]
45 feature = layer.GetNextFeature()
46 #close
47 ds.Destroy()
48 return (spatialref,geomtype,geomlist,fieldlist,reclist)
49
50 #------------------------------
51 #write shape file
52 #------------------------------
53 def write_shp(self,file,data):
54 gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8","YES");
55 gdal.SetConfigOption("SHAPE_ENCODING","UTF-8");
56 spatialref,geomtype,geomlist,fieldlist,reclist = data
57 #create
58 driver = ogr.GetDriverByName("ESRI Shapefile")
59 if os.access(file, os.F_OK ):
60 driver.DeleteDataSource(file)
61 ds = driver.CreateDataSource(file)
62 #spatialref = osr.SpatialReference( 'LOCAL_CS["arbitrary"]' )
63 #spatialref = osr.SpatialReference().ImportFromProj4('+proj=tmerc ...')
64 layer = ds.CreateLayer(file[:-4],srs=spatialref,geom_type=geomtype)
65 # print type(layer)
66 #fields
67 for fd in fieldlist:
68 field = ogr.FieldDefn(fd['name'],fd['type'])
69 if fd.has_key('width'):
70 field.SetWidth(fd['width'])
71 if fd.has_key('decimal'):
72 field.SetPrecision(fd['decimal'])
73 layer.CreateField(field)
74 #records
75 for i in range(len(reclist)):
76 geom = ogr.CreateGeometryFromWkt(geomlist[i])
77 feat = ogr.Feature(layer.GetLayerDefn())
78 feat.SetGeometry(geom)
79 for fd in fieldlist:
80 # print(fd['name'],reclist[i][fd['name']])
81 feat.SetField(fd['name'],reclist[i][fd['name']])
82 layer.CreateFeature(feat)
83 #close
84 ds.Destroy()
85
86 #--------------------------------------
87 #main function
88 #--------------------------------------
89 if __name__ == "__main__":
90 test = ARCVIEW_SHAPE()
91 data = test.read_shp(r'../data/chn_adm2.shp')
92 spatialref,geomtype,geomlist,fieldlist,reclist = data
93 test.write_shp(r'../data/chn_adm2_bak.shp',[spatialref,geomtype,geomlist,fieldlist,reclist])

python GDAL 读写shp文件的更多相关文章

  1. python gdal 修改shp文件的属性值

    driver = ogr.GetDriverByName('ESRI Shapefile')datasource = driver.Open(shpFileName, 1)layer = dataso ...

  2. C#、C++用GDAL读shp文件(转载)

    C#.C++用GDAL读shp文件 C#用GDAL读shp文件 (2012-08-14 17:09:45) 标签: 杂谈 分类: c#方面的总结 1.目前使用开发环境为VS2008+GDAL1.81 ...

  3. 关于GDAL读写Shp乱码的问题总结

    目录 1. 正文 1.1. shp文件本身的编码的问题 1.2. 设置读取的编码方式 1.2.1. GDAL设置 1.2.2. 解码方式 1.2.3. 其他 2. 参考 1. 正文 最近在使用GDAL ...

  4. GDAL 生成shp文件

    附件:http://pan.baidu.com/s/1i3GPwrV(C#版GDAL接口.dll) 示例程序: http://pan.baidu.com/s/1jpIKQ  (程序是在vs2008 x ...

  5. GDAL读写矢量文件——Python

    在Python中使用OGR时,先要导入OGR库,如果需要对中文的支持,还需要导入GDAL库,具体代码如下.Python创建的shp结果如图1所示. 图1 Python创建矢量结果 #-*- codin ...

  6. Python使用读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  7. Python如何读写Excel文件-使用xlrd/xlwt模块

    时间: 2020-08-18 整理: qiyuan 安装和导入 1.模块介绍 在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls.xlsx文件)进 ...

  8. python gdal 写GeoTiff文件

    1.gdal数据类型 (1)GDT_Byte(int8)  (2)GDT_UInt16 (3)GDT_Int16  (4)GDT_UInt32  (5)GDT_Int32  (6)GDT_Float3 ...

  9. python mongodb 读写CSV文件

    # -*- coding: utf-8 -*-import osimport csvimport pymongofrom pymongo import MongoClient #建立连接client ...

随机推荐

  1. CTF-Bugku-杂项-21-28

    2020.09.14 下午奥力给 做题 第二十一题 细心的大象 https://ctf.bugku.com/challenges#细心的大象 这一看就是一只有故事的大象,图片详情中有东西,base64 ...

  2. [Spark快速大数据分析]阅读笔记

    第2章 Spark分布式执行涉及的组件 每个Spark应用都由一个驱动程序来发起集群上的各种并行操作,驱动程序通过一个SparkContext对象访问Spark:驱动程序管理多个执行器节点,可以用Sp ...

  3. k8s运行容器之Job(四)

    Job 容器按照持续运行的时间可分为两类:服务类容器和工作类容器. 服务类容器通常持续提供服务,需要一直运行,比如 http server,daemon 等.工作类容器则是一次性任务,比如批处理程序, ...

  4. MySQL索引的基本操作

    常见的索引类型 PROMARY KEY 主键索引,也是唯一索引,不允许重复数据. UNIQUE INDEX唯一索引,不允许有重复数据. INDEX 普通索引允许有重复数据. 组合索引,对多个字段添加索 ...

  5. Linux系统编程—信号量

    大家知道,互斥锁可以用于线程间同步,但是,每次只能有一个线程抢到互斥锁,这样限制了程序的并发行.如果我们希望允许多个线程同时访问同一个资源,那么使用互斥锁是没有办法实现的,只能互斥锁会将整个共享资源锁 ...

  6. Spring Cloud各组件学习

    Spring-Cloud 介绍 SpringCloud各个组件详解,因为SpringCloud部分组件停止更新,故本项目包含原SpringCloud(基于SpringCloud H版和SpringBo ...

  7. 使用jpa时,实体类有不存在数据库中的字段

    使用jpa时,实体类有不存在数据库中的字段.在改属性上面加上这个注解@Transient就可以解决问题.

  8. Vue 表单拖拽排序

    Vue table表单拖拽 业务需求: 因为数据展示使用的是 elementUI 的 Table进行数据展示的,现在的需求是通过拖拽表单进行表单排序.同时,动态修改表单中的数据排列顺序.查阅了好多资料 ...

  9. Oracle 11gR2

    OracleOraDb11g_home1TNSListener #其它客服端连接需要开启服务,如不开启,本机连接可以直接使用sqlplus OracleServiceORCL #实例SID服务  sq ...

  10. Python练习题 005:三个数字由大到小排序输出

    [Python练习题 005]输入三个整数x,y,z,请把这三个数由小到大输出. ----------------------------------------------------------- ...