矢量数据格式访问开源包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 还支持其他格式的数据转换和合并。