zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    c#语音报时(含完整的声音资源文件).rar
    SQL 查看数据库表的容量大小
    c# 鼠标在控件上拖动 移动窗体 移动窗口
    C# winform 右下角弹出窗口结果
    Qt通用方法及类库8
    Qt通用方法及类库7
    Qt通用方法及类库6
    Qt通用方法及类库5
    Qt通用方法及类库4
    Qt通用方法及类库3
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313958.html
Copyright © 2011-2022 走看看