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. axios post提交数据的三种请求方式

    1.Content-Type: application/json import axios from 'axios' let data = {"code":"1234&q ...

  2. Centos6.5 离线 Openssh 升级

    目录 OpenSSH 升级 一.基于 Dropbear 设置备用 ssh 服务器 二. Openssh 更新 2.1 ssh配置 备份 2.2 openssh 升级 Openssl 升级(由于Open ...

  3. Docker部署ElasticSearch以及使用

    ElasticSearch笔记 1. ElasticSearch前期 1.1 聊聊ElasticSearch的简介 ​ Elaticsearch,简称为es, es是一个开源的高扩展的分布式全文检索引 ...

  4. 部署cobbler服务器

    部署cobbler服务器 1.准备环境使用nat或者仅主机模式,不要使用桥接模式,方式获取的IP不是自己的 2. 配置yum源[epel]name=epelenabled=1gpgcheck=0bas ...

  5. java虚拟机小贴士之GC分析

    打印日志 通过加入 -XX:+PrintGCDetails 参数则可以打印详细GC信息至控制台.参数-verbose:gc也是可以,但不够详细.通过加入-XX:+PrintGCDateStamps则可 ...

  6. idea启动springmvc项目时报找不到类

    今天用idea启动springmvc项目时找不到类 . 查了一下,发现是我使用idea20201.1出现的bug 解决方法:File>Settings>Build, Execution, ...

  7. http(Hyper Text Transfer Protocol)

    一.定义    http(Hyper Text Transfer Protocol):超文本传输协议二.作用    数据传输三.概念    HTTP消息:        1.客户端发向服务器的请求消息 ...

  8. python语言概述

    python语言的发展 python语言诞生于1990年,由Guide van Rossum设计并领导开发. python语言是开源项目的优秀代表,其解释器的全部代码都是开源的. 编写Hello程序 ...

  9. 吴恩达Machine Learning学习笔记(四)--BP神经网络

    解决复杂非线性问题 BP神经网络 模型表示 theta->weights sigmoid->activation function input_layer->hidden_layer ...

  10. SSRF漏洞(原理、漏洞利用、修复建议)

    介绍SSRF漏洞 SSRF (Server-Side Request Forgery,服务器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞.一般情况下,SSRF攻击的目标是外网无法访问 ...