基于8211lib库对s57电子海图的解析和存储

  电子海图是为适用航海需要而绘制的包含海域地理信息和航海信息的一种数字化的专题地图,符合国际标准的电子海图数据统称为S-57电子海图。本文主要在S-57电子海图数据的理论模型和数据结构的基础上,实现对S-57电子海图数据文件的解析,将海图信息解析后保存到xml文件中,供后续调用和研究。

  电子导航图(Electronic Navigational Chart, ENC)是由各个国家的航道官方部门根据国际航道组织的《数字海道测量数据传输标准》(S-57标准)而制作的,它是一种面向对象的矢量格式的电子地图,其存储形式是二进制,简称为S-57标准电子海图。

  电子海图的理论模型和数据结构,可以查看国际标准《数字海道测量数据传输标准》,这里不再详述,对应英文版是《IHO TRANSFER STANDARD for DIGITAL HYDROGRAPHIC DATA》。

  S-57标准封转格式是ISO/IEC 8211国际标准,封装标准的基础是文件,逻辑记录是封装标准的基本成分。ISO 8211lib是C++编写的开源库,专门用于读取符合ISO 8211封装标准的数据文件,如S-57电子海图数据格式和空间数据传输标准数据集(SDTS);GDAL是一个开源栅格空间数据转换库,其中OGR是对GDAL的扩展,功能与GDAL类似,主要提供对矢量数据格式的读写,支持S-57电子海图格式,其中S57reader类是对ISO 8211lib库的封装,该类中包含读取S-57电子海图数据文件所用到的基本函数。

  OGR中关于S-57读取的官方文档在http://www.gdal.org/drv_s57.html可以看到,其中需要注意OGR的S-57驱动模块将处理S-57文件里所有的feature要素,其中S-57的特征物标(feature objects)转换为要素(feature),空间物标(geometry objects)自动转换化对应要素下的空间几何对象。

  在OGR中,从S-57文件读取的所有要素根据物标类型(OBJL)归属于相应的图层,可以类比于GIS里的shape格式,对应的图层下有要素(feature),要素下面有字段(field)和几何对象(geometry),要素的几何形状可以从几何形状中获取,要素属性可以从字段中获取。

  其中,深度信息(Depth soundings)是S-57文件特有的,在读取Depth soundings需要设置S57 Control Options中的ADD_SOUNDG_DEPTH选项为ON,对于S57 Control Options和读取和导出的深层次知识请移http://www.gdal.org/drv_s57.html

  最后,注意在程序中附加s57objectclasses.csv, and s57attributes.csv文件,否则会缺少信息,如图层只有5层,无法读取等深线等,官方是这么解释的,The S-57 reader depends on having two supporting files, s57objectclasses.csv, and s57attributes.csv available at runtime in order to translate features in an object class specific manner. These should be in the directory pointed to by the environment variable S57_CSV, or in the current working directory.

  因为项目需要,需要把S-57文件里特定图层的信息提取出来,S-57文件解析后,我把感兴趣的信息保存到xml文件中,方便后续的处理。在C++中,对XML文件处理中,使用一个开源的解析XML的解析库--TinyXML,能够用于C++,这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。

  最后,解析和存储效果如下图所示,按图层要素顺序依次组织,需要程序资料或者有问题的可以下面留言!

   ps.如果无法得到一个object class的属性或者值不正确,如VALDCO的值始终为0,注意是否加载了S-57的支持文件.csv, The solution to that is to set the GDAL_DATA environment variable to point the directory with the s57objectclasses.csv and related files,具体可以参见 http://osgeo-org.1560.x6.nabble.com/OGR-to-access-s57-file-missing-attributes-issue-td3742926.html 的解析。

  编译须知:程序开发环境是VS2015,其中需要在编译的时候修改两个位置,如下图所示,否则编译会报错。

 

 文献链接参考:

  《数字海道测量数据传输标准》

  http://www.gdal.org/drv_s57.html

转载于:https://www.cnblogs.com/DHUtoBUAA/p/6506906.html

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: s57电子海图是一种国际标准的电子海图格式,由国际海事组织(IMO)制定和推广。s57电子海图二次开发包则是基于s57电子海图格式的软件开发工具包。 s57电子海图二次开发包提供了一系列功能和接口,帮助开发者对s57电子海图进行进一步的开发和定制。它包括了数据解析、显示、查询和编辑等功能,可以使开发者轻松地对s57电子海图进行读取、展示和修改。通过使用s57电子海图二次开发包,开发者可以根据自己的需求开发出各种海图应用软件,如船舶导航系统、海图编辑工具等。 s57电子海图二次开发包具有丰富的功能和灵活的接口,可以满足不同开发需求。它支持多种编程语言,如C++、Java等,可以在不同的操作系统上运行。开发者可以根据自己的技术背景和偏好选择合适的编程语言进行开发,并结合s57电子海图的功能进行开发。 总之,s57电子海图二次开发包是一个提供了多种功能和接口的软件开发工具包,可以帮助开发者对s57电子海图进行进一步的开发和定制。它提供了数据解析、显示、查询和编辑等功能,支持多种编程语言和操作系统。通过使用s57电子海图二次开发包,开发者可以开发出各种海图应用软件,满足不同的需求。 ### 回答2: S57电子海图二次开发包是一种用于海图数据处理和开发的软件工具。它提供了一系列的功能和接口,使开发人员能够轻松地处理和分析S57格式的海图数据。 S57电子海图二次开发包可以读取和解析S57格式的海图文件,将其转化为可操作的数据,如点、线、面等。开发人员可以利用这些数据进行海图的绘制、分析和定位等工作。 此外,S57电子海图二次开发包还提供了一些高级功能,如海图叠加、海图查询、海图编辑等。开发人员可以利用这些功能进行更加复杂和细致的海图数据处理和开发工作。 S57电子海图二次开发包还支持多种编程语言和平台,如C++、Java和.NET等,使开发人员能够根据自己的需求选择最适合的开发环境。 总之,S57电子海图二次开发包是一款强大的工具,能够帮助开发人员处理和开发S57格式的海图数据。它简化了海图数据处理的流程,提供了丰富的功能和接口,为海图开发工作提供了便捷和高效的解决方案。 ### 回答3: S57电子海图二次开发包是一种用于S57电子海图的软件开发工具集,可用于开发和定制与海图数据相关的应用程序。S57是一种基于国际海事组织(International Hydrographic Organization,简称IHO)标准的电子海图数据格式,广泛应用于海洋领域的航海、渔业、海上交通等方面。 S57电子海图二次开发包提供了丰富的API接口和工具,使得开发者能够方便地读取、解析和处理S57电子海图数据。开发包不仅包含了基本的数据读取功能,还提供了一系列的空间查询、图形处理和数据可视化等高级功能。开发者可以根据自己的需求使用这些功能进行二次开发,以满足自己特定的应用场景。 通过S57电子海图二次开发包,开发者可以实现诸如船只航线规划、航海安全预警、渔业资源管理、海洋环境监测等功能。此外,开发包还支持与其他相关数据源的集成,如卫星影像数据、气象数据、船舶AIS数据等,从而进一步丰富了数据处理和分析的能力。 总之,S57电子海图二次开发包为开发者提供了一个全面、灵活的工具集,能够实现对S57电子海图数据的深度定制和开发。通过二次开发,可以实现各种定制化的应用程序,并为海洋相关领域的决策和服务提供有力的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值