python GDAL 读写shp文件
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文件的更多相关文章
- python gdal 修改shp文件的属性值
driver = ogr.GetDriverByName('ESRI Shapefile')datasource = driver.Open(shpFileName, 1)layer = dataso ...
- C#、C++用GDAL读shp文件(转载)
C#.C++用GDAL读shp文件 C#用GDAL读shp文件 (2012-08-14 17:09:45) 标签: 杂谈 分类: c#方面的总结 1.目前使用开发环境为VS2008+GDAL1.81 ...
- 关于GDAL读写Shp乱码的问题总结
目录 1. 正文 1.1. shp文件本身的编码的问题 1.2. 设置读取的编码方式 1.2.1. GDAL设置 1.2.2. 解码方式 1.2.3. 其他 2. 参考 1. 正文 最近在使用GDAL ...
- GDAL 生成shp文件
附件:http://pan.baidu.com/s/1i3GPwrV(C#版GDAL接口.dll) 示例程序: http://pan.baidu.com/s/1jpIKQ (程序是在vs2008 x ...
- GDAL读写矢量文件——Python
在Python中使用OGR时,先要导入OGR库,如果需要对中文的支持,还需要导入GDAL库,具体代码如下.Python创建的shp结果如图1所示. 图1 Python创建矢量结果 #-*- codin ...
- Python使用读写excel文件
Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...
- Python如何读写Excel文件-使用xlrd/xlwt模块
时间: 2020-08-18 整理: qiyuan 安装和导入 1.模块介绍 在 python 中使用 xlrd/xlwt 和 openpyxl 模块可以对Excel电子表格(xls.xlsx文件)进 ...
- python gdal 写GeoTiff文件
1.gdal数据类型 (1)GDT_Byte(int8) (2)GDT_UInt16 (3)GDT_Int16 (4)GDT_UInt32 (5)GDT_Int32 (6)GDT_Float3 ...
- python mongodb 读写CSV文件
# -*- coding: utf-8 -*-import osimport csvimport pymongofrom pymongo import MongoClient #建立连接client ...
随机推荐
- 3.CDN加速简介
什么是CDN CDN的全称是Content Delivery Network,即内容分发网络.CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问 ...
- [剑指Offer]56-数组中数字出现的次数(位运算)
题目一 数组中只出现一次的数字 题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字 题解 异或. 先考虑:数组中只有一个数字只出现了一次,其他数字都出现了 ...
- Badboy脚本录制工具
Badboy 目录 Badboy 1.Badboy安装 2.脚本的录制 1.Badboy安装 下载地址: http://www.badboy.com.au/download/index 安装其实傻瓜式 ...
- node进阶| 解决表单enctype="multipart/form-data" 时获取不到Input值的问题
今天在学习node踩到一个坑:form设置enctype="multipart/form-data"上传文件时,无法获取到表单其他input的值. 因为之前上传文件用的是 form ...
- 数组如何在ElasticSearch中索引
一.简介 在ElasticSearch里没有专门的数组类型,任何一个字段都可以有零个和多个值.当字段值的个数大于1时,字段类型就变成了数组. 下面以视频数据为例,介绍ElasticSearch如何索引 ...
- 本周 GitHub 速览:您的代码有声儿吗?(Vol.38)
作者:HelloGitHub-小鱼干 摘要:还记得花式夸赞程序员的彩虹屁插件 vscode-rainbow-fart 吗?它后续有人啦!JazzIt 同它的前辈 vscode-rainbow-fart ...
- kafka学习(四)kafka安装与命令行调用
文章更新时间:2020/06/07 一.安装JDK 过程就不过多介绍了... 二.安装Zookeeper 安装过程可以参考此处~ 三.安装并配置kafka Kafka下载地址 http://kafk ...
- Java源码赏析(六)Java String 三顾
在大致了解了String之后,可能有的读者发现了,我们并没有谈到CharSequence接口. 原因是在这一节,CharSequence要和StringBuilder(Java1.5).StringB ...
- linux系统内存爆满的快速解决办法!
首先用free工具检查一下内存的使用情况: $ free -m total used free shared buff/cache available Mem: 15884 207 573 145 1 ...
- 创建Vue项目及封装axios
1. 始vue化项目 https://www.cnblogs.com/xiaonq/p/11027880.html vue init webpack deaxios # 使用脚手架创建项目 deaxi ...