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 ...
随机推荐
- apache OS 10013 问题
问题描述 (OS 10013)通常每个套接字地址 (协议/网络地址/端口) 只允许使用一次: make_sock: could not bind to address 0.0.0.0:80 解决方法 ...
- 现有 Vue.js 项目快速实现多语言切换的一种思路
Web 项目多语言(i18n,即国际化)是比较常见的需求,常规的做法大概有以下几种: 每种语言单独开发页面,适用于 CMS 之类的网站 多语言文本和页面结构分离,运行时动态替换.适用于单页应用(SPA ...
- Linux实战(12):Centos装机常用脚本-进阶版
#!/bin/bash #shell菜单演示 function menu() { echo -e `date` cat <<EOF ---------------------------- ...
- Java8学习小记
转载自https://segmentfault.com/a/1190000006985405 2014年,Oracle发布了Java8新版本.对于Java来说,这显然是一个具有里程碑意义的版本.尤其是 ...
- hystrix源码小贴士之Servo Publisher
HystrixServoMetricsPublisher 继承HystrixMetricsPublisher,创建HystrixServoMetricsPublisherCommand.Hystrix ...
- Spark Job-Stage-Task实例理解
Spark Job-Stage-Task实例理解 基于一个word count的简单例子理解Job.Stage.Task的关系,以及各自产生的方式和对并行.分区等的联系: 相关概念 Job:Job是由 ...
- 刷题[GXYCTF2019]禁止套娃
梳理思路 打开网站,发现很简单,只有flag在哪里的字样. 查看源码,常用后台目录,robots.txt,都未发现有任何东西. 扫描 直接拉进扫描器一扫,发现 思考可能是git源码泄露,可能可以恢复源 ...
- 小白也能看懂的Redis教学基础篇——redis神秘的数据结构
各位看官大大们,周末好! 作为一个Java后端开发,要想获得比较可观的工资,Redis基本上是必会的(不要问我为什么知道,问就是被问过无数次).那么Redis是什么,它到底拥有什么神秘的力量,能获得众 ...
- Linux下安装ZooKeeper-3.5.6
下载 官网下载地址是https://www.apache.org/dyn/closer.cgi/zookeeper,下载apache-zookeeper-3.5.6-bin.tar.gz. sta ...
- JS实现动态显示时间(最简单方法)
使用JS实现动态显示时间 最简单实现方法 直接在网页适当的位置中插入如下js代码,(id="datetime") 不可省略. <div id="datetime&q ...