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 ...
随机推荐
- axios post提交数据的三种请求方式
1.Content-Type: application/json import axios from 'axios' let data = {"code":"1234&q ...
- Centos6.5 离线 Openssh 升级
目录 OpenSSH 升级 一.基于 Dropbear 设置备用 ssh 服务器 二. Openssh 更新 2.1 ssh配置 备份 2.2 openssh 升级 Openssl 升级(由于Open ...
- Docker部署ElasticSearch以及使用
ElasticSearch笔记 1. ElasticSearch前期 1.1 聊聊ElasticSearch的简介 Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引 ...
- 部署cobbler服务器
部署cobbler服务器 1.准备环境使用nat或者仅主机模式,不要使用桥接模式,方式获取的IP不是自己的 2. 配置yum源[epel]name=epelenabled=1gpgcheck=0bas ...
- java虚拟机小贴士之GC分析
打印日志 通过加入 -XX:+PrintGCDetails 参数则可以打印详细GC信息至控制台.参数-verbose:gc也是可以,但不够详细.通过加入-XX:+PrintGCDateStamps则可 ...
- idea启动springmvc项目时报找不到类
今天用idea启动springmvc项目时找不到类 . 查了一下,发现是我使用idea20201.1出现的bug 解决方法:File>Settings>Build, Execution, ...
- http(Hyper Text Transfer Protocol)
一.定义 http(Hyper Text Transfer Protocol):超文本传输协议二.作用 数据传输三.概念 HTTP消息: 1.客户端发向服务器的请求消息 ...
- python语言概述
python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 ...
- 吴恩达Machine Learning学习笔记(四)--BP神经网络
解决复杂非线性问题 BP神经网络 模型表示 theta->weights sigmoid->activation function input_layer->hidden_layer ...
- SSRF漏洞(原理、漏洞利用、修复建议)
介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,SSRF攻击的目标是外网无法访问 ...