一种基于PyQGIS开发系统的电子海图解析显示方法技术方案

技术编号:37344097 阅读:22 留言:0更新日期:2023-04-22 21:35
本发明专利技术提供了一种基于PyQGIS开发系统的电子海图解析显示方法,针对电子海图引擎开发难、技术封锁问题,结合开源GIS平台QGIS,通过调用GDAL库中S57Reader驱动类中封装的ISO 8211Lib库,解析读取电子海图文件、获取全部信息并转存到对应的ESRI ShapeFile中;基于QGIS自带的SVG海图符号库设计了一种S

【技术实现步骤摘要】
一种基于PyQGIS开发系统的电子海图解析显示方法


[0001]本专利技术属于电子海图引擎开发
,具体涉及一种基于PyQGIS开发系统的电子海图解析显示方法。

技术介绍

[0002]电子海图显示与信息系统(Electronic Chart Display and Information System,ECDIS)是符合数字海图相关国际标准的船载助航系统,是航海业中继雷达/ARPA之后的一项重大技术创新,其在现代船舶舰艇导航方面发挥着极其重要的作用。电子海图引擎(Electronic Chart Engine,ECE)作为ECDIS系统的软件核心,占据重要地位,随着电子海图和长江电子航道图应用越来越广泛,对电子海图引擎的研究应用逐渐成为重要的核心课题。
[0003]对此,我国从上个世纪80年代就开始研究,到目前为止国内民用方面鲜有具有完全自主知识产权的符合国际标准的ECDIS产品,对于电子海图引擎,有易海蓝电子海图浏览器等,传统的海图引擎是根据C/C++/QT进行开发的,不曾考虑PyQGIS进行开发。随着ESRI加入国际海道测量组织(International Hydrographic Organization,IHO),并且参与编制IHO新一代标准S

100系列工作,目前IHO的标准规范逐步向GIS靠拢,而GIS也是逐步往海图方向渗透,本专利技术具有重要的发展应用前景。

技术实现思路

[0004]本专利技术要解决的技术问题是:提供一种基于PyQGIS开发系统的电子海图解析显示方法,用于解析显示电子海图文件。
[0005]本专利技术为解决上述技术问题所采取的技术方案为:一种基于PyQGIS开发系统的电子海图解析显示方法,包括以下步骤:
[0006]S1:在计算机上安装Pycharm和QGIS,并在Pycharm上配置PyQGIS环境;
[0007]S2:调用GDAL库的S57Reader驱动类封装的ISO 8211Lib库,解析读取S

57电子海图文件,并将获取到的全部信息转存到对应的ESRI ShapeFile中;
[0008]S3:基于QGIS的SVG海图符号库,通过对比、分析S

52符号绘制指令和SVG图元对象语言,设计一种S

52绘图指令重构方法自主创建缺少的SVG海图符号;
[0009]S4:参照S

52国际标准中的S

57物标分类与IMO PS显示分类对照表,对电子海图解析转存的ESRI ShapeFile进行符号化渲染。
[0010]按上述方案,所述的步骤S2中,具体步骤为:
[0011]S21:在PyQGIS环境下调用GDAL库的S57Reader驱动类封装的ISO8211Lib库,通过调用ISO 8211Lib库中封装的类中的函数解析读取电子海图文件;具体步骤为:
[0012]S211:注册所有驱动,创建读取电子海图文件的驱动对象;
[0013]S212:使用驱动对象打开电子海图文件,获取电子海图数据源;
[0014]S213:获取数据源中的图层数和当前图层对象;
[0015]S214:循环依次调用函数获取图层中的每一个特征要素和特征要素的属性表;
[0016]S215:获取属性表的列数和属性列,以及属性列的名称、数据类型和特征要素的属性信息;
[0017]S216:实例化特征要素中存储的几何对象,并获取当前对象的几何类型;获取几何对象的包括经度、纬度和水深值的空间信息;获取特征要素的全部属性信息和空间信息后删除当前实例化对象以释放缓存空间;重复步骤S213~S215,遍历读取当前图层中某一类几何类型的所有特征要素;
[0018]S217:读取完一种几何类型的所有特征要素的属性信息和空间信息后,重新遍历读取其他几何类型的特征要素,最终实现对电子海图文件的解析和数据读取;
[0019]S22:根据空间记录元素间的拓扑关系将电子海图文件的图层分为点、线、面、水深点和电子海图数据集描述五大类,并转存到对应的ESRI ShapeFile中;具体步骤为:
[0020]S221:注册所有驱动,创建ESRI ShapeFile的驱动对象;
[0021]S222:使用驱动对象创建数据源,建立ESRI ShapeFile的坐标系SRS,将ESRI ShapeFile的坐标系统设置为地理坐标系;
[0022]S223:创建点、三维点、线、面图层,其中三维点图层用于存储电子海图中水深点这一特征要素的属性信息和空间信息;
[0023]S224:创建特征要素和特征要素属性字段来存储属性信息;创建几何要素用于储存特征要素的空间信息;将特征要素的属性信息与几何对象关联起来;
[0024]S225:重复上述步骤S222~S224,依次建立ESRI ShapeFile储存电子海图中对应图层的信息,最终实现对电子海图文件的转存。
[0025]按上述方案,所述的步骤S3中,具体步骤为:
[0026]S31:将S

52符号绘制指令SP对应的画笔颜色在SVG中通过stoke属性定义;
[0027]S32:将指令SW定义的画笔宽度W转换为SVG中的画笔宽度0.32W,并通过SVG中的stroke

width属性定义;
[0028]S33:通过SVG中的stroke

opacity设置透明度,ST0/1/2/3分别对应Stroke

opacity=100%/75%/50%/25%;
[0029]S34:指令PU和PD中的坐标信息传递给SVG中的(x1,y1)、(x2,y2)或者points属性,可在SVG重构出直线/折线;
[0030]S35:指令PU和AA中的坐标信息传递给SVG路径图元中的C属性,可以重构出圆弧;
[0031]S36:指令PU、PMO、CI、PM2、FP中的圆心坐标和半径传递给SVG圆形图元的cx、cy、r属性,可以重构出圆,FP中的填充颜色传递给SVG中的fill属性;
[0032]S37:指令PU、PM0、PU/AA/PD、PM1、PU/AA/PD、PM2、EP、FP中的坐标信息传递给SVG多边形图元的points属性,可以重构出多边形,EP、FP的线条宽度信息和填充颜色信息分别传递给SVG的stroke

width、fill属性。
[0033]按上述方案,所述的步骤S4中,具体步骤为:
[0034]S41:根据图层中特征物的属性信息确定渲染规则,按照图层名称(layer.name)和几何类型(layer.geometry)确定渲染方法,其中图层几何类型分为点图层、线图层、面图层和水深点图层,点图层、线图层、面图层的几何类型分别用数字0、1、2表示;
[0035]S42:遍历转存的本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于PyQGIS开发系统的电子海图解析显示方法,其特征在于:包括以下步骤:S1:在计算机上安装Pycharm和QGIS,并在Pycharm上配置PyQGIS环境;S2:调用GDAL库的S57Reader驱动类封装的ISO 8211Lib库,解析读取S

57电子海图文件,并将获取到的全部信息转存到对应的ESRI ShapeFile中;S3:基于QGIS的SVG海图符号库,通过对比、分析S

52符号绘制指令和SVG图元对象语言,设计一种S

52绘图指令重构方法自主创建缺少的SVG海图符号;S4:参照S

52国际标准中的S

57物标分类与IMO PS显示分类对照表,对电子海图解析转存的ESRI ShapeFile进行符号化渲染。2.根据权利要求1所述的一种基于PyQGIS开发系统的电子海图解析显示方法,其特征在于:所述的步骤S2中,具体步骤为:S21:在PyQGIS环境下调用GDAL库的S57Reader驱动类封装的ISO 8211Lib库,通过调用ISO 8211Lib库中封装的类中的函数解析读取电子海图文件;具体步骤为:S211:注册所有驱动,创建读取电子海图文件的驱动对象;S212:使用驱动对象打开电子海图文件,获取电子海图数据源;S213:获取数据源中的图层数和当前图层对象;S214:循环依次调用函数获取图层中的每一个特征要素和特征要素的属性表;S215:获取属性表的列数和属性列,以及属性列的名称、数据类型和特征要素的属性信息;S216:实例化特征要素中存储的几何对象,并获取当前对象的几何类型;获取几何对象的包括经度、纬度和水深值的空间信息;获取特征要素的全部属性信息和空间信息后删除当前实例化对象以释放缓存空间;重复步骤S213~S215,遍历读取当前图层中某一类几何类型的所有特征要素;S217:读取完一种几何类型的所有特征要素的属性信息和空间信息后,重新遍历读取其他几何类型的特征要素,最终实现对电子海图文件的解析和数据读取;S22:根据空间记录元素间的拓扑关系将电子海图文件的图层分为点、线、面、水深点和电子海图数据集描述五大类,并转存到对应的ESRI ShapeFile中;具体步骤为:S221:注册所有驱动,创建ESRI ShapeFile的驱动对象;S222:使用驱动对象创建数据源,建立ESRI ShapeFile的坐标系SRS,将ESRI ShapeFile的坐标系统设置为地理坐标系;S223:创建点、三维点、线、面图层,其中三维点图层用于存储电子海图中水深点这一特征要素的属性信息和空间信息;S224:创建特征要素和特征要素属性字段来存储属性信息;创建几何要素用于储存特征要素的空间信息;将特征要素的属性信息与几何对象关联起来;S225:重复上述步骤S222~S224,依次建立ESRI ShapeFile储存电子海图中对应图层的信息,最终实现对电子海图文件的转存。3.根据权利要求1所述的一种基于PyQGIS开发系统的电子海图解析显示方法,其特征在于:所述的步骤S3中,具体步骤为:S31:将S

52符号绘制指令SP对应的画笔颜色在SVG中通过stoke属性定义;S32:将指令SW定义的画笔宽度W转换为SVG中的画笔宽度0.32W,并通过SVG中的
stroke

width属性定义;S33:通过SVG中的stroke

opacity设置透明度,ST0/1/2/3分别对应Stroke

opacity=100%/75%/50%/25%;S34:指令PU和PD中的坐标信息传递给SVG中的(x1,y1)、(x2,y2)或者points属性,可在SVG重构出直线/折线;S35:指令PU和AA中的坐标信息传递给SVG路径图元中的C属性,可以重构出圆弧;S36:指令PU、PMO、CI、PM2、FP中的圆心坐标和半径传递给SVG圆形图元的cx、cy、r属性,可以重构出圆,FP中的填充颜色传递给SVG中的fill属性;S37:指令PU、PM0、PU/AA/PD、PM1、PU/AA/PD、PM2、EP、FP中的坐标信息传递给SVG多边形图元的points属性,可以重构出多边形,EP、FP的线条宽度信息和填充颜色信息分别传递给SVG的stroke

width、fill属性。4.根据权利要求1所述的一种基于PyQGIS开发系统的电子海图解析显示方法,其特征在于:所述的步骤S4中,具体步骤为:S41:根据图层中特征物的属性信息确定渲染规则,按照图层名称layer.name和几何类型layer.geometry确定渲染方法,其中图层几何类型分为点图层、线图层、面图层和水深点图层,点图层、线图层、面图层的几何类型分别用数字0、1、2表示;S42:遍历转存的ESRI ShapeFile文件,将各矢量图层按照相应的渲染方法渲染后显示。5.根据权利要求4所述的一种基于PyQGIS开发系统的电子海图解析显示方法,其特征在于:所述的步骤S41中,点图层渲染方法的具体步骤为:S41

11:获取图层名称name和几何类型GeometryType,判断是否为点图层,并在海图符号库中检索是否有对应的符号代码与name匹配;S41

12:有匹配的符号,则调用QgsSvgMarkerSymbolLayer()来获取对应的SVG符号,若没有匹配的符号则删除默认渲染方式,不进行渲染;S41

13:创建点符号渲染样式,并通过deleteSymbolLayer(0)来删除默认渲染样式;S41

14:通过appendSymbolLayer()函数在点符号渲染样式中添加SVG符号,并根据图层中特征要素的属性信息获取渲染规则rule;S41

15:若没有特殊渲染规则,则通过QgsSingleSymbolRenderer()函数构建单一渲染器Render;通过layer.setRenderer(Render)将整个图层所有特征物都以渲染器中的样式进行渲染,并通过layer.triggerRepaint()函数来刷新图层,实现点图层的符号化渲染;S41

16:针对有渲染规则的图层,通过函数QgsRuleBasedRenderer()构建规则渲染器RuleRender,并通过函数QgsRuleBasedRenderer.Rule()传入点图层的渲染规则;再使用layer.setRenderer(RuleRender)来遍历规则并对匹配规则的特征要素进行符号化渲染,通过layer.triggerRepaint()函数来刷新图层,实现点图层的规则化渲染;S41

17:针对需要填充颜色和注记的图层,通过QgsSimpleMarkerSymbolLayer()函数创建填充样式fill,利用函数fill.setFillColor()、fill.setStrokeColor()、fill.setSize()分别设置填充颜色、边界线颜色和填充尺寸;通过函数QgsPalLayerSettings()和QgsTextFormat()创建标注器settings和文本容器format;通过format.setFont()和format.setColor()设置标注的字体样式和颜色,并通过
settings.setFormat(format)函数获取设置的标注样式;接着通过settings.fieldName()来设置需要标注的图层属性字段,并通过QgsVectorLayerSimpleLabeling(settings)来创建图层的标注样式labels,最后通过函数layer.setLabeling(labels)来实现图层属性字段的标注。6.根据权利要求4所述的一种基于PyQGIS开发系统的电子海图解析显示方法,其特征在于:所述的步骤S41中,线图层渲染方法的具体步骤为:S41

21:获取图层名称和几何类型,判断是否为线图层,并在海图符号库中检索是否...

【专利技术属性】
技术研发人员:马勇曹成胡文韬胡祖硕严新平
申请(专利权)人:武汉理工大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1