我已经将地图从Google Earth引擎导出到具有公共访问权限的云存储桶(allUsers)中。存储桶中的格式是带有.png扩展名的地图瓦片。
我还使用gsutil设置了CORS设置,如下所示:
[
{
"origin": ["*"],
"responseHeader": ["Authorization", "Content-Range", "Accept", "Content-Type", "Origin", "Range"],
"method": ["GET"],
"maxAgeSeconds": 300
}
]但是尝试访问这些地图瓦片(使用一个单张tileLayer)时,我在Chrome开发工具中遇到了CORB (跨源读取阻塞)错误,并且什么都没有显示。
我在Chrome DT中的响应标头显示了以下内容:
cache-control: no-cache, no-store, max-age=0, must-revalidate
content-type: text/html; charset=utf-8
expires: Mon, 01 Jan 1990 00:00:00 GMT如何解决此问题?
发布于 2018-09-11 04:18:07
如果你想让你所有的存储桶都是可读的,你需要提供IAM policies:
gsutil iam ch allUsers:objectViewer gs://youBucketName更新:您必须使用的enpoint是:
"https://storage.googleapis.com/bucketName/ObjectName"对storage.cloud.google.com URI的所有请求都需要身份验证。即使当allUsers拥有访问对象的权限时,这一点也适用。如果您希望用户在不经过身份验证的情况下下载匿名可访问的对象,请使用直接storage.googleapis.com请求中记录的API URI。有关详细信息和示例,请参见访问公共数据。
您正在直接使用https://console.cloud.google.com/storage,这就是您将遇到此错误的原因
示例:
你有:https://console.cloud.google.com/storage/browser/logs1tiles/centralKansas/8/58/99
应该是:https://storage.googleapis.com/logs1tiles/centralKansas/8/58/99
发布于 2018-09-18 01:19:07
终于把这事搞清楚了。在Leaflet中,tileLayer应采用以下形式,带有tms=false且不带.png扩展名:
var yourTileLayer = L.tileLayer('https://storage.googleapis.com/yourbucket/yourobject/{z}/{x}/{y}',{tms=false}).addToMap();https://stackoverflow.com/questions/52264456
复制相似问题