影像集合支持添加多种存储媒介中的影像文件,并支持.tif、.img、.ecw和.pix多种影像文件格式。下文详细介绍不同存储媒介的影像适合哪种“添加影像数据方式”以及如何配置。
影像文件可以来源于以下存储媒介:
- 本地存储,包括Windows和Linux系统;
- NAS网络存储,支持FTP、NFS、SMB访问协议;
- 对象存储,包括:华为OBS对象存储服务、阿里OSS对象存储服务、S3简单存储服务,既支持HTTP访问协议;也可以通过GDAL的vsis3和vsioss文件系统处理程序来访问AWS S3和阿里OSS对象存储桶中的影像文件;
- FTP服务器;
- 远程共享目录(NFS)。
本地存储
本地存储的影像可以通过下面任意方式添加到集合:
- 通过“影像数据目录”方式,将指定目录路径下的影像添加到集合。本地目录路径写法:Linux系统:/home/data/images/;Windows系统: E:\data\imageChina。
- 通过“清单文件”方式,清单文件(.txt文件)中一行记录为一个影像文件的全路径,路径写法:Linux系统:/home/data/images/H48C002002.tif;Windows系统: E:\data\imageChina\H48C002002.tif。
- 添加本地存储的单个影像文件,通过"单个影像文件"的方式,指定影像文件的全路径,写法同上。
远程共享目录
远程共享目录中的影像可以通过下面任意方式添加到集合:
- 通过“影像数据目录”的方式,将指定远程目录的影像添加到集合。
远程共享目录路径写法:Windows系统:\\172.16.120.34\imageChina。
对于Linux系统,需要将共享目录进行挂载,使用挂载后的目录路径(挂载命令行为:mount -t cifs //{ip}/share /mnt/share,其中:ip为共享目录的IP地址,/mnt/share为挂载后的目录,例如:mount -t cifs //172.16.120.34/imageChina /mnt/share)
- 通过“清单文件”的方式,清单文件(.txt文件)中一行记录为一个影像文件的全路径,路径写法:Windows系统:\\172.16.120.34\imageChina\H48C002002.tif。对于Linux系统,需要将共享目录进行挂载,然后使用挂载后的文件路径,参见上文。
- 添加远程共享目录中的单个影像文件,则可以通过"单个影像文件"的方式,指定影像文件的全路径,写法同上。
FTP服务器
FTP服务器上的影像添加到集合,只能通过“清单文件”方式,清单文件(.txt文件)中一行记录为一个影像文件的FTP全路径,路径写法:ftp://172.16.120.34/imageChina/H48C002002.tif。
注意:
FTP路径中包含非英文字符,如:ftp://127.0.0.1/影像数据/dem30米分辨率.tif,添加影像可能失败,原因是FTP客户端的编码与服务器所使用的编码不一致,FTP服务器路径经过转码后导致路径错误,无法访问到影像文件。
解决方法:获得转码后的FTP服务器影像路径,例如:FTP服务器路径为:ftp://127.0.0.1/影像数据/dem30米分辨率.tif,它转码后载路径为:ftp://127.0.0.1/%E5%BD%B1%E5%83%8F%E6%95%B0%E6%8D%AE/dem30%E7%B1%B3%E5%88%86%E8%BE%A8%E7%8E%87.tif。
转码后的路径,可以通过下面的方式获得:将影像文件的FTP服务器路径输入到浏览的地址栏,回车即可。此外,还可以通过转码(decode)的方式。
挂载远程目录
- 针对Linux系统,通过NFS协议挂载远程目录,再将其中的影像添加到集合。
挂载命令行为:mount -t cifs //{ip}/share /mnt/share,其中:ip为共享目录的IP地址,/mnt/share为挂载后的目录,例如:mount -t cifs //172.16.120.34/imageChina /mnt/share)
挂载后的目录访问方式同Linux系统的本地存储,将其中的影像添加到集合,请参见:本地存储
- 针对Windows系统,通过SMB协议挂载远程目录,再将其中的影像添加到集合。
挂载后的目录访问方式同Windows系统的本地存储,将其中的影像添加到集合,请参见:本地存储
对象存储
对象存储中的影像可以通过下面任意方式添加到集合:
- 添加对象存储中的单个影像文件,则可以通过"单个影像文件"的方式,指定影像文件的全路径,写法同下。
- 通过“清单文件”的方式,清单文件(.txt文件)中一行记录为一个影像文件的全路径,路径写法如下:
集合支持添加华为OBS对象存储服务、阿里OSS对象存储服务、S3简单存储服务中的影像。
关于对象存储服务中影像文件的全路径写法:
- HTTP访问协议:路径: /vsicurl/http://1.1.1.1:80/mybucket/L51C001003.tif,其中:“/vsicurl/”是http协议的必须前缀;“mybucket”为桶名。
- HTTPS访问协议:路径: /vsicurl/https://1.1.1.1:443/mybucket/L51C001003.tif,其中:“/vsicurl/”是http协议的必须前缀;“mybucket”为桶名。
- GDAL的vsis3文件系统程序访问(推荐):路径:/vsis3/mybucket/L51C001003.tif,其中,“/vsis3/”是必须前缀;“mybucket”为桶名。
访问对象存储的服务器环境配置
影像服务支持通过GDAL 的/vsis3/文件系统处理程序访问对象存储中的影像文件以及将静默切片结果写入对象存储,/vsis3/文件系统处理程序支持遵循标准 S3(Amazon Simple Storage Service)协议的对象存储,包括:华为OBS对象存储服务、阿里OSS对象存储服务、亚马逊S3简单存储服务、SeaweedFS海藻对象存储等。
影像服务能够成功访问对象存储中的影像或者将静默切片结果写入对象存储,都需要服务器完成相关系统环境变量的配置,以下配置选项适用于 /vsis3/ 处理程序,需要根据您使用的对象存储的具体情况,选择所需配置项并添加到服务器的系统环境变量中,系统环境变量配置后要重启iServer服务器才生效。
关于选择下面哪些变量添加到系统环境变量中,需要充分了解所使用的对象存储服务支持访问协议、对象存储的URI、身份验证方式、存储桶的访问方式等相关配置,结合下面变量内容的说明,才能正确配置系统环境变量。
1. 对象存储服务器的访问协议
AWS_HTTPS=[YES/NO]
“AWS_HTTPS”变量的值为NO,将使用HTTP协议访问S3中的资源;“AWS_HTTPS” 变量的值为YES,将使用HTTPS协议访问S3中的资源。
如果没有配置“AWS_HTTPS”变量,默认使用HTTPS协议访问S3中的资源。
“AWS_HTTPS”变量值如何设置,需要确认S3对象存储服务器所配置支持的请求协议。
2. 对象存储的访问域名(Endpoint)
AWS_S3_ENDPOINT=[value]
设置S3 API访问对象存储的访问地址,支持域名和“IP+端口”两种地址形式。默认值为 s3.amazonaws.com。变量值输入示例:
AWS_S3_ENDPOINT=obs.cn-north-4.myhuaweicloud.com
AWS_S3_ENDPOINT=1.1.1.1:80 (采用HTTP协议访问)
AWS_S3_ENDPOINT=1.1.1.1:443 (采用HTTPS协议访问)
备注说明:关于端口的说明,S3对象存储服务器可能提供了HTTP和HTTPS两种访问协议,需要根据当前系统环境变量“AWS_HTTPS”指定的协议,为“AWS_S3_ENDPOINT”变量值指定正确的端口号。
举例说明 |
如何确定对象存储访问地址,以MINIO对象存储为例,对象存储服务为S3 API访问对象存储开放的端口是9110,对象存储服务器的IP为:172.16.121.40,对象存储服务器控制台访问地址为:172.16.121.40:8110。 以管理员身份进入MINIO对象存储控制台(CONSOLE),如下图所示,也可以看到其所监听的S3 API访问对象存储服务器地址,0.0.0.0表示所有网络上的9110端口。 此示例中 AWS_S3_ENDPOINT变量值应该指定为:172.16.121.40:9110 |
3. 对象存储桶的访问凭证
对象存储器通常支持多种身份验证,选择一种身份验证方式并通过系统环境变量指定对应的凭证即可。
如果使用影像服务管理对象存储中的影像文件,需要iServer服务器具有读取对象存储中资源的权限;如果影像服务需要将影像集合静默切片的结果瓦片存储在对象存储中,前端能够调取预切片结果,则需要iServer服务器同时具有读取和写入对象存储中资源的权限。
AWS_NO_SIGN_REQUEST=[YES/NO]
确定是否禁用请求签名,此选项可用于具有公共访问权限的存储桶。如果为YES,可匿名连接到不需要身份验证访问权限的存储桶。
如果访问对象存储桶必需身份验证(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY),则“AWS_NO_SIGN_REQUEST”变量值设置为NO。
举例说明 |
以MINIO对象存储为例,如下图所示,存储桶的访问策略为Public,默认同时具有读写权限,因此,访问该存储桶的资源不需要身份验证,需要添加AWS_NO_SIGN_REQUEST=YES的系统环境变量,且无需添加AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量。 |
AWS_ACCESS_KEY_ID=value
用于身份验证的访问密钥 ID。如果使用的是临时凭证,则必须设置AWS_SESSION_TOKEN。
AWS_SECRET_ACCESS_KEY=value
与AWS_ACCESS_KEY_ID关联的访问密钥。如果使用的是临时凭证,则必须设置AWS_SESSION_TOKEN。
举例说明 |
以MINIO对象存储为例,如下图所示,存储桶的访问策略为Private,表示未经授权不能进行任何操作。访问该存储桶的资源需要授权。 MINIO对象存储使用IAM(AWS Identity and Access Management)配置权限,通过控制登录用户以及控制用户的权限来实现授权。在MINIO控制台中,创建的User(用户)通过Access Key和Secret Key验证用户身份,通过Policies(策略)控制该用户的对资源的操作权限。 如下图所示,在MINIO控制台中,IAM Policies页面按照访问策略来组织管理用户,如果需要读写权限,可以点击“readwrite”项目,查看具有该权限的用户。 访问此类对象存储桶的资源时,需要添加AWS_NO_SIGN_REQUEST=NO的系统环境变量,根据影像服务需要的对象存储资源访问权限,选择合适的登录用户,并添加AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY环境变量指定用户身份验证凭据。 例如,配置具有读写权限的用户(上图中ugo用户)身份验证凭据,需要设置如下三个系统环境变量: AWS_NO_SIGN_REQUEST=NO AWS_ACCESS_KEY_ID=ugo AWS_SECRET_ACCESS_KEY=ugopassword |
AWS_SESSION_TOKEN=value
用于验证临时凭证(AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY)的会话令牌。
4. 对象存储桶的访问方式
AWS_VIRTUAL_HOSTING=[TRUE/FALSE]
配置访问对象存储桶(Bucket)的两种方式。默认值为TRUE。
S3 支持虚拟托管类型(Virtual Hosted)和路径类型(Path) URL 访问存储桶。如果AWS_VIRTUAL_HOSTING变量为TRUE,为虚拟托管类型,是指将Bucket置于Host Header的访问方式,通过虚拟Bucket主机名标识Bucket,例如:mybucket.cname.domain.com,即“桶名+HostName”。如果AWS_VIRTUAL_HOSTING变量为FALSE,为路径类型,表示将Bucket标识为URI中的顶级目录,例如:cname.domain.com/mybucket。
举例说明 |
以MINIO对象存储为例,默认支持格式为 http://example.com/bucket/object 的路径式请求。MINIO_DOMAIN 环境变量用于启用虚拟主机样式的请求。如果您配置 MINIO_DOMAIN,MinIO 将同时支持来自客户端的路径式和虚拟主机式请求。 因此,需要根据对象存储配置支持的请求样式,添加AWS_VIRTUAL_HOSTING变量并指定正确变量值。 例如:默认情况下,MINIO对象存储使用路径请求样式访问存储桶,那么,就需要添加AWS_VIRTUAL_HOSTING=FALSE系统环境变量。 例如:针对阿里OSS对象存储服务,仅支持虚拟托管访问方式,可以选择添加AWS_VIRTUAL_HOSTING=TRUE系统环境变量,或者不添加,默认使用虚拟托管样式访问存储桶。 |
5. 对象存储桶读写相关配置
VSIS3_CHUNK_SIZE=<MB>
设置分段上传的区块大小。默认值为 50 MB。
针对影像服务静默切片写入对象存储,需要配置该变量,变量的值推荐为1000 MB。
CPL_VSIS3_CREATE_DIR_OBJECT=[YES/NO]
确定是否允许 VSIMkdir() 创建空对象来对空目录进行建模。如果为NO,可以防止VSIMkdir()操作创建目录名称以斜杠结尾的空对象;默认为YES,GDAL会创建这样的对象,这样就可以对空目录进行建模,但是这可能会导致应用程序不需要这样的空对象时出现兼容性问题。
经过测试,影像服务静默切片结果写入SeaweedFS海藻对象存储时,需要配置该变量,变量值为NO。
6. 配置CURL SSL证书
当访问对象存储中的数据失败时,错误信息如下:(CURL error: SSL certificate problem:),需要下载一个CURL SSL证书并完成配置。