使用OGR2OGR将S57数据转为shp格式

S57海图数据中包含了大量的图层,在目前ArcMap软件作为必备的GIS软件之一,所以还是shp格式处理起来可能比较方便(这里的方便仅仅是对于某些人觉得shp最常见,用的最广泛而言,其实我本人觉得shp不好的地方就是一个数据要多个文件组成,有点不爽)。所以可能需要把S57的数据转为shp数据。下面使用gdal提供的ogr2ogr工具来进行转换,希望对大家有用。

首先我们使用ogrinfo查看s57的数据中包含的图层等信息,因为后面转换的时候需要这个信息。如图1所示。

图1 S57数据中包含的图层

知道了s57数据中包含的图层,下面就可以使用ogr2ogr工具来将s57中的图层转为shp数据,命令行如下:

C:\gdal\bin>ogr2ogr.exe -f "ESRI Shapefile" D:\s57polygon.shp D:\s57\C1100102.000 Area
图2 使用OGR2OGR转换为shp格式

从上图可以看出,shp数据的属性表中不支持StringList和IntegerList格式的属性值报错了。其他的还是都正确的。

今天还发现一个问题,同样的s57数据,同样的gdal库,在我的电脑上就出现异常了。这个s57的数据中其实是有25个图层,比如使用QGIS打开是就是对的,如图3所示,而我使用GDALinfo查看却是只有5个图层,如图1所示,但是这个数据我在另外一台电脑显示的却是25个图层与QGIS一致,这个问题目前还没找到造成的原因,后续待查。目前大致可以肯定的是,将25个图层读取为5个图层,貌似分类是DSID一个,点,线,面和元数据四个图层。也就是把25个图层按照图层类型给重新归类了,这点可以从图2转出来的数据进行验证。

图3 QGIS打开的s57数据显示的图层个数

用QGIS打开图2将面状数据转为shp加载进去,还有把s57所有的面状数据加载进去,图4所示,可以发现两者还是有很大的差异的,但是我在公司的电脑读取的25个图层,然后转一个就OK。

图4 加载shp数据显示轮廓

图5 加载s57面状数据显示轮廓

……………………………………………………分割线…2013-07-13………………………………………………………………………

上文中的打开S57的数据图层变成5个,原因已经查明,就是没有设置GDAL_DATA的目录导致。在程序开始中使用下面的代码即可读取到S57的图层。

CPLSetConfigOption("GDAL_DATA","C:\warmerda\bld\data");

如果使用的ogrinfo的命令行工具,在命令行中加入下面的参数也可以。

--config GDAL_DATA C:\warmerda\bld\data

转载自:https://blog.csdn.net/liminlu0314/article/details/8856502

You may also like...