矢量数据格式访问开源包OGR
- 格式:ppt
- 大小:101.50 KB
- 文档页数:32
基于GDAL/OGR的测绘成果检查方法测绘内业成果通常都有着严格的要求,包括字段名称、字段类型及赋值等方面。
为了提高内业成果的审核效率,可以开发专用工具来实现自动检查。
本文以开源的GIS库GDAL/OGR为例,详细介绍测绘成果审核的流程、方法及实行方式。
同时介绍GDAL/OGR库,抛砖引玉,拓展开源GIS技术在测绘行业中的应用。
标签:GDAL/OGR 开源GIS0引言测绘内业成果结果多为shape file、coverage、ESRI Geodatabase等通用的矢量数据格式,对这些格式的数据进行读取操作需要使用成熟的GIS平台,比如ArcGIS、SuperMap和GDAL/OGR等。
由于ArcGIS、SuperMap是商业软件,且有严格的版本限制;GDAL/OGR是一套开源的GIS库,使用GDAL/OGR可以摆脱授权、版本等依赖,不影响现有的作业环境。
因此我们选用GDAL/OGR来开发数据审核工具。
1 GDAL/OGR介绍GDAL/OGR是一套开源的GIS库,提供各种GIS算法和多种开发语言的支持,如c++、.Net、Java、Perl、Python等,广泛用于多个GIS平台,如ESRI的ARCGIS ,Google Earth和跨平台的GRASS GIS系统。
利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持。
2设计思路2.1数据审核流程内业成果数据的审核,其核心只有一个,就是对所有数据进行规则匹配,如果全部满足规则要求,则是合格数据;如果有一条规则不符合,则视为不合格数据。
因此数据的审核流程就是对所有数据,对照设计规则一一比对,首先审核规则一、如果符合规则一,则继续比对规则二、否则退出。
如此循环,直到比对完规则库中所有的规则,如果全部符合,则判定为合格的数据,否则判定为不合格数据。
2.2 GDAL/OGR数据读取方法GDAL/OGR库目前最新版本为1.11,可上GDAL的网站http://www.gdal.ogr 去下载最新的源代码及编译后的成果。
下面我们来看一下使用OGR创建数据集的更常用的情形。
这一部分重点说明一下如何使用OGR创建数据集的几何形状,对于字段、属性的处理,放到后面。
对于创建Geometry来讲,wkt是最直观的。
wkt是最简单的字符串格式,Python提供了丰富的函数来对字符串进行处理。
使用wkt创建矢量数据集与使用拷贝的方法创建数据集的基本步骤是一样的。
首先是创建Driver,然后创建dataSource,再创建Layer,接下来就创建Feature了。
这是分别创建点、线、与多边形,使用extent变量来存储多边形的四个角点,点、线的坐标根据extent变量来生成。
下面先看一下生成的数据的图,可能会更加有助于理解。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 from osgeo import ogrimport os,mathdriver = ogr.GetDriverByName("ESRI Shapefile")extfile = 'point_demo.shp'point_coors = [[300,450], [750, 700], [1200, 450], [750, 200], [750, 450]]print point_coorsdriver = ogr.GetDriverByName("ESRI Shapefile")if os.access( extfile, os.F_OK ):driver.DeleteDataSource( extfile )newds = driver.CreateDataSource(extfile)layernew = newds.CreateLayer('point',None,ogr.wkbPoint)for aa in point_coors:wkt = 'POINT (' + str(aa[0]) + ' ' + str(aa[1]) + ')'geom = ogr.CreateGeometryFromWkt(wkt)feat = ogr.Feature(layernew.GetLayerDefn())feat.SetGeometry(geom)layernew.CreateFeature(feat)newds.Destroy()1 2 from osgeo import ogrimport os,math3 4 5 6 7 8 910111213141516171819202122 driver = ogr.GetDriverByName("ESRI Shapefile")extfile = 'line_demo.shp'point_coors = [300,450, 750, 700, 1200, 450, 750, 200]print point_coorsdriver = ogr.GetDriverByName("ESRI Shapefile")if os.access( extfile, os.F_OK ):driver.DeleteDataSource( extfile )newds = driver.CreateDataSource(extfile)layernew = newds.CreateLayer('point',None,ogr.wkbLineString)wkt = 'LINESTRING (%f %f,%f %f,%f %f,%f %f,%f %f)' % (point_coors[0],point_coors[1], point_coors[2],point_coors[3], point_coors[4],point_coors[5],point_coors[6],point_coors[7], point_coors[0],point_coors[1])print(wkt)geom = ogr.CreateGeometryFromWkt(wkt)feat = ogr.Feature(layernew.GetLayerDefn())feat.SetGeometry(geom)layernew.CreateFeature(feat)newds.Destroy()1 2 3 4 5 6 from osgeo import ogrimport os,mathdriver = ogr.GetDriverByName("ESRI Shapefile")extfile = 'rect_demo.shp'if os.access( extfile, os.F_OK ):7 8 91011121314151617181920212223242526 driver.DeleteDataSource( extfile )extent = [400, 1100, 300, 600]newds = driver.CreateDataSource(extfile)layernew = newds.CreateLayer('rect',None,ogr.wkbPolygon)width = math.fabs(extent[1]-extent[0])height = math.fabs(extent[3]-extent[2])tw = width/2th = width/2extnew = extent[0]+twwkt = 'POLYGON ((%f %f,%f %f,%f %f,%f %f,%f %f))' % (extent[0],extent[3], extent[1],extent[3], extent[1],extent[2],extent[0],extent[2], extent[0],extent[3])geom = ogr.CreateGeometryFromWkt(wkt)feat = ogr.Feature(layernew.GetLayerDefn())feat.SetGeometry(geom)layernew.CreateFeature(feat)newds.Destroy()。
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文件只有一个多边形要素,如果有多个要素,需要修改代码来遍历所有要素。
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参数来指定一个范围,只输出该范围内的矢量数据。
Python与开源GIS:使用OGR生成几何要素对象
2012-05-11 07:30 作者: bukunu 来源: 本站
摘要: 前面部分我们详细地介绍了如何读取矢量数据,包括数据源、图层、要素、几何形状、字段属性等各个部分。
下面来看一下如何使用OGR来创建矢量数据,亦即使用OGR 写GIS矢量文件。
首先先看一下写文件的示意。
在这里先不对这个图做太多的解释,但是在后面介绍各个部分的时候,...
前面部分我们详细地介绍了如何读取矢量数据,包括数据源、图层、要素、几何形状、字段属性等各个部分。
下面来看一下如何使用OGR来创建矢量数据,亦即使用OGR写GIS矢量文件。
首先先看一下写文件的示意。
在这
里先不对这个图做太多的解释,但是在后面介绍各个部分的时候,请自行参考此图。
建立空的geometry对象:的类型,常用的有:ogr.wkbPoint,ogr.wkbLineString,ogr.wkbPolygon。
定义各种不同的geometry使用的方法是不一样的。
在构建
这三种不同的要素时,要注意使用的格式。
创建点要素
下面我们先来看一下如何创建一个点。
注意,此时只是在内存中将对象创建出来,跟文件没有关系。
ogr 合并要素合并要素:ogr 是一种开源的地理信息系统(GIS) 工具,可以用于将不同格式的地理数据进行转换和合并。
它可以将矢量数据(如点、线、面)和栅格数据(如影像)合并到一个统一的数据集中。
在这篇文章中,我将向您介绍如何使用ogr 工具来合并不同格式的地理数据。
不过,在开始之前,我想先向您简单介绍一下ogr 工具的背景和功能。
ogr 是一个功能强大的工具,它可以读取和写入多种地理数据格式,如shapefile、GeoJSON、KML 等。
使用ogr,您可以轻松地将这些格式的数据进行转换和合并。
无论您是在进行空间分析、地图制作还是其他地理数据处理工作,ogr 都是一个非常实用的工具。
让我们来看一个简单的例子。
假设我们有两个shapefile 文件,一个包含城市的点数据,另一个包含道路的线数据。
我们希望将这两个文件合并成一个文件,以便更方便地进行后续的空间分析。
我们需要打开 ogr 工具。
在命令行中输入 "ogr2ogr" 命令,然后加上相关的参数。
例如,要将城市点数据和道路线数据合并到一个名为merged.shp 的文件中,可以使用以下命令:ogr2ogr -f "ESRI Shapefile" merged.shp cities.shp -append roads.shp 在上述命令中,"-f" 参数指定输出格式为shapefile,"merged.shp"是输出文件的名称,"cities.shp" 是第一个输入文件(城市点数据),"-append" 参数表示将第二个输入文件(道路线数据)附加到输出文件中。
如果一切顺利,您应该可以看到ogr 工具开始执行,并在完成后生成 merged.shp 文件。
这个文件将包含合并后的城市点数据和道路线数据。
除了shapefile 格式,ogr 还支持其他格式的数据转换和合并。
arcgis里面ogr类型
ArcGIS中的OGR(OpenGIS Simple Features Reference Implementation,开放地理信息系统简单要素参考实现)类型是指支持矢量数据操作的一组库。
OGR是一个开源的几何库,提供了许多用于读写和处理地理矢量数据的功能。
在ArcGIS中,OGR类型通常指与矢量数据相关的数据类型,包括点、线、面等。
以下是一些常见的OGR类型及其中文对应:
1.OGRPoint:点类型,表示地理空间中的一个点。
2.OGRLineString:线类型,表示地理空间中的一条线。
3.OGRPolygon:面类型,表示地理空间中的一个多边形。
4.OGRMultiPoint:多点类型,表示地理空间中的多个点。
5.OGRMultiLineString:多线类型,表示地理空间中的多条线。
6.OGRMultiPolygon:多面类型,表示地理空间中的多个多边形。
7.OGRGeometryCollection:几何集合类型,表示包含多个几何对象的集合。
这些类型是OGR库中用于表示不同地理空间几何对象的基本构建块。
在ArcGIS中,当涉及到矢量数据的读取、编辑和处理时,OGR类型会被用来描述和操作这些空间几何对象。
ogr2ogr 仿射变换OGR2OGR 是一个用于转换和操作空间数据的开源工具,它可以进行各种几何操作,包括仿射变换。
仿射变换是一种二维坐标变换,可以对图像或地图进行平移、缩放、旋转和倾斜等操作。
要使用 OGR2OGR 进行仿射变换,你需要按照以下步骤进行操作:1. 安装 OGR2OGR:首先,确保你已经安装了 OGR2OGR。
你可以通过运行以下命令来安装:```pip install ogr2ogr```2. 准备输入数据:准备要进行仿射变换的输入数据。
这可以是一个矢量数据文件(如Shapefile、GeoJSON 等)或栅格数据文件(如 TIFF、PNG 等)。
3. 定义仿射变换参数:确定你希望进行的仿射变换的参数。
这些参数包括缩放比例、旋转角度、平移量等。
你可以使用 Python 中的 NumPy 库来定义这些参数。
4. 执行 OGR2OGR 命令:使用 OGR2OGR 命令执行仿射变换。
以下是一个示例命令,假设你的输入数据是一个 Shapefile,输出数据将是一个新的 Shapefile:```ogr2ogr -f "ESRI Shapefile" output.shp input.shp -a_ affine ".sx sy tx ty"```其中,`output.shp` 是输出的 Shapefile 路径,`input.shp` 是输入的 Shapefile 路径,`-a_ affine "sx sy tx ty"` 是指定仿射变换参数的选项,`sx`、`sy` 是水平和垂直缩放比例,`tx`、`ty` 是水平和垂直平移量。
5. 查看输出结果:执行 OGR2OGR 命令后,你将得到一个经过仿射变换的输出数据。
你可以使用适当的 GIS 软件打开输出数据并查看变换后的结果。
请注意,具体的 OGR2OGR 命令和参数可能会根据你的输入数据和输出要求有所不同。
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 #删除变量强制关闭⽂件。
测绘软件的数据格式转换和融合方法介绍测绘软件是地理信息系统 (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 中,编码指的是地理对象与属性数据之间的关联。
1 2 3 4 5 6 7 from osgeo import ogrimport os,mathinshp = '/gdata/world_borders.shp'ds = ogr.Open(inshp)driver = ogr.GetDriverByName("ESRI Shapefile") outputfile = '/gdata/world_borders_copy.shp'if os.access( outputfile, os.F_OK ):8 9 10 driver.DeleteDataSource( outputfile )pt_cp = driver.CopyDataSource(ds, outputfile) pt_cp.Release()1 2 3 4 5 6 7 8 910111213 from osgeo import ogrimport os,mathinshp = '/gdata/world_borders.shp'ds = ogr.Open(inshp)driver = ogr.GetDriverByName("ESRI Shapefile")outputfile = '/gdata/world_borders_copy2.shp'if os.access( outputfile, os.F_OK ):driver.DeleteDataSource( outputfile )layer = ds.GetLayer()newds = driver.CreateDataSource(outputfile)# layernew = newds.CreateLayer('linescopy',None,ogr.wkbLineString)pt_layer = newds.CopyLayer(layer, 'abcd')newds.Destroy()为了对layer进行拷贝操作,首先得有数据源。