【SQL开源代码栏目提醒】:以下是网学会员为您推荐的SQL开源代码-基于开源类库OGR的空间数据互操作研究 - 会议论文,希望本篇文章对您学习有所帮助。
鼍辩磅与自主戗氟。
基于
开源类库O G R的空间数据互操作研究 陈磊赵书河 南京大学地理与海洋科学学院 【摘要】随着地理信息系统的不断发展,空间数据的多源异构性愈加严重,GIs互操作逐渐成5勾GIS发展道路上 的一个热点和难点问题。
本文基于
开源类库OGR,首先介绍了其体系架构,接着提出了支持GIs互操作的数据适 配器模式,并以此分析了利用oGR进行空间数据互操作的原理。
最后,在python-3丘台上通过两个实例实现了两种 空问数据互操作方法,实验取得了满意的结果,对今后比较与同类产品间的异同点具有指导意义。
【关键词】互操作;空间数据;OGR;
开源 1、引言 模式〔51;张明明等对基于Web Service的G IS互操作进 地理信息系统经过近四十年的发展,不同行业和 行了研究嘲;龚健雅等提出进行分布式跨平台的GIS互 部门已积累了大量的多源空间数据。
层出不穷的GIS 操作的方法【71;童小华分析了基于GML的互操作思路 组织、企业和应用项目定义了不同的空间数据格式 【8】o 【,】。
近几年,网络技术的迅速发展及其在数据共享方 本文将基于
开源类库OGR,介绍其体系架构,剖 面的广泛应用,导致了空间数据的多源异构性愈加严 析其进行空间数据互操作的原理。
并通过实例研究如 重。
当前环境下如何实现多源异构数据的集成,并实 何进行多源异构空间数据的互操作。
‘现数据的互操作,成为GIS发展的一个热点和难点问 题。
2、
开源类库OGR 尽管许多GIS软件厂商针对目前的情况制定了 2。
1 OGR介绍 各种形式的数据标准或一些数据转换的中间格式, OGR全称OGR Simple Features Library,它 但是在数据转换时仍存在不同程度的数据损失。
是基于开放地理信息系统协会(Open Geospatial 针对这种情况,开放地理信息系统协会(Open GIS Consortium。
简称OGC)制定的OpenG IS规范开发 Consortium Inc,,简称OGC)自1 998年以来,一共发 的C++类库,用于多源矢量数据的读取、处理及其互 布了1 7个抽象规范和1 2个实现规范。
这些规范得到了 操作。
有很多著名的GIS类软件都在使用OGR库,包 众多地理信息厂商和
开源社区的支持。
诸女l:lArcGIS、 括ESRI的ArcGIS,Google公司的Google Earth以及 FME、Supe rMap等商业GIS软件以及GeoServer、
开源领域著名的桌面软件GRASS、QGIS。
OpenLayers等
开源软件都有多源空间数据互操作的解 目前,OGR支持当今主流的矢量数据格式, 决方案,并在实际工作中发挥了巨大作用。
比较著名的有ESRI的Shapefiles、E00、Personal 所谓G I S互操作,是指在异构数据库和分布计算 GeoDatabase,MapInfo的mid/mif/TAB、USGS的 的情况下GlS用户在相互理解的基础上,能透明地获 SDTS。
以及KML、GML、GeoJSON、PostgreSQL 取所需的信息【21。
近年来,国内学者各自提出了对GIS 在内的多种基于开放架构的空间数据交换格式。
互操作的看法。
易善桢等从功能侧重点的角度,将 虽然OGR的底层实现语言是C/C++,但如今的 GIS互操作分为技术互操作、服务互操作和语义互操 版本已可以被移植到其他语言平台下进行开发,例如 作三类【3】:徐昌荣等基于FME进行7GIS技术互操作的 Java、C}}以及动态语言Python、Ruby、Perl等。
本 探讨(4】;高勇等提出了三种支持互操作的GIS软件设计 文将主要以Python结合OGR为例进行空间数据的互操 哪w豳m饿m\2哪魑E*堆≮%务‘Ⅻ。
s商#Gls&E&#颦 作研究。
过程以厦数据适配器模式说明06R实现空间数据互操 作的原理 OGR体系槊构 吁巫习—匹圃 22
开源类库OGR主要包括以下几个基础类 乡≤ 匡 ●Geomet ry 几何类封装了OpenGIS61矢量数据模型,并提 供了相交f Jnte rsects)、叠加C Ove rlaps)、相离 —忑妇 {既sj“m l等几何摊作.以及与wKB 1 we¨K… 习 Bina ry)、WKT(Well Known Text】GML、KML 等开放架构的空间数据变换格式之间的相互转换。
●Spatial Refe rence 空间参考类同样建立在OpenGIS的坐标转接标准 叵每<篙掣 之上,它封装了投影和基准面的定义。
●Peatu re 要素类封装7一个完整要素的定义。
一个完整的 要素包括空间数据及其一系列的属fl数据。
目1 OGR体}菜构目 ●Feature Definftion 要素定义粪封装了要素的字段类型信息。
通常情 (1)数据源抽象。
OGR为每个支持的数据 况下.一个要素定义对象对应一个图层(Laye r),因 源都提供了数据适配器(D ataAd El pte r).对千 此可以获得这个圈层的几何类型。
未知类型的数据潭可以先通过数据适配器注册 ●Layer (DaIaAdaple rRe口lstra『l,客户端再通过统一的空 图层类是一个抽象基类.通常表示数据源类 间数据访问接口(DataAccessor)访问。
数据适配器 (DataSou rceI中的一层要素。
模式如圈2所示 ●Data Souse 数据源类也是个抽象基类,表示舍有一层或多 层数据的~个文件或者关系数据库。
●Drive r 驱动类主要用来注册与管理每一十支持的矢量文 厕 件格式。
3、基于OGR的空问教据互攥作研究 3 1基于OGR的空闻t据互撮作理论研究 层出不穷的GIS组织企业、应用项目对地理空 问进行不同程度的抽象、组织.定义了各自不同的空 间数据格式,导致了空问数据的多源异构性愈加严 重。
而最们通过研究发现.OGR之所眦可以实现多源 固2#女{E8#^ 异构空问数据问的互操作+主要得益于其设计过程中 采用了数据适配器模式(Data Adapte r),并对地理 (21分屠抽象{分层组织】。
在这层抽象中. 空间进行了三攻抽象(见图¨:我们概括它们为数据 OG晌客户端提供了统一的空问数据访问接13。
通过 源抽象、丹层抽象、要素抽象。
下面将就这三次抽象 这个接口.我们既可以像EsRl shape讹s那样存储单 I科研与考主朝新一要素类型(点、线、面)数据,也可以像Maplnfo 路。
另一种是基于其提供的命令行工具的开发模式,的TAB文件一样存储混合要素类型数据,即一个图 它对应于数据转换的互操作思路。
下面将主要从这两层中可以存储点、线、面中的一种或几种。
当存储 个方面进行空间数据互操作的应用研究。
混合要素类型数据时,该层的GeometryType将会是wkbUnknown,代表未知类型;反之。
则会是其它某 3.2.1基于OGR API的互操作方法一类型。
例如.GeomelryType为wkbPoint代表该图 OGR为异构空间数据提供了统一的空间数据访问层为点状图层。
接口,实现了异构数据源问的兼容访问,达到了数据 (3)要素抽象。
0GRGeomet ry类是建立在 互操作的目的。
我们以ESRI Shapefiles与Maplnfo的OpenGIS的简单要素数据模型之上的,因此这种基于 TAB文件间的互操作为例,在python平台上结合OGR标准API的架构更加有利于多源异构空间数据之间的互 API实现了异构数据源中几何要素的叠加操作。
并获取操作。
Geometry类图如图3所示 了Shapefiles文件中的一些属性信息。
详细的
代码如 图4 lmport ogr if—n锄e一’._一main一” shpLayer=ogr.Oven(”E:/china/boundary.shp”1.GetLayer(O) tabLaycr=ogr.Open(”E:/ehina/intersect.tab”).GetLayer(O) tabFeature=tabLayer.GetFeature(I) tabGeo=tabFeature.GetGeometryRef0 图3 OGR的Geometry类图【9】9 for i in range(shpLayer.GetFeatureCount0): shpFeatum=shpLayer.GetFeature(i) 通过研究。
我们认为,OG R这种基于数据 shpGeo=shpFeature.GetGeometryRef0适配器模式的类库架构,直接暴露给客户的是由 temp=shpGeo.Interseet(tabGeo)DataAccessor提供的统一的空间数据访问接口,通过 iftemp:一致的访问方式兼容多源空间数据,可以很好的实现 print shpFeature.GetFieldAsString(6)空间数据的互操作。
而且,当服务器端的数据源发生变化时,只要改变相应的空间数据适配器,而无需修 图4基于OGR API的互操作实例
代码改具体应用的数据访问逻辑和访问方法,实现了业务逻辑的独立性以及系统的稳定性。
在这个例子中,我们具有两个图层,一个是名称 为boundary的中国省级以上区划境界多边形层,它是 3.2基于OGR的空间数据互操作应用研究 ESRI Shapefiles格式的;另一个是Maplnfo TAB格式 基于OGR的空问数据互操作主要是技术互操作。
的多边形数据。
我们先获得intersect图层第一个要素GIS技术互操作是将异构G JS开发到可“移动”的程 的几何图形,然后在boundary层上遍历所有要素,如度,从而能自由地交换空间数据。
这种方式是以数据 果两者相交.则打印相交的省的名字。
最终,实验取为中心的互操作方法。
空间数据的技术互操作主要有 得了预期的结果,证明基于OGR API的方式可以实现两种思路f10】:第一是转换多源空间数据的格式,然后 异构数据源间的互操作。
在统一的平台上使用;第二是在GIS软件环境下直接访问数据。
3.2.2基于命令行工具的互操作方法 与两种技术互操作思路对应的,基于OGR主要 OGR包含了三个主要工具,分别为og rinfo(用有两种开发模式。
第一种是直接基于OGR API的开发 来列举关于矢量数据的相关信息),ogr209r(进行模式。
这种模式对应于前面直接访问数据的互操作思 矢量格式之间的转换)I,烟.ogrindex(对矢量数据进 帅m套四九m P71I;}!;E№m~%*20Bs自K6ls№k≈z% 行分幅索引)t其口og r209 r是0G啪核心I具,它 不仅涉强i9数据车身,还涉及到敷据的话义。
由于数 的用法如下图5所示: 据层面的技术互操作仍然是比较低级的互操作.因此 我们有必要对服务互操作以Ⅱ语义j操作进行更进一 Usage ogr209rhklp自ll一】〔郴nⅡ】f“ph cE】〔f 步的研究。
m—l…c】〔m nJ 【select ndtluT仆帅州msmc删whH ●膏z■ 【
sql‘目1 sⅫcmenp〕〔hclPEencⅢ】 〔I】i《n.#■等#}№目S*IM】.№球信E#学基Ⅻ 【·5pal~ymm xma‘州“〕〔倒“thd_ △书n京:科学Bm社,2000 【rid Fl uJ 〔2】《t4.**涛.№¥亮等基fOGC webn§模型的 〔·a s“sⅡmq【t sH 5n d 1【…r…deq 城市异构G rSA#作九日代Ⅻ给,2006.29(1) B血oNAME=VALU,E|I】 dstn…name 〔3j¥善桢李琦.i%成空间信息的*享;i操”M■ %a报,2000,B{2):54~61 sw一四u∽tname 〔4】镕目荣,zg.《日i§fFME∞目si操n女*… ¨oNAME;VALUE〕〔Ⅱ1…m。
J〔nntyI_c〕 Ⅱi4I大学学报.2006,27f 3).1-3 【lq。
’〔hy。
r J】 〔5I高自.朱晓禧.张目』#盘持i操作的GIS技#R计4 式【u】计算nI&,2007.33(10):49—51 目j Jg,20lor∞m* 16j张口q颦勇基fWeb se…ce的Glsi揖nⅢi…* #n;%代*.2007.10 114—116 og r209fI具既可以实现对整个图层教据的格式 f7l袭健#+Ⅲ文珏苷从}台G sⅫ镕}自i镕nGIS∞£R 转换,也可以对其中一些符台空问或者属性约束的数 九武&^¥学报-镕息#学m,2004,29(t1).985~988 据进行转换.或者进行投影变换。
例如,我们要将 〔8】im华,*§声基十GML的GISi目g泰%t;&月日 一个ESRI Shapefiles的数据转换成KML格式,并在 £IⅢ目济^学学报c自#科学m).2004.6(2):749—754 川GDAL/OGR〔EB『oLl,九pf^州w gdal org/2008 9 Google Earlhe#叠加显示,那么最们可以在命令行内 输人如下
代码: 〔10】黄铺.Cliff K等日Ⅱ*n的G s日究…十目日象目 oF20F。
xe f1KML__。
…”刚“1m帅∞d町kml”’E:/ m学报,2001.“9)925—931 chin枷u2 4p sⅫ”TSRS EPSO:4326 eql’SELECT’FROM ■一镕者■n bou2 4p 阵E(1985一),月,Ⅱ*‰H^.《±mR±.i{* 经过转换后的KML散据存储在“E:/chm”文件 究方自,寸高H辫率镕日、*教mm信e*‰{OpenGIS)等。
夹下.具有EPSG为4326的WGS84投影。
我们把它导 八到Google Earth中(如图6).与真实地面能够很好 的吻台I圈中红色边界为转化后的数据1.说明转换 的精度很高,能够进行异构数据的互操作。
4、结论 本文基于
开源类库OGR.首先介绍了其体系架 构,接着提出了支持GIS互操作的数据适配器模式, 并以此分析7利用OGR进行空间数据互操作的原理: 最后,在python平台上通过两个实例实现了两种空间 数据互操作方法.实验取得了满意的结果.对今后比 较同类产品问的异同点具有指导意义。
空间数据的互操作是一十交流过程。
在交流中, 田6Go。
出Eanh±叠m##目目l【ML敷#.
上一篇:
Ubuntu Server+Nginx+Mysql+Php5.3+Zend Guard Loader+eAccelerator+ ...
下一篇:
恋沫