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

  • 相关阅读:
    UVA 818 Cutting Chains 切断圆环链 (暴力dfs)
    UVA 211 The Domino Effect 多米诺效应 (回溯)
    UVA225 Golygons 黄金图形(dfs+回溯)
    UVA208 Firetruck 消防车(并查集,dfs)
    UVA11212 EditingaBook ( IDA*搜索)
    UVA 140 Brandwidth 带宽 (dfs回溯)
    uva 1601 poj 3523 Morning after holloween 万圣节后的早晨 (经典搜索,双向bfs+预处理优化+状态压缩位运算)
    UVA10410 TreeReconstruction 树重建 (dfs,bfs序的一些性质,以及用栈处理递归 )
    cdoj 414 八数码 (双向bfs+康拓展开,A*)
    UVA 246 10-20-30 10-20-30游戏 模拟+STL双端队列deque
  • 原文地址:https://www.cnblogs.com/xiaowangba/p/6313958.html
Copyright © 2011-2022 走看看