GDAL对接华为云OBS实践
GDAL对接华为云OBS实践
背景介绍
GDAL 提供多种栅格数据的支持: asc, tiff , img, dem
OGR 提供对矢量数据格式的读写: ESRI Shapefiles, S-57, SDTS, PostGIS,OracleSpatial, Mapinfo mid/mif , Mapinfo TAB
在gdal库中将ogr和gdal两种都包含,不需要单独安装ogr的相关包。
一. 搭建GDAL环境
注意:选择操作系统尽量选择已有binary支持的进行测试,否则自行编译会遇到很多问题,gdal支持的操作系统可参考https://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries
1. 创建虚拟机,操作系统opensuse42.2,注意解决方案测试中创建虚拟机要按需,按流量计费
2. 搭建GDAL环境。(AWS桶内文件读写在gdal2.1以后的版本才支持)
登录ECS,使用yum源安装gdal软件zypper in gdal
zypper in python-gdal
gdalinfo - -version 查看版本显示为2.1
ogrinfo - -formats 以及gdal - -formats 查看栅格或矢量库支持那种类型的文件,文件后显示+v表示该类文件支持虚拟文件接口的操作。
二. GDAL相关资料
1. 虚拟文件介绍,另外还包含各类系统文件的安装包和源码(gdal源码是C++编译的包,可参考 编译成适合各类OS的python包安装)
https://www.gdal.org/gdal_virtual_file_systems.html#gdal_virtual_file_systems_vsis3
2. 论坛和github
https://github.com/OSGeo/gdal/issues/1036
3. 封装好的python 接口:
https://github.com/OSGeo/gdal/tree/master/gdal/swig/python/samples
samples下面的脚本下载到本地可直接执行gdal_ls,gdal_cp,gdal_rm等操作(封装了顺序写,随机写等接口,不需要区分栅格文件和矢量文件,脚本均可用)
4. 接口使用方法的例子:
http://erouault.blogspot.com/2017/10/gdal-and-cloud-storage.html
三. 使用非虚拟文件接口(/vsicurl/)读取桶(public读权限)里面对象,命令如下,仅支持读不支持写。
1. 读取华为云的栅格文件
gdalinfo /vsicurl/https://obs-zhouyuanyuan.obs.cn-north-1.myhwclouds.com/1.grd
2. 读取亚马逊的矢量文件
ogrinfo -ro -al -so /vsicurl/https://bucket-obs-test.s3-ap-southeast-1.amazonaws.com/test.svg
四. 使用虚拟文件接口(/vsis3/)在AWS与OBS上的结果对比。
1. AWS
1.1列举操作
1.2 Copy 操作
本地文件到aws后列举验证
1.3 删除操作
删除以及列举验证
1.4 读取操作
env AWS_S3_ENDPOINT=s3.ap-southeast-1.amazonaws.com
AWS_REGION=ap-southeast-1 AWS_ACCESS_KEY_ID=xxx
AWS_SECRET_ACCESS_KEY=XXX
ogrinfo -ro -al -so /vsis3/bucket-obs-test/test.svg
2. OBS
2.1 列举操作
列举桶里面的九个文件,下图分别在官网和GDAL接口查看,结果一致。
2.2 删除操作
上图的列举结果中有1.grd文件,下面进行删除后再列举
华为云官网上显示的文件中已经少了1.grd文件,与列举接口返回一致
2.3 读取操作
env AWS_S3_ENDPOINT=obs.cn-north-1.myhwclouds.com AWS_REGION=cn-north-1 AWS_ACCESS_KEY_ID=xxx AWS_SECRET_ACCESS_KEY=xxx ogrinfo -ro -al -so /vsis3/obs-wjl1015/test.svg
执行如上操作可以读取svg文件中的数据
2.4 Copy操作
将本地文件copy 到华为云,请使用如下命令
在华为云官网,验证上传对象
备注:copy 操作与aws的差异点在于,拷贝成的目标对象,要明确指出对象名,但亚马逊不需要,若不指定对象名,则用源文件的名字作为目标文件对象名做copy。
验证完毕。
验证结论:
对象的读,写,列举,删除,copy操作均成功。
- 点赞
- 收藏
- 关注作者
评论(0)