使用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
總結
以上是生活随笔為你收集整理的使用OGR2OGR将S57数据转为shp格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 高德地图-轨迹回放(二)
- 下一篇: tcp/ip 拥塞控制、重传、丢包、优化