本教程的讲义和源码都是取自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. poj3292-类素数筛选法

    #include<iostream>using namespace std;const int N=1000002;int array[N]={0};int main(){ int n;  ...

  2. CreateMutex() 、ReleaseMutex()

    功能: CreateMutex() 用于有独占要求的程序 (在其进程运行期间不允许其他使用此端口设备的程序运行,或不允许同名程序运行). 比如运行金山词霸时,一次只能运行一个实例,当运行第二个实例时, ...

  3. 更改linux系统提示信息

    一个好的习惯会让人终生受益,当然我们做运维也是如此,比如我们在前期维护系统时修改或者删除掉/etc/issue /etc/issue.net这两个文件. 修改和删除的目的是屏蔽系统版本信息,这样是为了 ...

  4. Android 混淆文件project.properties和proguard-project.txt

    参考文档:http://blog.csdn.net/xueyepiaoling/article/details/8202359 http://glblong.blog.51cto.com/305861 ...

  5. 用gson 解 json

    1.json 简单介绍 轻量级数据存储传输文件,比xml精简. 2.Gson简单介绍 android中解json方式很多,比较常用json-lib  goole-Gson. json-lib要包含的包 ...

  6. Congos

    http://hi.baidu.com/tag/cognos%E7%B3%BB%E7%BB%9F%E7%AE%A1%E7%90%86/feeds http://www.blogjava.net/mlh ...

  7. 微信cookie内容

    #LWP-Cookies-1.0 Set-Cookie3: webwx_data_ticket="AQeVHpn/pdyrAQHCl++4ZvS0"; path="/&q ...

  8. rpm安装软件(需管理员权限)

    常用命名规范 linux-1.2.0-30.e16.i686.rpm rpm基本命令 安装rpm -i software.rpm 卸载rpm -e software 升级rpm -U software ...

  9. Unix/Linux环境C编程入门教程(19)Red Hat Entetprise Linux 7.0环境搭建

    位架构,包括英特尔X-86_64.Power和s390.动态定时能力将降低内核内部中断数量,Open vSwitch 2.0功能可调节虚拟机之间的流量.RHEL 7中默认的文件系统是XFS,包含了一个 ...

  10. Mactype 解决字体出现剃尾

    使用mactype之后, 发现windows字体的效果改善了好多.但作为程序员, 天天和各种文本工具打交道.最近发现PHPStorm中的有些等宽字体会出现剃尾的现象.特别是 {} [] ()这些字符, ...