您好,欢迎访问三七文档
OGR门入陈泰生2008.813前言OGR是一个读取和处理GIS矢量数据的开源代码库。它可以读取和处理多种流行的矢量数据(如ESRI的Shapefile、S-57、SDTS、PostGIS、OracleSpatial、以及Mapinfo的mid/mif和TAB格式),本文将讲解OGR库的安装、OGR的数据模型以及主要类的函数功能,最后将通过几个实例具体的讲述如何调用OGR的函数来满足我们的需求。作者简介:陈泰生,男,江苏姜堰人,南京师范大学虚拟地理环境教育部重点实验室GIS博士研究生,ts_chen@yahoo.cn1OGR库安装OGR是GDAL的配套库,它是GDAL库的一个部分,只要你安装了GDAL库,就已经拥有了OGR库。1.1Windows下的安装官方安装文档在这里。下面是我自己的实践步骤:①先去下一个版本,解压。打开控制台,输入:“C:\ProgramFiles\MicrosoftVisualStudio8\VC\bin\vcvars32.bat注册VC的编译环境。②打开gdal文件夹下的nmake.opt修改GDAL_HOME=C:\warmerda\bld把路径改到需要把gdal安装的地方。不改也可以。这里需要添加python支持,所以修改PY_INST_DIR=$(GDAL_HOME)\pymod把路径改成python下的Lib\site-packages文件夹下。PYDIR=C:\Software\Python24改成python的安装路径。下面的参数想改什么就把前面的#删除(要看您有没有那些库的源码),注意一下路径就可以了。后面就依次运行。nmake/fmakefile.vcnmake/fmakefile.vcinstallnmake/fmakefile.vcdevinstall③去GDAL_HOME目录下的bin文件夹下把gdal14.dll拷贝到PY_INST_DIR路径下,这样就完成安装gdal(python)的工作。最后需要注意一下,gdal在vc++.net2005下只能顺利编译1.2,1.3系列的版本不能顺利编译,有一个地方指针转换出错。可能是2005的编译器比以往的严厉一点吧。但是vc++.net2005却可以正常编译1.4版本,不过要支持Python,需要改一个地方:打开Pymod目录下的makefile.vc,然后找到link这两行:link/dll/def:_gdal.def$(OBJ)../gdal_i.lib/LIBPATH(PYDIR)/libs\/out(PYGDAL_DLL)然后在下面添加一行:Ifexist$(PYGDAL_DLL).manifestmt-manifest$(PYGDAL_DLL).manifest-outputresource:$(PYGDAL_DLL);2如果不加这行,会出现一个“找不到MSVCR80.DLL”的错误,这个错误是由于VS.net2005强制进行manifest验证造成的。而且这个manifest的问题相当棘手,对发布也有极坏的影响。另外,安装了QGIS,对编译也有一些影响,主要是proj库的冲突,导致一个找不到d:/program.obj文件的错误,如果你有静态编译过proj,那么你可以打开nmake.opt修改有关proj的设置,如果搞不定,就卸载QGIS,然后编译,编译后再安装QGIS。51.2Linux下的安装Linux下的安装比较简单,只要依次运行下面几步即可。cdgdal./configuremakesumakeinstallexit第一步需要看是否依赖的库都安装了。如果缺少,就去安装一个。如果对configure的条件不理解,可以用./configure—help查看帮助。1.3GEOS辅助库的安装GEOS(GeometryEngine,OpenSource)是一个集合形状的拓扑关系操作实用库,简单的说,即判断两个几何形状之间关系和对两个几何形状进行操作以形成新的几何形状的库。1.3.1GEOS库的安装GEOS开源库在Linux上面安装比较简单,可以参照其官方文档,所以此处将只介绍它在Windows下面的安装方法,将其分为以下几步。①去GEOS的官方网站上下载geos的geos-3.0.0版,解压,假设解压路径下面都表示为$GEOSHOME。②打开控制台,输入:“C:\ProgramFiles\MicrosoftVisualStudio8\VC\bin\vcvars32.bat注册VC的编译环境。值得注意的是:GEOS库不支持VC6.0编译。③进入$GEOSHOME\source,运行nmake/fmakefile.vc,若成功编译,恭喜!geos的C++版已经可以用,您可以自由的使用GEOS的动态库了!如果失败,不要气馁,切忌急躁,仔细查看控制台上的出错原因。下面将本人所遇到的几个问题罗列出来,以供大家参考。⒈缺少dirlist.mk文件。您可以到GEOS的SVN网站上查看该文件的内容,然后新建它,将网上的该文件内容拷贝其中,并放在对应的路径下。2.无法找到version.h.vc文件。可以将下载的GEOS3.0.0压缩包中的version.h文件改为后缀是vc的version.h.vc文件,platform.h.vc同理。3.无法找到AssertionFailedException.cpp文件。同样可以到GEOS的SVN网站上查看该CPP文件的代码,然后新建一个文本文件,将代码拷贝其中,再把该文本文件的名称及文件类型改为AssertionFailedException.cpp即可。值得注意的是,新建的文件需要在正确的路径6中,其路径可以在控制台的该出错信息上得知。类似情况同理,在此不再累赘。④进入$GEOSHOME\swig\python目录,运行swig-c++-python-modern-ogeos_wrap.cxx../geos.i(注意,这里的前提是你有swig,没有去下一个swigforwindows,然后把swig.exe所在目录加入path环境变量。打开setup.py,去掉有stdc++.lib的那行,然后把libgeos.a改成geos.lib,运行pythonsetup.pybuild,运行pythonsetup.pyinstall。至此,GEOS的安装已经完成。1.3.2让GEOS作为OGR的辅助支持在OGR中添加GEOS支持比较简单,可以用到GEOS的功能,先参考上面的步骤编译出geos.lib静态库。然后打开gdal主目录下的nmake.opt修改:GEOS_CFLAGS=-IC:/warmerda/geos-3.0.0/source/headers-DHAVE_GEOSGEOS_LIB=C:/warmerda/geos-3.0.0/source/geos.lib这两行,把前面的“#”号去掉,然后把两个路径修改成geos下对应的目录。注意:第一个需要修改的是从-I开始到-D结束,写得是GEOS头文件所在的headers目录,而且-D前面有空格。第二个是从=开始,到行末,写的是geos.lib所处路径。然后重新编译gdal库。如果出现一些链接错误(LINK问题),可以执行nmake/fmakefile.vcclean命令清除之前编译生成的文件,再重新编译。若是geos.pdb文件出问题,则将它删除再重编。如果成功再nmake/fmakefile.vcinstall安装后就可以用GEOS支持了。其实geos支持本来就应该在编译gdal时直接添加了。2OGR库数据模型OGR数据模型是基于OpenGIS的标准来设立的,相关的接口规范请参考OGC的官方网站。纵观OGR的类结构,它主要的类如下面所示。GeometrySpatialReferenceFeatureFeatureDefnLayerDataSourceDriver2.1Geometry介绍Geometry指的是几何形状,这个类中包含矢量数据模型(由OGC相关标准定义)、相关的几何操作以及数据的导入、导出(wkb/wkt形式)等函数。值得注意的是Geometry同7时包含空间参考系统(投影)信息。其类的继承图如下所示:图2.1Geometry的类结构图由图2.1所示的类结果图可知,所有Geometry类均是由OGRGeometry继承而来,OGRGeometry中定义了一些支持所有Geometry形状的公共操作。Geometry的类型包括点(OGRPoint)、线(OGRLineString)、多边形(OGRPolygon)、几何形状集合(OGRGeometryCol--lection)、点集(OGRMultiPoint)、线集(OGRMultiLineString)以及多边形集(OGRMulti--Polygon)。2.1.1几何形状基类2.1.1.1OGRGeometryOGRGeometry是几何形状的基类,所有的几何形状,如点、线、面均是由该类继承而来。该类中包含了一些空间分析的虚函数。主要函数及其功能如下:getDimension函数:获取几何对象的维数,如点为0,线为1,面为2。getCoordinateDimension函数:获取几何对象的坐标维数,如二维与三维。IsEmpty函数:判断几何对象是否为空。IsSimple函数:判断几何对象是否为简单几何形状。empty函数:清空几何对象中的数据。clone函数:复制几何对象。getEnvelope函数:获取几何对象的外包矩形。WkbSize函数:获取用wkb格式来表达几何对象数据时所需的字节数大小。importFromWkb函数:由wkb格式导入几何对象的数据。exportToWkb函数:将几何对象的数据导出为wkb格式。importFromWkt函数:由wkt格式导入几何对象的数据。exportToWkt函数:将几何对象的数据导出为wkt格式。getGeometryType函数:获取几何对象的类型。返回的是几何类型的编码。getGeometryName函数:获取几何对象类型的名称,该名称由wkt格式定义。8dumpReadable函数:未知。flattenTo2D函数:将几何对象转换为二维,即将Z值均设为0。exportToGML函数:将几何对象数据导为GML格式。exportToGEOS函数:将几何对象转换为GEOS类型。closeRings函数:将几何对象—环强制闭合,即首尾为同一个点。setCoordinateDimension函数:设置几何对象的坐标维数。assignSpatialReference函数:给几何对象分配一个空间坐标系。getSpatialReference函数:获取几何对象的空间坐标系。transform函数:对几何对象进行任意的坐标转换,并不需要几何对象已经有空间坐标系。transformTo函数:将几何对象转换到新的坐标系当中,需要几何对象已经有坐标系。Intersects函数:判断几何对象是否相交。Equals函数:判断几何对象是否相等。Disjoint函数:判断几何对象是否脱节。Touches函数:判断几何对象是否接触。Crosses函数:判断几何对象是否交叉。Within函数:判断是否内含,即几何对象A的线是否在几何对象B内部。Contains函数:判断是否包含,几何对象B的线是否都在几何对象A内部。Overlaps函数:判断几何对象是否重叠。getBoundary函数:获取几何对象的边界。Distance函数:获取几何对象间的距离。ConvexHull函数:凸壳分析,获取几何对象的凸壳。Buffer函数:缓冲区分析,获取几何对象的缓冲区,第一个参数为缓冲区距离,第二个参数为缓冲区的平滑度,即生成的边界逼近真实缓冲区边界的程度,可参考默认值。Intersection函数:交叉分析,对两个几何对象求交。Union函数:联合分析,对两个几何对象求并。Difference函数:差异分析
本文标题:OGR入门
链接地址:https://www.777doc.com/doc-4614659 .html