矢量数据格式访问开源包OGR.
- 格式:ppt
- 大小:101.50 KB
- 文档页数:32
GDALpython教程(1)——⽤OGR读写⽮量数据本教程的讲义和源码都是取⾃Utah State University的openGIS课程相关资料,包括讲义、源码、数据样例,请从此处下载本⼈只是做点翻译,写写学习体会⽽已,版权属于原作者。
欢迎转载,不过别忘了上⾯这段话。
==================================================为什么⽤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:下⼀代的Numeric3. 更强⼤的gis库导⼊库:import ogr或者:from osgeo import ogr万能的⽅法是:try:from osgeo import ogrexcept:import ogr要读取某种类型的数据,必须要先载⼊数据驱动,也就是初始化⼀个对象,让它“知道”某种数据结构。
import ogrdriver = ogr.GetDriverByName(‘ESRI Shapefile’)数据驱动driver的open()⽅法返回⼀个数据源对象open(<filename>, <update>)其中update为0是只读,为1是可写例如:from osgeo import ogrdriver = 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:', extentprint 'ul:', extent[0], extent[3]print 'lr:', extent[1], extent[2]读取某⼀要素feature(总算切⼊正题了),这⾥读取的是⼀个点feat = layer.GetFeature(41)fid = feat.GetField('id')print fidfeat = layer.GetFeature(0)fid = feat.GetField('id') #should be a different idprint fid另外还有按顺序读取feature,循环遍历所有的featurefeat = 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>)但是这个⽂件不能已经存在了,否则会出错创建新的layerdataSource.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类型,并创建featurefeatureDefn = layer.GetLayerDefn()feature = ogr.Feature(featureDefn)设定⼏何形状feature.SetGeometry(point)设定某字段的数值feature.SetField('id', 23)将feature写⼊layer layer.CreateFeature(feature)。
GDAL python教程基础篇OGR空间计算GDAL是一个用于地理空间数据读写的库,它支持多种常见的地理格式,如GeoTIFF和ESRI Shapefile等。
而OGR则是GDAL中的一个子库,它支持矢量数据格式,如ESRI Shapefile和GeoJSON等。
本文主要介绍如何使用OGR进行空间计算。
首先需要安装GDAL和OGR,可以通过pip来安装:```bashpip install gdal```接着可以在Python中使用OGR来读取矢量数据,如下所示:```pythonfrom osgeo import ogr# 打开Shapefile文件driver = ogr.GetDriverByName('ESRI Shapefile')dataSource = driver.Open('data.shp', 0)# 获取图层layer = dataSource.GetLayer()# 可以遍历所有要素for feature in layer:# 处理每个要素```接着可以使用OGR进行空间计算,如计算两个多边形的相交部分,代码如下:```pythonfrom osgeo import ogr# 打开Shapefile文件driver = ogr.GetDriverByName('ESRI Shapefile')dataSource1 = driver.Open('data1.shp', 0)dataSource2 = driver.Open('data2.shp', 0)# 获取图层layer1 = dataSource1.GetLayer()layer2 = dataSource2.GetLayer()# 获取多边形要素polygon1 = layer1.GetFeature(0).GetGeometryRef()polygon2 = layer2.GetFeature(0).GetGeometryRef()# 计算相交部分intersection = polygon1.Intersect(polygon2)# 打印相交面积print(intersection.GetArea())```以上代码假设每个Shapefile文件只有一个多边形要素,如果有多个要素,需要修改代码来遍历所有要素。
测绘软件的数据格式转换和融合方法介绍测绘软件是地理信息系统 (GIS) 领域中不可或缺的工具,它们能够将地理数据转换为可视化的地图和图形。
而在测绘过程中,数据格式转换和融合是常见的需求,本文将介绍测绘软件中常用的数据格式转换和融合方法。
一、数据格式转换1. 矢量数据格式转换矢量数据是由点、线、面等几何要素构成的地理数据,常见的格式包括Shapefile、GeoJSON和KML等。
在测绘过程中,不同的软件可能支持不同的矢量数据格式,因此需要进行格式转换。
常用的矢量数据格式转换工具包括GDAL和OGR。
GDAL (Geospatial Data Abstraction Library) 是一个开源的库,能够读取和写入多种地理数据格式;而OGR (Simple Features Library) 则是GDAL中的一个模块,专门用于矢量数据格式转换。
使用GDAL和OGR进行矢量数据格式转换非常简单。
例如,使用以下命令将Shapefile格式转换为GeoJSON格式:```shellogr2ogr -f GeoJSON output.geojson input.shp```2. 栅格数据格式转换栅格数据是由像素组成的二维网格,常见的格式包括TIFF、JPEG、PNG等。
在测绘过程中,栅格数据的格式转换常常用于不同软件之间或不同设备之间的数据交换。
GDAL同样支持栅格数据格式的转换。
例如,使用以下命令将TIFF格式转换为JPEG格式:```shellgdal_translate -of JPEG input.tif output.jpg```二、数据融合数据融合是将不同数据源的测绘数据整合在一起,形成更完整和准确的地理信息。
在实际应用中,常见的数据融合方法包括覆盖、融合、融合和遮挡等。
1. 覆盖覆盖是指将一个数据图层覆盖在另一个数据图层之上,从而得到一个包含两个图层信息的新图层。
这种数据融合方法常用于将不同比例尺的地图叠加在一起,以便更好地显示地理信息。
ogr2ogr 转换shapefile 编码摘要:1.引言2.ogr2ogr 转换器的作用3.Shapefile 格式的特点4.编码在Shapefile 中的应用5.ogr2ogr 转换shapefile 编码的步骤6.结语正文:一、引言地理信息系统(GIS)是处理地理空间数据的一种技术,它广泛应用于资源管理、环境保护和城市规划等领域。
在GIS 中,Shapefile 是一种常见的矢量数据格式。
为了在GIS 软件中使用Shapefile,需要将其转换为相应的数据格式。
ogr2ogr 是一款开源的GIS 数据转换工具,可以方便地将Shapefile 转换为其他格式。
本文将介绍如何使用ogr2ogr 转换器转换Shapefile 编码。
二、ogr2ogr 转换器的作用ogr2ogr 是一款功能强大的GIS 数据转换工具,它可以实现多种地理信息数据格式之间的转换。
ogr2ogr 支持Shapefile、GeoJSON、KML、GPXG 等格式,可以满足大部分GIS 数据处理需求。
在本文中,我们将重点关注ogr2ogr 在Shapefile 转换方面的应用。
三、Shapefile 格式的特点Shapefile 是一种常用的矢量数据格式,它包含了几何对象和属性数据。
Shapefile 的主要特点如下:1.存储空间:Shapefile 采用文件存储方式,将地理信息数据与属性数据分别存储在不同的文件中,方便数据的管理和查询。
2.数据结构:Shapefile 中的几何对象采用几何图形和节点构成,支持点、线、面等不同类型的几何对象。
3.属性数据:Shapefile 中的属性数据采用dbf 文件存储,可以包含多个字段,支持各种数据类型。
4.投影系统:Shapefile 支持多种投影系统,可以根据实际需求选择合适的投影系统。
四、编码在Shapefile 中的应用在Shapefile 中,编码指的是地理对象与属性数据之间的关联。
pythonOGR操作⽮量数据OGR简单要素库是地理空间数据抽象库(GDAL)的⼀部分,是⼀个开源库,可以读写许多不同格式的⽮量数据,编辑属性值,筛选等。
当使⽤OGR打开数据源,例如Shapefile⽂件、GeoJSON⽂件,会有⼀个DataSource对象,此数据源可以有⼀个或者多个⼦图层对象,每⼀个图层代表数据源中的⼀个数据集,许多⽮量数据格式(如Shapefile)只能包含⼀个数据集,但是其他如SpatialLite可以包含多个数据集,不管⼀个数据源中有多少数据集,每⼀个数据集都被OGR认为是⼀个图层,也就是说在数据源和实际数据集之间多了⼀个叫做图层(Layer)的东西,这⼀点需要注意理清概念。
对于实际的数据,每⼀个图层都是要素对象的集合,包含其⼏何形状和属性,如果在GIS软件中加载⼀个思路数据,在属性表中的每⼀⾏对应⼀个要素,每列对应⼀个属性字段,在⼀些GIS软件中(ArcGIS)在属性表中会有⼀个shape列显⽰⼏何对象。
读取⽮量数据需要记住⼀个数据源由⼀个或多个图层组成,所以打开数据源后,需要获得具体的图层数据源有⼀个GetLayer函数,可以来获得图层索引或者图层名,图层索引从0开始,默认返回第⼀个图层Shapefile数据源只有⼀个图层,所以不需要提供索引图层由⼀个或多个要素组成,每⼀个要素表⽰⼀个地理对象。
地理对象的⼏何形状和属性值存储在这些要素中from osgeo import ogrimport sysfn=r"D:\00Paper\00Data\zonal_shp\watershed.shp"ds=ogr.Open(fn,0)#1为编辑模式if ds is None:sys.exit('Could not open {0}.'.format(fn))lyr = ds.GetLayer(0)#输出前10个要素的信息i=0for feat in lyr:pg=feat.geometry()name=feat.GetField('ID')print(name)i+=1if i==10:breaknum_features=lyr.GetFeatureCount()#要素个数del ds #删除变量强制关闭⽂件。
GDAL (Geospatial Data Abstraction Library) 是一个在地理信息系统(GIS)领域中非常流行的开源库,它提供了对各种地理空间数据格式的支持。
而 ogr2ogr 则是 GDAL 中一个重要的命令行工具,用于在不同的地理空间数据格式之间进行转换和处理。
本篇文章将重点介绍如何使用 gdal ogr2ogr 工具来进行矢量瓦片的转换。
1. 背景介绍为了更好地展示地理空间数据,瓦片地图已经成为了 Web 地图服务的标准。
瓦片地图分为矢量瓦片和栅格瓦片两种类型,其中矢量瓦片由矢量数据渲染而成,能够在不同的屏幕分辨率下展现清晰的线条和图形,而栅格瓦片则是基于图片的瓦片,无法进行动态样式调整。
2. 使用 gdal ogr2ogr 转矢量瓦片在进行矢量瓦片转换之前,我们需要先准备好输入的矢量数据。
GDAL 支持的矢量数据格式有 Shapefile、GeoJSON、FileGDB 等,我们可以根据实际情况选择合适的格式作为输入。
接下来,我们可以使用ogr2ogr 命令行工具来进行矢量瓦片的转换。
下面是一个简单的示例:```bashogr2ogr -f MVT output.mbtiles input.shp```在这个示例中,我们使用 ogr2ogr 将一个名为 input.shp 的Shapefile 转换为矢量瓦片,并将结果输出为名为 output.mbtiles 的MBTiles 格式文件。
在实际应用中,我们还可以根据需要选择其他的输出格式,比如 GeoPackage 或者 GeoJSON 等。
3. 高级用法除了简单的矢量瓦片转换之外,gdal ogr2ogr 工具还支持一些高级的用法,比如对瓦片进行裁剪、过滤或者合并等操作。
我们可以使用ogr2ogr 命令的-sql参数来对输入数据进行 SQL 查询,并将查询结果转换为矢量瓦片。
又如,我们可以使用 ogr2ogr 的-clipdst参数来指定一个范围,只输出该范围内的矢量数据。