本教程的讲义和源码都是取自Utah State University的openGIS课程

相关资料,包括讲义、源码、数据样例,请从此处下载http://www.gis.usu.edu/~chrisg/python/

本人只是做点翻译,写写学习体会而已,版权属于原作者。

欢迎转载,不过别忘了上面这段话。

==================================================

为什么用open source?

优点

  1. 免费,适合个人和小公司
  2. 强大的开发工具,找bug更容易
  3. 跨平台,windows和linux都能用
  4. 拉风!

缺点

  1. 没有内嵌地理处理器
  2. 用的人少

Open source RS/GIS模块

  1. OGR矢量库:简单的矢量数据读写,是GDAL的一部分
  2. GDAL地理空间数据抽象库:

a)         读写栅格数据

b)         ArcGIS也是基于GDAL开发的

c)         C++库,但是可以用python调用

相关模块

  1. Numeric:高速的数组处理,对栅格数据尤其重要
  2. NumPy:下一代的Numeric
  3. 更强大的gis库 http://www.gispython.org/

导入库:

import ogr

或者:

from osgeo import ogr

万能的方法是:

try:

from osgeo import ogr

except:

import ogr

要读取某种类型的数据,必须要先载入数据驱动,也就是初始化一个对象,让它“知道”某种数据结构。

import ogr

driver = ogr.GetDriverByName(‘ESRI Shapefile’)

数据驱动driver的open()方法返回一个数据源对象

open(<filename>, <update>)

其中update为0是只读,为1是可写

例如:

from osgeo import ogr

driver = ogr.GetDriverByName('ESRI Shapefile')

filename = 'C:/Users/gongwei/Documents/My eBooks/python_and_sage/GDAL python/test/ospy_data1/sites.shp'

dataSource = driver.Open(filename,0)

if dataSource is None:

print 'could not open'

sys.exit(1)

print 'done!'

注意filename一定要写绝对路径!

因为一定要用绝对路径,为了简化代码,经常会使用到os.chdir()

读取数据层

layer = dataSource.GetLayer(0)

一般ESRI的shapefile都是填0的,如果不填的话默认也是0.

再看看这个数据层里面有几个点呢?

n = layer.GetFeatureCount()

print 'feature count:', n

读出上下左右边界

extent = layer.GetExtent()

print 'extent:', extent

print 'ul:', extent[0], extent[3]

print 'lr:', extent[1], extent[2]

读取某一要素feature(总算切入正题了),这里读取的是一个点

feat = layer.GetFeature(41)

fid = feat.GetField('id')

print fid

feat = layer.GetFeature(0)

fid = feat.GetField('id') #should be a different id

print fid

另外还有按顺序读取feature,循环遍历所有的feature

feat = layer.GetNextFeature() #读取下一个

while feat:

feat = layer.GetNextFeature()

later.ResetReading() #复位

提取feature的几何形状

geom = feat.GetGeometryRef()

geom.GetX()

geom.GetY()

print geom.

释放内存

feature.Destroy()

关闭数据源,相当于文件系统操作中的关闭文件

dataSource.Destroy()

读完了再说怎么写

创建新文件

driver.CreateDataSource(<filename>)

但是这个文件不能已经存在了,否则会出错

创建新的layer

dataSource.CreateLayer(<name>,CreateLayer(<name>, geom_type=<OGRwkbGeometryType>, [srs])

举个例子:

ds2 = driver.CreateDataSource('test.shp')

layer2 = ds2.CreateLayer('test', geom_type=ogr.wkbPoint)

要删除一个shp文件

driver.DeleteDataSource('test.shp')

要添加一个新字段,只能在layer里面加,而且还不能有数据

添加的字段如果是字符串,还要设定宽度

fieldDefn = ogr.FieldDefn('id', ogr.OFTString)

fieldDefn.SetWidth(4)

layer.CreateField(fieldDefn)

添加一个新的feature,首先得完成上一步,把字段field都添加齐了

然后从layer中读取相应的feature类型,并创建feature

featureDefn = layer.GetLayerDefn()

feature = ogr.Feature(featureDefn)

设定几何形状

feature.SetGeometry(point)

设定某字段的数值

feature.SetField('id', 23)

将feature写入layer

layer.CreateFeature(feature)

GDAL python教程(1)——用OGR读写矢量数据的更多相关文章

  1. 使用GDAL/OGR读写矢量文件

    感觉GIS中矢量相关内容还是挺庞杂的,并且由于版本迭代的关系,使用GDAL/OGR读写矢量的资料也有点不太一样.这里总结了一个读写矢量的示例,实现代码如下: #include <iostream ...

  2. 七. Python基础(7)--文件的读写

    七. Python基础(7)--文件的读写 1 ● 文件读取的知识补充 f = open('file', encoding = 'utf-8') content1 = f.read() content ...

  3. Ubuntu中安装gdal python版本

    安装过程: python包是从C++包中编译出来的,所以需要将源码下载进行编译安装 1.GDAL中的矢量数据处理OGR依赖于Geos,在安装GDAL之前要安装Geos Geos的下载地址:http:/ ...

  4. python入门灵魂5问--python学习路线,python教程,python学哪些,python怎么学,python学到什么程度

    一.python入门简介 对于刚接触python编程或者想学习python自动化的人来说,基本都会有以下python入门灵魂5问--python学习路线,python教程,python学哪些,pyth ...

  5. 《简明python教程》笔记一

    读<简明Python教程>笔记: 本书的官方网站是www.byteofpython.info  安装就不说了,网上很多,这里就记录下我在安装时的问题,首先到python官网下载,选好安装路 ...

  6. Python教程:连接数据库,对数据进行增删改查操作

    各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:操作数据库,MySql的安装详解 和python基础知识之上 ...

  7. Python教程:操作数据库,MySql的安装详解

    各位志同道合的同仁请点击上方关注 本教程是基于Python语言的深入学习.本次主要介绍MySql数据库软件的安装.不限制语言语法,对MySql数据库安装有疑惑的各位同仁都可以查看一下. 如想查看学习P ...

  8. (原+转)简明 Python 教程:总结

     简明 Python 教程 说明:本文只是对<简明Python教程>的一个总结.请搜索该书查看真正的教程. 第3章 最初的步骤 1. Python是大小写敏感的. 2. 在#符号右面的内容 ...

  9. Python教程百度网盘哪里有?

    Python为我们提供了非常完善的基础代码库,覆盖了网络.文件.GUI.数据库.文本等大量内容,被形象地称作"内置电池(batteries included)".带你快速入门的Py ...

随机推荐

  1. [Linked List]Reverse Linked List,Reverse Linked List II

    一.Reverse Linked List  (M) Reverse Linked List II (M) Binary Tree Upside Down (E) Palindrome Linked ...

  2. juce中的内存泄漏检测

    非常值得借鉴的做法,基于引用计数和局部静态变量,代码比较简单不加详解. //============================================================== ...

  3. mysql表结构设计

    允许NULL值的字段,数据库在进行比较操作时,会先判断其是否为NULL,非NULL时才进行值的必对.因此基于效率的考虑,所有字段均不能为空,即全部NOT NULL: 对于变长表,由于记录大小不同,在其 ...

  4. linux 下访问mysql

    1:先进到root:/# /usr/local/mysql/bin/2:root:/# mysql -u root -p     Enter password:

  5. 【学习笔记01】:hover为DIV添加鼠标悬停时改变颜色的效果

    :hover所有主流浏览器都支持(IE6.0以下支持不好,以后再学习用Javascript来实现悬停效果) 这是一个绿色底白色Icon的搜索按钮

  6. for之Python vs C#

    class test(object): def rangetest(self): for i in range(2,0,-1): print i print i i=2 while i>0: p ...

  7. Flink Program Guide (9) -- StateBackend : Fault Tolerance(Basic API Concepts -- For Java)

    State Backends 本文翻译自文档Streaming Guide / Fault Tolerance / StateBackend ----------------------------- ...

  8. DenyHosts安装及配置

    一.DenyHost简介 DenyHosts是Python语言写的一个程序软件,运行于Linux上预防SSH暴力破解的,它会分析sshd的日志文件(/var/log/secure),当发现重复的攻击时 ...

  9. gulp api

    gulp api 简介 gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成 gulp是基于Nod ...

  10. sqlserver 增加用户并分配权限

    1.创建用户cmd2:CREATE LOGIN cmd2 WITH  PASSWORD='123qwe!@#',DEFAULT_DATABASE=DEV_CMD CREATE USER cmd2 FO ...