GDAL应用
sf2gis@163.com
2014年11月5日
2014年11月7日添加性能测试
2014年11月12日添加vrt、批量处理
2014年11月12日添加 格式转换
2014年11月13日添加定义坐标系统
2014年11月15日添加vrt合成及更改分辨率
2014年11月15日添加重采样方法测试
2014年11月18日增加gdal地理范围裁剪
2014年11月20日添加文件数量测试
1 GDAL/OGR总览
1.1 功能
GDAL
- 使用 gdalinfo 浏览影象
- 使用 gdal_translate 转换数据格式
- 使用 gdalwarp 重投影
- 使用 gdal_warp 或 gdal_merge.py 拼接影象
- 使用 gdaltindex 生成作为栅格切片索引的 shp 文件
OGR
- 使用 ogrinfo 浏览元数据
- 使用 ogr2ogr 转换数据格式
参考:http://live.osgeo.org/zh/quickstart/gdal_quickstart.html
1.2 性能测试
1.2.1gdalwarp:多线程和缓存性能提升效果
gdalwarp:默认单线程性能最好。多线程无明显的提升(占用3个线程)。改变缓存空间大小会降低性能,并可能导致内存不足。双线性内插重采样较最邻近法重采样性能有所降低(7%)。投影降低性能21%左右。
gdal_merge.bat:性能好,仅需gdalwarp的21%。但只能使用最邻近法,无法更改重采样方法。
vrt文件能够有效的提高处理效率,可以被所有方法使用。
gdal_translate性能很好,配合vrt文件可以高效完成许多工作。
附:测试数据
输入580M*4,17477*11651
1.gdalwarp
single: start:2014-11-06 20:40:20 end:2014-11-06 20:53:52span= 14m
multi: start=2014-11-06 20:55:54 end= 2014-11-06 21:09:35span=14m
multi-wm1g: start=2014-11-06 21:10:23 end= 2014-11-0621:19:45 (error)span=9m
multi-wm300m:start=2014-11-0621:20:33 end=2014-11-06 21:44:55 span=24m
multi-wm500m: start=2014-11-06 21:45:51 end=2014-11-0622:08:26 span=23m
single: start=2014-11-06 22:09:08 end=2014-11-06 22:22:13span=13m
single-wm1g: start=2014-11-06 22:23:00 end=2014-11-0622:38:04 span=15m
merge-bi2(project):start=2014-11-0700:20:31 end=2014-11-07 00:37:36 span=17m
merge-bi3:start=2014-11-07 00:44:43 end=2014-11-07 00:59:17span=15m
2.merge
set OSGEO4W_ROOT=D:\Program Files (x86)\QGIS Chugiak
set PATH=%OSGEO4W_ROOT%\bin;%PATH%
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
D:\output\out\J50>gdal_merge.bat -n 0 -a_nodata 0 -ofGTiff -o merge14.tif NJ50C003003_lonlat-L14.tif NJ50C003004_lonlat-L14.tifNJ50C004003_lonlat-L14.tif NJ50C004004_lonlat-L14.tif
start:2014-11-06 23:15:02 end:2014-11-06 23:18:12 span=3m
1.2.2改变分辨率方法测试
vrt+translate方法(参见:更改分辨率)比直接使用gdal_translate设置分辨率(参见:改变分辨率/缩放)效率高15%以上,比使用目标分辨率vrt和nearest的gdalwarp提高75%以上(参见:更改分辨率),比使用源分辨率vrt和nearest的gdalwarp提高95%,比使用目标分辨率和bilinear的gdalwarp提高87%(此种方法无实际意义,不会使用源数据进行重采样)。
附:测试结果
vrt.bat
@echo start=%time%
gdalbuildvrt j50-zoomin.vrt j50/*.jpg -tr 0.00001 0.00001
gdal_translate j50-zoomin.vrt j50-zoomin.tif
@echo end=%time%
D:\output\getile>D:/vrt.bat
start= 0:14:24.78
D:\output\getile>gdalbuildvrt j50-zoomin.vrt j50/*.jpg -tr0.00001 0.00001
D:\output\getile>gdal_translate j50-zoomin.vrtj50-zoomin.tif
end= 0:15:03.34
translate.bat
@echo start=%time%
gdalbuildvrt j50.vrt j50/*.jpg
gdal_translate -outsize 26367 25269 j50.vrt j50-translate.tif
@echo end=%time%
D:\output\getile>D:/translate.bat
start= 0:15:56.91
D:\output\getile>gdalbuildvrt j50.vrt j50/*.jpg
D:\output\getile>gdal_translate -outsize 26367 25269j50.vrt j50-translate.tif
end= 0:16:26.94
vrt-warp.bat
@echo start=%time%
gdalbuildvrt j50-zoomin.vrt j50/*.jpg -tr 0.00001 0.00001
gdalwarp j50-zoomin.vrt j50-zoomin.tif
@echo end=%time%
D:\output\getile>D:/vrt-warp.bat
start= 0:37:49.00
D:\output\getile>gdalbuildvrt j50-zoomin.vrt j50/*.jpg -tr0.00001 0.00001
D:\output\getile>gdalwarp j50-zoomin.vrt j50-zoomin.tif
end= 0:39:30.37
warp.bat
@echo start=%time%
gdalbuildvrt j50.vrt j50/*.jpg
gdalwarp -tr 0.00001 0.00001 j50.vrt j50-warp.tif
@echo end=%time%
D:\output\getile>D:/warp.bat
start= 0:52:06.31
D:\output\getile>gdalbuildvrt j50.vrt j50/*.jpg
D:\output\getile>gdalwarp -tr 0.00001 0.00001 j50.vrtj50-warp.tif
end= 1:00:29.96
resample.bat
@echo start=%time%
gdalbuildvrt j50-zoomin.vrt j50/*.jpg -tr 0.00001 0.00001
gdalwarp -r bilinear j50-zoomin.vrt j50-zoomin.tif
@echo end=%time%
D:\output\getile>D:/resample.bat
start= 1:01:18.61
D:\output\getile>gdalbuildvrt j50-zoomin.vrt j50/*.jpg -tr0.00001 0.00001
D:\output\getile>gdalwarp -r bilinear j50-zoomin.vrtj50-zoomin.tif
end= 1:04:34.90
1.2.3重采样方法测试
设置重采样只能使用gdalwarp,并且在gdalwarp方法中同时设置分辨率和采样方法才有效。
使用vrt设置分辨率,再设置gdalwarp的方法是错误的。
附:测试结果
resapmle-merge.bat
@echo start=%time%
gdalbuildvrt -overwrite j50-zoomin.vrt j50/*.jpg
gdalwarp -overwrite -r bilinear -tr 0.00001 0.00001j50-zoomin.vrt j50-resample-warpmerge.tif
@echo end=%time%
D:\output\getile>D:\resample-merge.bat
start=11:14:24.53
D:\output\getile>gdalbuildvrt -overwrite j50-zoomin.vrtj50/*.jpg
D:\output\getile>gdalwarp -overwrite -r bilinear -tr0.00001 0.00001 j50-zoomin.vrt j50-resample-warpmerge.tif
end=11:15:39.09
vrt-warp.bat
@echo start=%time%
gdalbuildvrt -overwrite j50-zoomin.vrt j50/*.jpg -tr 0.000010.00001
gdalwarp -overwrite j50-zoomin.vrt j50-warpmerge.tif
@echo end=%time%
D:\output\getile>D:\vrt-warp.bat
start=11:16:41.18
D:\output\getile>gdalbuildvrt -overwrite j50-zoomin.vrtj50/*.jpg -tr 0.00001 0.00001
D:\output\getile>gdalwarp -overwrite j50-zoomin.vrtj50-warpmerge.tif
end=11:17:23.94
resample.bat
@echo start=%time%
gdalbuildvrt -overwrite j50-zoomin.vrt j50/*.jpg -tr 0.000010.00001
gdalwarp -overwrite -